Go je open-source programski jezik opće namjene. Inspiriran je produktivnošću Python dok istovremeno nudi mogućnosti jezika C. Izvorno ga je razvio Google kako bi riješio probleme s kojima su se susretali u svojoj bazi koda (složenost koda i dugo vrijeme kompilacije). Kao i svaki drugi moderni programski jezik, Go je prikladan za sve vrste namjena. Na primjer, može se koristiti za web razvoj, skriptiranje naredbenog retka, mrežne poslužiteljske aplikacije, front-end razvoj itd.
U ovom vodiču, mi provest ćemo vas kroz korake postavljanja jednostavne Go web aplikacije na Ubuntu 22.04 LTS. Također ćemo implementirati Nginx reverzni proxy za upravljanje opterećenjem prometa.
Preduvjeti
Za izvođenje koraka prikazanih u ovom vodiču, trebat će vam sljedeće unaprijed konfigurirane komponente:
- Ispravno konfiguriran Ubuntu Saznajte više o postavljanju vlastitog Ubuntu poslužitelja na CloudSigma.
- Go programsko okruženje s potrebnim varijablama okruženja ( $GOROOT i $GOPATH). Pogledajte vodič o konfiguriranju Go programskog okruženja na Ubuntuu.
- Nginx za reverzni proxy. Ovaj vodič detaljno opisuje instalaciju i konfiguraciju Nginxa na Ubuntuu.
- Prikladan uređivač teksta za rad s Go kodom, na primjer, Atom, Sublime Text, Brackets, VS Code, Vim, itd. Za ovaj vodič, VS Code će biti naš odabrani uređivač teksta.
Ako usluga treba biti dostupna putem naziva domene, tada morate imati FQDN usmjeren na poslužitelj. U tom slučaju, preporučuje se osigurati Nginx pomoću SSL-a. Možete saznati više o osiguravanju Nginxa s Let’s Encrypt na Ubuntuu iz našeg vodiča.
Korak 1 – Stvaranje Go web aplikacije
Izgradit ćemo jednostavnu Go web aplikaciju koja će ispisati “Hello World” na zaslonu prilikom pristupa domeni. Nadalje, aplikacija će pozdraviti korisnika prilikom pristupa <domena>/greet/<korisničko_ime>.
Započnite stvaranjem novog projekta pod $GOPATH. Stvorite direktorij projekta:
|
1 |
mkdir -pv $GOPATH/go-web |

Promijenite trenutni direktorij:
|
1 |
cd $GOPATH/go-web |

Zatim pokrenite projekt:
|
1 |
go mod init <naziv_paketa> |

Zatim stvorite main.go koji će služiti kao korijen naše Go aplikacije. Sadržavat će izvorni kod za našu web aplikaciju:
|
1 |
touch main.go |
Otvorite projekt u VS Codeu:
|
1 |
code . |
Zalijepite sljedeći kod u datoteku main.go:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
package main import ( "fmt" "net/http" ) func main() { http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { fmt.Fprintf(w, "Hello World") }) http.HandleFunc("/greet/", func(w http.ResponseWriter, r *http.Request) { name:= r.URL.Path[len("/greet/"):] fmt.Fprintf(w, "Hello %s\n", name) }) http.ListenAndServe(":9990", nil) } |

Pogledajmo ukratko strukturu Go programa koji smo upravo stvorili:
- Pojam package main služi kao ulazna točka u našu aplikaciju. Također upućuje Go prevoditelj da kompajlira datoteku kao izvršnu datoteku umjesto kao dijeljenu biblioteku.
- Naredba import uvozi sve dodatne module potrebne za rad programa. Ovdje smo uvezli pakete fmt (za ispis teksta) i net/http (za web poslužiteljske aplikacije).
- Pomoću funkcije
http.HandleFunc, uspostavili smo dvije rute:
- Prva ruta / služi kao nadređena ruta unutar func main.
- Druga ruta
/greet/ prihvaća URL parametar (u ovom slučaju niz znakova). Niz se zatim prikazuje popraćen porukom pozdrava.
- URL Putanja se koristi za pohranjivanje vrijednosti nakon /greet/. Vrijednost se zatim prosljeđuje kao name URL parametra.
- Funkcija http.ListenAndServe pokreće web poslužitelj. Ovdje sluša na portu 9990.
Sada kada je naš program spreman, kompajlirajte datoteku u izvršnu datoteku:
|
1 |
go build main.go |
Go prevoditelj će stvoriti izvršnu datoteku s istim nazivom kao i datoteka. Pogledajte izlaz:
|
1 |
ls -lh |
Korak 2 – Konfiguriranje systemd unit datoteke za izvođenje u pozadini
Do sada, ako se trenutni korisnik odjavi iz sustava, Go web aplikacija će prestati raditi. To je loš dizajn za web poslužitelj. Kako bismo riješili ovaj problem, stvorit ćemo systemd unit datoteku kako bi nastavila raditi u pozadini, čak i kada se korisnik odjavi s poslužitelja. To dovodi konfiguraciju korak bliže implementaciji spremnoj za produkciju.
Stvorite namjensku systemd datoteku goweb.service pod /lib/systemd/system:
|
1 |
sudo nano /lib/systemd/system/goweb.service |
Dodajte sljedeći isječak u unit datoteku:
|
1 2 3 4 5 6 7 8 9 10 11 |
[Unit] Description=goweb [Service] Type=simple Restart=always RestartSec=5s ExecStart=/home/<username>/go/go-web/main [Install] WantedBy=multi-user.target |

