Powrót do bloga

Wdrażanie aplikacji internetowej Go przy użyciu Nginx na Ubuntu 22.04

Wdrażanie aplikacji internetowej Go przy użyciu Nginx na Ubuntu 22.04

Go to otwartoźródłowy język programowania ogólnego przeznaczenia. Został zainspirowany wydajnością Python oferując jednocześnie możliwości języka C. Został pierwotnie opracowany przez Google, aby rozwiązać problemy, z którymi borykali się w swoim kodzie źródłowym (złożoność kodu i długi czas kompilacji). Podobnie jak każdy inny współczesny język programowania, Go nadaje się do wszelkiego rodzaju celów. Na przykład może być wykorzystywany do tworzenia stron internetowych, skryptów wiersza poleceń, sieciowych aplikacji serwerowych, programowania front-endu itp.

W tym poradniku przeprowadzimy Cię przez kroki wdrażania prostej aplikacji internetowej Go na systemie Ubuntu 22.04 LTS. Wdrożymy również odwrotne proxy Nginx do obsługi obciążenia ruchem.

Wymagania wstępne

Aby wykonać kroki przedstawione w tym poradniku, będziesz potrzebować następujących wstępnie skonfigurowanych komponentów:

Jeśli usługa ma być dostępna pod nazwą domeny, musisz posiadać FQDN wskazującą na serwer. W takim przypadku zaleca się zabezpieczenie Nginx za pomocą SSL. Możesz dowiedzieć się więcej o zabezpieczaniu Nginx za pomocą Let’s Encrypt na Ubuntu z naszego samouczka.

Krok 1 – Tworzenie aplikacji internetowej Go

Zbudujemy prostą aplikację internetową Go, która po wejściu na domenę wyświetli na ekranie “Hello World”. Ponadto aplikacja przywita użytkownika po przejściu na <domena>/greet/<nazwa_użytkownika>.

Zacznij od utworzenia nowego projektu w $GOPATH. Utwórz katalog projektu:

Go Web Application Make Dir

Zmień bieżący katalog:

Go Web Application Change Dir

Następnie zainicjuj projekt:

Go Web Application Init Project

Następnie utwórz main.go który będzie służył jako katalog główny naszej aplikacji Go. Będzie on zawierał kod źródłowy naszej aplikacji internetowej:

Otwórz projekt w VS Code:

Wklej następujący kod do pliku main.go:

Go Web Application Main Go

Przeanalizujmy krótko program Go, który właśnie stworzyliśmy:

  • Termin package main służy jako punkt wejścia do naszej aplikacji. Informuje również kompilator Go, aby skompilował plik jako plik wykonywalny, a nie bibliotekę współdzieloną.
  • Instrukcja import importuje wszystkie dodatkowe moduły wymagane do działania programu. Tutaj zaimportowaliśmy pakiety fmt (do wypisywania tekstu) oraz net/http (do aplikacji serwerów WWW).
  • Używając funkcji http.HandleFunc, utworzyliśmy dwie trasy:
    • Pierwsza trasa / służy jako trasa nadrzędna wewnątrz func main.
    • Druga trasa /greet/ przyjmuje parametr URL (w tym przypadku ciąg znaków). Ciąg ten jest następnie wyświetlany wraz z komunikatem powitalnym.
      • URL Ścieżka służy do przechowywania wartości po /greet/. Wartość jest następnie przekazywana jako name parametru URL.
    • Funkcja http.ListenAndServe inicjuje serwer WWW. W tym miejscu nasłuchuje na porcie 9990.

Teraz, gdy nasz program jest gotowy, skompiluj plik do postaci pliku wykonywalnego:

Kompilator Go utworzy plik wykonywalny o takiej samej nazwie jak plik. Sprawdź dane wyjściowe:

Go Web Application ls -lh

Krok 2 – Konfiguracja pliku jednostki systemd do uruchamiania w tle

Do tej pory, jeśli bieżący użytkownik wyloguje się z systemu, aplikacja internetowa Go przestanie działać. To zły projekt dla serwera WWW. Aby rozwiązać ten problem, utworzymy plik jednostki systemd, aby utrzymać jej działanie w tle, nawet gdy użytkownik wyloguje się z serwera. Przybliża to konfigurację o krok do wdrożenia klasy produkcyjnej.

