Go je open-source univerzálny programovací jazyk. Bol inšpirovaný produktivitou Python pričom ponúka možnosti jazyka C. Pôvodne ho vyvinula spoločnosť Google s cieľom vyriešiť problémy, ktorým čelili pri svojej codebase (zložitosť kódu a dlhý čas kompilácie). Podobne ako akýkoľvek iný moderný programovací jazyk, aj Go je vhodný na najrôznejšie účely. Môže sa použiť napríklad na vývoj webových aplikácií, skriptovanie v príkazovom riadku, sieťové serverové aplikácie, vývoj front-endu atď.
V tomto návode vás prevedieme krokmi nasadenia jednoduchej webovej aplikácie v jazyku Go na Ubuntu 22.04 LTS. Implementujeme tiež reverzné proxy Nginx na zvládnutie sieťovej záťaže.
Požiadavky
Na vykonanie krokov ukázaných v tomto návode budete potrebovať nasledujúce vopred nakonfigurované komponenty:
- Správne nakonfigurovaný Ubuntu Prečítajte si viac o nastavení vlastného servera Ubuntu na CloudSigma.
- Programovacie prostredie Go s potrebnými premennými prostredia ( $GOROOT a $GOPATH). Pozrite si návod na konfiguráciu programovacieho prostredia Go na Ubuntu.
- Nginx pre reverzné proxy. Tento návod podrobne popisuje inštaláciu a konfiguráciu Nginx na Ubuntu.
- Vhodný textový editor na prácu s kódom Go, napríklad Atom, Sublime Text, Brackets, VS Code, Vim, atď. Pre tento návod bude naším vybraným textovým editorom VS Code.
Ak má byť služba prístupná prostredníctvom doménového mena, musíte mať FQDN nasmerované na server. V takom prípade sa odporúča zabezpečiť Nginx pomocou SSL. Viac informácií o zabezpečení Nginx pomocou Let’s Encrypt na Ubuntu sa dozviete v našom návode.
Krok 1 – Vytvorenie webovej aplikácie v Go
Vytvoríme jednoduchú webovú aplikáciu v Go, ktorá pri prístupe na doménu vypíše na obrazovku “Hello World”. Okrem toho aplikácia pozdraví používateľa pri prístupe na <domain>/greet/<username>.
Začnite vytvorením nového projektu pod $GOPATH. Vytvorte adresár projektu:
|
1 |
mkdir -pv $GOPATH/go-web |

Zmeňte aktuálny adresár:
|
1 |
cd $GOPATH/go-web |

Potom inicializujte projekt:
|
1 |
go mod init <package_name> |

Ďalej vytvorte main.go ktorý bude slúžiť ako koreň našej aplikácie Go. Bude obsahovať zdrojový kód pre našu webovú aplikáciu:
|
1 |
touch main.go |
Otvorte projekt vo VS Code:
|
1 |
code . |
Vložte nasledujúci kód do súboru 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) } |

Poďme si stručne rozobrať program v Go, ktorý sme práve vytvorili:
- Výraz package main slúži ako vstupný bod do našej aplikácie. Taktiež inštruuje kompilátor Go, aby súbor skompiloval ako spustiteľný súbor namiesto zdieľanej knižnice.
- Príkaz import importuje všetky dodatočné moduly potrebné na fungovanie programu. Tu sme importovali balíky fmt (na tlačenie textov) a net/http (pre aplikácie webového servera).
- Pomocou funkcie
http.HandleFunc, sme vytvorili dve smerovania:
- Prvé smerovanie / slúži ako nadradené smerovanie v rámci func main.
- The second route
/greet/ prijíma parameter URL (v tomto prípade reťazec). Reťazec sa potom zobrazí spolu s uvítacou správou.
- URL Cesta sa používa na uloženie hodnoty za /greet/. Hodnota sa potom odovzdá ako name parametra URL.
- Funkcia http.ListenAndServe spúšťa webový server. Tu počúva na porte 9990.
Teraz, keď je náš program pripravený, skompilujte súbor do spustiteľného súboru:
|
1 |
go build main.go |
Kompilátor Go vytvorí spustiteľný súbor s rovnakým názvom ako súbor. Pozrite si výstup:
|
1 |
ls -lh |
Krok 2 – Konfigurácia súboru jednotky systemd pre spustenie na pozadí
Doteraz platilo, že ak sa aktuálny používateľ odhlási zo systému, webová aplikácia Go sa prestane spúšťať. To je pre webový server zlý dizajn. Na vyriešenie tohto problému vytvoríme súbor jednotky systemd, aby bežal na pozadí, aj keď sa používateľ odhlási zo servera. To posúva konfiguráciu o krok bližšie k nasadeniu na produkčnej úrovni.
Vytvorte vyhradený systemd súbor goweb.service pod /lib/systemd/system:
|
1 |
sudo nano /lib/systemd/system/goweb.service |
Do súboru jednotky pridajte nasledujúci úryvok:
|
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 |