Ovdje,
- Varijabla ExecStart označava točku ulaza za uslugu putem glavne izvršne datoteke koja se nalazi u našem direktoriju projekta ( $GOPATH/go-web). Imajte na umu da smo umjesto navođenja $GOPATH, upisali punu putanju do izvršne datoteke. To je zato što je varijabla $GOPATH vidljiva samo korisniku.
- Varijabla Restart govori systemd što učiniti u slučaju da program prestane raditi. Vrijednost always govori systemd da ponovno pokrene program svaki put kada prestane s radom.
- Varijabla RestartSec govori systemd da pričeka određeno vrijeme prije pokušaja ponovnog pokretanja programa. Ovdje je vrijednost postavljena na 5s (5 sekundi).
- Izjava WantedBy=multi-user.target određuje u kojem će stanju systemd omogućiti uslugu.
Spremite datoteku i zatvorite uređivač. Pokrenite uslugu:
|
1 |
sudo service goweb start |

Provjerite radi li usluga:
|
1 |
sudo service goweb status |

Kao što izlaz sugerira, aplikacija je pokrenuta i radi. Sada smo spremni koristiti Nginx kao obrnuti proxy.
Korak 3 – Konfiguriranje Nginxa kao obrnutog proxyja
Sada ćemo stvoriti blok poslužitelja kako bi Nginx djelovao kao obrnuti proxy. Web aplikacija će biti izložena internetu putem obrnutog proxyja (za dodatne performanse i sigurnost).
Promijenite trenutni aktivni direktorij u sites-available:
|
1 |
cd /etc/nginx/sites-available |

Sada stvorite datoteku s nazivom domene na kojoj želite izložiti svoju aplikaciju. Za demonstraciju ćemo koristiti example.com:
|
1 |
sudo nano example.com |
Unesite sljedeći kod u datoteku bloka:
|
1 2 3 4 5 6 |
server { server_name example.com www.example.com; location / { proxy_pass http: //localhost:9990; } } |

Ovdje koristimo proxy_pass za posluživanje Go web aplikacije na IP adresi poslužitelja (localhost) na portu 9990.
Da biste omogućili Nginx blok, stvorite simboličku poveznicu (također poznatu kao soft link) datoteke u mapu sites-enabled:
|
1 |
sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/example.com |

Ponovno učitajte Nginx konfiguraciju kako bi promjene stupile na snagu:
|
1 |
sudo nginx -s reload |
Korak 4 – Provjera
Ako je sve prošlo kako se očekivalo, web aplikacija bi sada trebala biti dostupna na localhost:9990 i domeni koju smo konfigurirali. Otvorite URL u web pregledniku:
|
1 |
localhost:9990 |

Kao što se i očekivalo, aplikacija ispisuje “Hello World” na zaslonu. To je zadatak primarne rute. Zatim testirajte drugu rutu posjetom sljedećem URL-u:
|
1 |
localhost:9990/greet/<ime> |

Aplikacija uspješno vraća jednostavnu poruku pozdrava s imenom iz parametra primljenog iz URL-a.
Voila! Uspješno smo postavili Go web aplikaciju na naš lokalni poslužitelj!
Završne misli
U ovom smo vodiču prikazali postavljanje jednostavne Go web aplikacije uz pomoć standardnih Go knjižnica. Također smo postavili reverzni proksi koristeći Nginx. Iako je demonstracija izvedena na lokalnom poslužitelju, za javni poslužitelj strogo se preporučuje implementirati SSL certifikat za sigurno izlaganje internetu. Za više Go programiranja, možete pogledati naš vodič o Izgradnji i instalaciji Go programa.
Sretno programiranje!


Komentari
Još nema komentara. Budite prvi.