Späť na blog

Nasadenie webovej aplikácie v jazyku Go pomocou Nginx na Ubuntu 22.04

Nasadenie webovej aplikácie v jazyku Go pomocou Nginx na Ubuntu 22.04

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:

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:

Go Web Application Make Dir

Zmeňte aktuálny adresár:

Go Web Application Change Dir

Potom inicializujte projekt:

Go Web Application Init Project

Ď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:

Otvorte projekt vo VS Code:

Vložte nasledujúci kód do súboru main.go:

Go Web Application Main Go

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:

Kompilátor Go vytvorí spustiteľný súbor s rovnakým názvom ako súbor. Pozrite si výstup:

Go Web Application 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:

Do súboru jednotky pridajte nasledujúci úryvok:

go web service

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:

go web start

Overte, či je služba spustená a funguje:

go web 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:

cd

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:

 

Do súboru bloku zadajte nasledujúci kód:

example.com

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:

create sym

Znovu načítajte konfiguráciu Nginx, aby sa zmeny prejavili:

reload nginx

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:

Hello World

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:

Hello Cloud

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!

author

Pranay Kapgate

Autor · CloudSigma

Preslav Dobrev je kreatívny dizajnér v spoločnosti CloudSigma, ktorý sa zameriava na konzistentnú firemnú identitu prostredníctvom tradičných a inovatívnych marketingových kanálov. Dokáže brilantne spájať umeleckú víziu so strategickým marketingom, čím vytvára pôsobivé príbehy značky.

Komentáre

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