Utwórz dedykowany plik systemd file goweb.service w katalogu /lib/systemd/system:

Dodaj następujący fragment kodu do pliku jednostki:

go web service

Tutaj,

  • Zmienna ExecStart wskazuje punkt wejścia dla usługi poprzez główny plik wykonywalny znajdujący się w naszym katalogu projektu ( $GOPATH/go-web). Zauważ, że zamiast wspominać o $GOPATH, wpisaliśmy pełną ścieżkę do pliku wykonywalnego. Dzieje się tak, ponieważ zmienna $GOPATH jest widoczna tylko dla użytkownika.
  • Zmienna Restart informuje systemd co zrobić w przypadku, gdy program przestanie działać. Wartość always nakazuje systemd restartować program za każdym razem, gdy przestanie on działać.
  • Zmienna RestartSec informuje systemd o odczekaniu określonego czasu przed próbą ponownego uruchomienia programu. Tutaj wartość jest ustawiona na 5s (5 sekund).
  • Instrukcja WantedBy=multi-user.target określa, w jakim stanie systemd uruchomi usługę.

Zapisz plik i zamknij edytor. Uruchom usługę:

go web start

Zweryfikuj, czy usługa działa:

go web status

Jak sugerują dane wyjściowe, aplikacja działa. Jesteśmy teraz gotowi do użycia Nginx jako odwrotnego proxy.

Krok 3 – Konfiguracja Nginx jako odwrotnego proxy

Now, we will create a server block for Nginx to act as a reverse proxy. The web app will be exposed to the internet through the reverse proxy (for additional performance and security).

Zmień bieżący katalog roboczy na sites-available:

cd

Teraz utwórz plik o nazwie domeny, pod którą chcesz udostępnić swoją aplikację. W celach demonstracyjnych użyjemy example.com:

 

Wprowadź następujący kod w pliku bloku:

example.com

Tutaj używamy proxy_pass do obsługi aplikacji internetowej Go pod adresem IP serwera (localhost) na porcie 9990.

Aby włączyć blok Nginx, utwórz dowiązanie symboliczne (znane również jako miękkie linkowanie) pliku do folderu sites-enabled:

create sym

Przeładuj konfigurację Nginx, aby zmiany weszły w życie:

reload nginx

Krok 4 – Weryfikacja

Jeśli wszystko poszło zgodnie z oczekiwaniami, aplikacja internetowa powinna być teraz dostępna pod adresem localhost:9990 oraz na skonfigurowanej przez nas domenie. Otwórz ten adres URL w przeglądarce internetowej:

Hello World

Zgodnie z oczekiwaniami, aplikacja wyświetla “Hello World” na ekranie. To jest zadanie głównej trasy. Następnie przetestuj drugą trasę, odwiedzając następujący adres URL:

Hello Cloud

Aplikacja pomyślnie zwraca proste powitanie z imieniem z parametru otrzymanego z adresu URL.

Voila! Pomyślnie wdrożyliśmy aplikację internetową Go na naszym lokalnym serwerze!

Podsumowanie

W tym poradniku zademonstrowaliśmy wdrożenie prostej aplikacji internetowej Go przy użyciu standardowych bibliotek Go. Wdrożyliśmy również odwrotne proxy za pomocą Nginx. Chociaż demonstracja została przeprowadzona na serwerze lokalnym, w przypadku serwera publicznego zdecydowanie zaleca się, aby wdrożyć certyfikat SSL w celu bezpiecznego udostępnienia w Internecie. Więcej informacji na temat programowania w Go znajdziesz w naszym samouczku dotyczącym Budowania i instalowania programów Go.

Miłego kodowania!

author

Pranay Kapgate

Autor · CloudSigma

Preslav Dobrev jest projektantem kreatywnym w CloudSigma, skupiającym się na spójnej tożsamości biznesowej przy wykorzystaniu tradycyjnych i innowacyjnych kanałów marketingowych. Biegle łączy wizję artystyczną ze strategicznym marketingiem, tworząc wywierające wpływ narracje marki.

Komentarze

Brak komentarzy. Bądź pierwszy.