Terug naar blog

Een Go-webapplicatie implementeren met Nginx op Ubuntu 22.04

Een Go-webapplicatie implementeren met Nginx op Ubuntu 22.04

Go is een open-source programmeertaal voor algemene doeleinden. Het is geïnspireerd op de productiviteit van Python terwijl het de mogelijkheden van C biedt. Het is oorspronkelijk ontwikkeld door Google om problemen aan te pakken waar ze met hun codebase tegenaan liepen (codecomplexiteit en lange compilatietijd). Net als elke andere moderne programmeertaal is Go geschikt voor allerlei doeleinden. Het kan bijvoorbeeld worden gebruikt voor webontwikkeling, command-line scripting, netwerkserver-apps, front-end ontwikkeling, enz.

In deze handleiding leiden we u door de stappen voor het implementeren van een eenvoudige Go-webapplicatie op Ubuntu 22.04 LTS. We zullen ook een Nginx reverse proxy implementeren om de verkeersbelasting af te handelen.

Vereisten

Om de stappen in deze handleiding uit te voeren, moet u de volgende componenten vooraf hebben geconfigureerd:

Als de service toegankelijk moet zijn via een domeinnaam, moet u een FQDN naar de server hebben verwijzen. In dat geval is het aanbevolen om Nginx te beveiligen met SSL. U kunt meer lezen over het beveiligen van Nginx met Let’s Encrypt op Ubuntu in onze tutorial.

Step 1 – Een Go-web-app maken

We bouwen een eenvoudige Go-web-app die “Hello World” op het scherm toont bij het openen van het domein. Bovendien zal de app de gebruiker begroeten bij het openen van <domein>/greet/<gebruikersnaam>.

Begin met het maken van een nieuw project onder $GOPATH. Maak de projectmap aan:

Go Web Application Make Dir

Wijzig de huidige map:

Go Web Application Change Dir

Initialiseer vervolgens een project:

Go Web Application Init Project

Maak vervolgens main.go dat zal dienen als de root van onze Go-applicatie. Het zal de broncode voor onze web-app bevatten:

Open het project in VS Code:

Plak de volgende code in het bestand main.go:

Go Web Application Main Go

Laten we het Go-programma dat we zojuist hebben gemaakt kort analyseren:

  • De term package main dient als het startpunt van onze applicatie. Het geeft de Go-compiler ook de opdracht om het bestand te compileren als een uitvoerbaar bestand in plaats van een gedeelde bibliotheek.
  • De import-instructie importeert alle aanvullende modules die nodig zijn om het programma te laten werken. Hier hebben we de fmt (voor het afdrukken van tekst) en net/http (voor webserverapplicaties) pakketten geïmporteerd.
  • Met behulp van de functie http.HandleFunc, hebben we twee routes ingesteld:
    • De eerste route / dient als de bovenliggende route binnen func main.
    • De second route /greet/ accepteert een URL-parameter (in dit geval een string). De string wordt vervolgens weergegeven vergezeld van de begroeting.
      • URL Pad wordt gebruikt voor het opslaan van de waarde na /greet/. De waarde wordt vervolgens doorgegeven als de name van de URL-parameter.
    • De http.ListenAndServe-functie start de webserver. Hier luistert deze naar poort 9990.

Nu ons programma klaar is, compileer je het bestand naar een uitvoerbaar bestand:

De Go-compiler zal een uitvoerbaar bestand maken met dezelfde naam als het bestand. Bekijk de uitvoer:

Go Web Application ls -lh

Stap 2 – Een systemd-unitbestand configureren voor uitvoering op de achtergrond

Tot nu toe zal de Go-web-app stoppen met draaien als de huidige gebruiker uitlogt uit het systeem. Dat is een slecht ontwerp voor een webserver. Om dit probleem op te lossen, maken we een systemd-unitbestand om het op de achtergrond te laten draaien, zelfs wanneer de gebruiker uitlogt uit de server. Dit brengt de configuratie een stap dichter bij een implementatie van productieniveau.

