Zpět na blog

Nasazení webové aplikace v Go pomocí Nginx na Ubuntu 22.04

Nasazení webové aplikace v Go pomocí Nginx na Ubuntu 22.04

Go je open-source víceúčelový programovací jazyk. Byl inspirován produktivitou jazyka Python a zároveň nabízí možnosti jazyka C. Původně byl vyvinut společností Google k řešení problémů, kterým čelili se svým kódem (složitost kódu a dlouhá doba kompilace). Jako každý jiný moderní programovací jazyk je Go vhodný pro nejrůznější účely. Lze jej využít například pro vývoj webových aplikací, skriptování v příkazové řádce, síťové serverové aplikace, vývoj front-endu atd.

V této příručce vás provedeme kroky nasazení jednoduché webové aplikace v jazyce Go na Ubuntu 22.04 LTS. Implementujeme také reverzní proxy server Nginx pro zvládnutí síťového provozu.

Požadavky

K provedení kroků popsaných v této příručce budete potřebovat následující předem nakonfigurované komponenty:

Pokud má být služba přístupná pod doménovým jménem, musíte mít FQDN nasměrovaný na server. V takovém případě se doporučuje zabezpečit Nginx pomocí SSL. Více se dozvíte v našem návodu na securing Nginx with Let’s Encrypt on Ubuntu from our tutorial.

Krok 1 – Vytvoření webové aplikace v Go

Vytvoříme jednoduchou webovou aplikaci v Go, která při přístupu na doménu vypíše na obrazovku “Hello World”. Dále aplikace pozdraví uživatele při přístupu na <doména>/greet/<uživatelské_jméno>.

Začněte vytvořením nového projektu pod $GOPATH. Vytvořte adresář projektu:

Go Web Application Make Dir

Změňte aktuální adresář:

Go Web Application Change Dir

Poté inicializujte projekt:

Go Web Application Init Project

Dále vytvořte main.go který bude sloužit jako kořen naší aplikace Go. Bude obsahovat zdrojový kód naší webové aplikace:

Otevřete projekt ve VS Code:

Do souboru vložte následující kód main.go:

Go Web Application Main Go

Pojďme si stručně rozebrat program v Go, který jsme právě vytvořili:

  • Termín package main slouží jako vstupní bod do naší aplikace. Také instruuje kompilátor Go, aby soubor zkompiloval jako spustitelný soubor namísto sdílené knihovny.
  • Příkaz import importuje všechny další moduly potřebné pro fungování programu. Zde jsme importovali balíčky fmt (pro tisk textů) a net/http (pro aplikace webového serveru).
  • Pomocí funkce http.HandleFunc, jsme vytvořili dvě trasy:
    • První trasa / slouží jako nadřazená trasa v rámci func main.
    • Druhá trasa /greet/ přijímá parametr URL (v tomto případě řetězec). Tento řetězec se pak zobrazí společně s uvítací zprávou.
      • URL Cesta se používá k uložení hodnoty za /greet/. Hodnota je pak předána jako name parametru URL.
    • Funkce http.ListenAndServe spouští webový server. Zde naslouchá na portu 9990.

Nyní, když je náš program připraven, zkompilujte soubor do spustitelného souboru:

Kompilátor Go vytvoří spustitelný soubor se stejným názvem jako soubor. Podívejte se na výstup:

Go Web Application ls -lh

Krok 2 – Konfigurace unit souboru systemd pro spuštění na pozadí

Pokud se až dosud aktuální uživatel odhlásil ze systému, webová aplikace v Go se přestala spouštět. To je pro webový server špatný návrh. Chcete-li tento problém vyřešit, vytvoříme unit soubor systemd, který ji udrží spuštěnou na pozadí, i když se uživatel ze serveru odhlásí. Tím se konfigurace posune o krok blíže k nasazení na produkční úrovni.

Vytvořte vyhrazený systemd soubor goweb.service v /lib/systemd/system:

Do unit souboru přidejte následující úryvek:

go web service

Zde,

  • Proměnná ExecStart označuje vstupní bod pro službu prostřednictvím hlavního spustitelného souboru umístěného v adresáři našeho projektu ( $GOPATH/go-web). Všimněte si, že místo uvedení $GOPATH, jsme napsali celou cestu ke spustitelnému souboru. Je to proto, že proměnná $GOPATH je viditelná pouze pro uživatele.
  • Proměnná Restart říká systemd co dělat v případě, že se program zastaví. Hodnota always říká systemd aby program restartoval pokaždé, když se zastaví.
  • Proměnná RestartSec říká systemd aby před pokusem o restartování programu počkal určitou dobu. Zde je hodnota nastavena na 5s (5 sekund).
  • Příkaz WantedBy=multi-user.target určuje, v jakém stavu systemd službu povolí.

Uložte soubor a zavřete editor. Spusťte službu:

go web start

Ověřte, zda je služba spuštěná a funkční:

go web status

Jak napovídá výstup, aplikace je spuštěná a funkční. Nyní jsme připraveni použít Nginx jako reverzní proxy.

Krok 3 – Konfigurace Nginx jako reverzního proxy

Nyní vytvoříme blok serveru pro Nginx, který bude fungovat jako reverzní proxy. Webová aplikace bude vystavena do internetu prostřednictvím reverzního proxy (pro vyšší výkon a bezpečnost).

Změňte aktuální aktivní adresář na sites-available:

cd

Nyní vytvořte soubor s názvem domény, na které chcete aplikaci vystavit. Pro demonstraci použijeme example.com:

 

Do souboru bloku zadejte následující kód:

example.com

Zde používáme proxy_pass k poskytování webové aplikace Go na IP adrese serveru (localhost) na portu 9990.

Chcete-li povolit blok Nginx, vytvořte symlink (také známý jako měkký odkaz) souboru do složky sites-enabled:

create sym

Znovu načtěte konfiguraci Nginx, aby se změny projevily:

reload nginx

Krok 4 – Ověření

Pokud vše proběhlo podle očekávání, měla by být webová aplikace nyní přístupná na localhost:9990 a na doméně, kterou jsme nakonfigurovali. Otevřete URL adresu ve webovém prohlížeči:

Hello World

Podle očekávání aplikace vypisuje na obrazovku “Hello World”. To je úkolem primární trasy. Dále otestujte druhou trasu návštěvou následující URL adresy:

Hello Cloud

Aplikace úspěšně vrací jednoduchou uvítací zprávu se jménem z parametru přijatého z URL adresy.

Voila! Úspěšně jsme nasadili webovou aplikaci v Go na náš lokální server!

Závěrečné myšlenky

V tomto návodu jsme demonstrovali nasazení jednoduché webové aplikace v Go s pomocí standardních knihoven Go. Nasadili jsme také reverzní proxy pomocí Nginx. Přestože byla ukázka provedena na lokálním serveru, pro veřejný server se důrazně doporučuje implementovat SSL certifikát pro zabezpečené vystavení do internetu. Pro více informací o programování v Go se můžete podívat na náš návod na Sestavení a instalace programů v Go.

Příjemné programování!

author

Pranay Kapgate

Autor · CloudSigma

Preslav Dobrev je kreativní designér ve společnosti CloudSigma, který se zaměřuje na konzistentní firemní identitu prostřednictvím tradičních i inovativních marketingových kanálů. Je zdatný v propojování umělecké vize se strategickým marketingem za účelem vytváření působivých příběhů značky.

Komentáře

Zatím žádné komentáře. Buďte první.