Tu,
- Premenná ExecStart označuje vstupný bod pre službu prostredníctvom hlavného spustiteľného súboru umiestneného v adresári nášho projektu ( $GOPATH/go-web). Upozorňujeme, že namiesto uvedenia $GOPATH, sme zadali celú cestu k spustiteľnému súboru. Je to preto, že premenná $GOPATH je viditeľná iba pre používateľa.
- Premenná Restart hovorí systemd, čo má robiť v prípade, že program prestane bežať. Hodnota always hovorí systemd aby reštartovala program zakaždým, keď prestane bežať.
- Premenná RestartSec hovorí systemd aby pred pokusom o reštartovanie programu počkala určitý čas. Tu je hodnota nastavená na 5s (5 sekúnd).
- Príkaz WantedBy=multi-user.target určuje, v akom stave systemd povolí službu.
Uložte súbor a zatvorte editor. Spustite službu:
|
1 |
sudo service goweb start |

Overte, či je služba spustená a funguje:
|
1 |
sudo service goweb status |

Ako naznačuje výstup, aplikácia je spustená a funguje. Teraz sme pripravení použiť Nginx ako reverzný proxy server.
Krok 3 – Konfigurácia Nginx ako reverzného proxy
Teraz vytvoríme blok servera pre Nginx, aby fungoval ako reverzný proxy server. Webová aplikácia bude vystavená internetu prostredníctvom reverzného proxy servera (pre vyšší výkon a bezpečnosť).
Zmeňte aktuálny aktívny adresár na sites-available:
|
1 |
cd /etc/nginx/sites-available |

Teraz vytvorte súbor s názvom domény, na ktorej chcete svoju aplikáciu zverejniť. Na demonštráciu budeme používať example.com:
|
1 |
sudo nano example.com |
Do súboru bloku zadajte nasledujúci kód:
|
1 2 3 4 5 6 |
server { server_name example.com www.example.com; location / { proxy_pass http: //localhost:9990; } } |

Tu používame proxy_pass na obsluhu webovej aplikácie Go na IP adrese servera (localhost) na porte 9990.
Ak chcete povoliť blok Nginx, vytvorte symlink (známy aj ako mäkký odkaz) súboru do priečinka sites-enabled:
|
1 |
sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/example.com |

Znovu načítajte konfiguráciu Nginx, aby sa zmeny prejavili:
|
1 |
sudo nginx -s reload |
Krok 4 – Overenie
Ak všetko prebehlo podľa očakávania, webová aplikácia by teraz mala byť prístupná na localhost:9990 a doméne, ktorú sme nakonfigurovali. Otvorte URL adresu vo webovom prehliadači:
|
1 |
localhost:9990 |

Podľa očakávania aplikácia vypisuje na obrazovku “Hello World”. Toto je úlohou primárnej trasy. Ďalej otestujte druhú trasu návštevou nasledujúcej URL adresy:
|
1 |
localhost:9990/greet/<name> |

Aplikácia úspešne vracia jednoduchú uvítaciu správu s menom z parametra prijatého z URL adresy.
Voila! Úspešne sme nasadili webovú aplikáciu v jazyku Go na náš lokálny server!
Záverečné myšlienky
V tejto príručke sme demonštrovali nasadenie jednoduchej webovej aplikácie v jazyku Go pomocou štandardných knižníc Go. Nasadili sme aj reverzné proxy pomocou Nginx. Hoci sa demonštrácia uskutočnila na lokálnom serveri, pre verejný server sa dôrazne odporúča implementovať SSL certifikát pre bezpečné vystavenie do internetu. Pre viac programovania v jazyku Go si môžete pozrieť náš návod na Zostavovanie a inštaláciu programov v jazyku Go.
Príjemnú prácu s počítačom!


Komentáre
Zatiaľ žiadne komentáre. Buďte prvý.