Maak een speciaal systemd-bestand goweb.service onder /lib/systemd/system:

Voeg het volgende fragment toe aan het unitbestand:

go web service

Hier,

  • De variabele ExecStart geeft het startpunt aan voor de service via het hoofduitvoerbare bestand in onze projectmap ( $GOPATH/go-web). Let op dat we in plaats van het vermelden van $GOPATH, het volledige pad naar het uitvoerbare bestand hebben getypt. Dit komt omdat de $GOPATH-variabele alleen zichtbaar is voor de gebruiker.
  • De variabele Restart vertelt systemd wat er moet gebeuren als het programma stopt met draaien. De waarde always vertelt systemd om het programma telkens opnieuw op te starten wanneer het stopt met uitvoeren.
  • De variabele RestartSec vertelt systemd om een specifieke hoeveelheid tijd te wachten alvorens te proberen het programma opnieuw op te starten. Hier is de waarde ingesteld op 5s (5 seconden).
  • De instructie WantedBy=multi-user.target specificeert in welke staat systemd de service zal inschakelen.

Sla het bestand op en sluit de editor. Start de service:

go web start

Controleer of de service actief is en draait:

go web status

Zoals de uitvoer suggereert, is de applicatie actief en draait deze. We zijn nu klaar om Nginx als reverse proxy te gebruiken.

Stap 3 – Nginx configureren als een reverse proxy

Nu maken we een serverblok voor Nginx om als reverse proxy te fungeren. De web-app wordt via de reverse proxy aan het internet blootgesteld (voor extra prestaties en beveiliging).

Wijzig de huidige actieve map naar sites-available:

cd

Maak nu een bestand met de domeinnaam waarmee u uw applicatie wilt blootstellen. Ter demonstratie gebruiken we example.com:

 

Voer de volgende code in het blokbestand in:

example.com

Hier gebruiken we proxy_pass om de Go-web-app te serveren op het IP-adres van de server (localhost) op poort 9990.

Om het Nginx-blok in te schakelen, maakt u een symlink (ook wel bekend als een soft link) van het bestand naar de map sites-enabled:

create sym

Laad de Nginx-configuratie opnieuw om de wijzigingen door te voeren:

reload nginx

Stap 4 – Verificatie

Als alles naar verwachting is verlopen, zou de webapplicatie nu toegankelijk moeten zijn op localhost:9990 en het domein dat we hebben geconfigureerd. Open de URL in een webbrowser:

Hello World

Zoals verwacht toont de applicatie “Hello World” op het scherm. Dit is de taak van de primaire route. Test vervolgens de tweede route door de volgende URL te bezoeken:

Hello Cloud

De applicatie retourneert met succes het eenvoudige begroetingsbericht met de naam uit de parameter die is ontvangen van de URL.

Voila! We hebben met succes een Go-webapplicatie op onze lokale server geïmplementeerd!

Laatste overwegingen

In deze handleiding hebben we gedemonstreerd hoe je een eenvoudige Go-webapplicatie implementeert met behulp van de standaardbibliotheken van Go. We hebben ook een reverse proxy geïmplementeerd met behulp van Nginx. Hoewel de demonstratie is uitgevoerd op een lokale server, wordt het voor een openbare server ten zeerste aanbevolen om een SSL-certificaat te implementeren voor een veilige blootstelling aan het internet. Voor meer informatie over programmeren in Go kun je onze handleiding bekijken over Het bouwen en installeren van Go-programma's.

Veel computerplezier!

author

Pranay Kapgate

Auteur · CloudSigma

Preslav Dobrev is een creatief ontwerper bij CloudSigma, met de nadruk op een consistente bedrijfsidentiteit door middel van traditionele en innovatieve marketingkanalen. Hij is bedreven in het samenvoegen van artistieke visie met strategische marketing om impactvolle merkverhalen te creëren.

Reacties

Nog geen reacties. Wees de eerste.