Zurück zum Blog

Bereitstellung einer Go-Webanwendung mit Nginx auf Ubuntu 22.04

Bereitstellung einer Go-Webanwendung mit Nginx auf Ubuntu 22.04

Go ist eine Open-Source-Mehrzweck-Programmiersprache. Sie wurde von der Produktivität von Python inspiriert, während sie gleichzeitig die Leistungsfähigkeit von C bietet. Sie wurde ursprünglich von Google entwickelt, um Probleme zu lösen, mit denen sie in ihrer Codebasis konfrontiert waren (Codekomplexität und lange Kompilierungszeiten). Wie jede andere moderne Programmiersprache eignet sich Go für alle möglichen Zwecke. Beispielsweise kann sie für die Webentwicklung, Befehlszeilen-Scripting, Netzwerk-Server-Anwendungen, Front-End-Entwicklung usw. verwendet werden.

In dieser Anleitung werden wir Sie durch die Schritte zur Bereitstellung einer einfachen Go-Webanwendung auf Ubuntu 22.04 LTS führen. Wir werden auch einen Nginx-Reverse-Proxy implementieren, um die Datenverkehrslast zu bewältigen.

Voraussetzungen

Um die in dieser Anleitung gezeigten Schritte auszuführen, müssen die folgenden Komponenten vorkonfiguriert sein:

Wenn der Dienst über einen Domainnamen erreichbar sein soll, müssen Sie einen FQDN haben, der auf den Server zeigt. In diesem Fall wird empfohlen, Nginx mit SSL abzusichern. Mehr über die Absicherung von Nginx mit Let’s Encrypt unter Ubuntu erfahren Sie in unserem Tutorial.

Schritt 1 – Erstellen einer Go-Web-App

Wir werden eine einfache Go-Web-App erstellen, die beim Aufrufen der Domain “Hello World” auf dem Bildschirm ausgibt. Darüber hinaus begrüßt die App den Benutzer, wenn er auf <domain>/greet/<username>.

Beginnen Sie mit der Erstellung eines neuen Projekts unter $GOPATH. Erstellen Sie das Projektverzeichnis:

Go Web Application Make Dir

Wechseln Sie in das aktuelle Verzeichnis:

Go Web Application Change Dir

Initiieren Sie dann ein Projekt:

Go Web Application Init Project

Erstellen Sie als Nächstes main.go das als Stammverzeichnis unserer Go-Anwendung dient. Es wird den Quellcode für unsere Web-App enthalten:

Öffnen Sie das Projekt in VS Code:

Fügen Sie den folgenden Code in die Datei main.go:

Go Web Application Main Go

Lassen Sie uns das soeben erstellte Go-Programm kurz analysieren:

  • Der Begriff package main dient als Einstiegspunkt für unsere Anwendung. Er weist den Go-Compiler außerdem an, die Datei als ausführbare Datei anstelle einer gemeinsam genutzten Bibliothek zu kompilieren.
  • Die import -Anweisung importiert alle zusätzlichen Module, die für das Funktionieren des Programms erforderlich sind. Hier haben wir die Pakete fmt (zum Drucken von Texten) und net/http (für Webserver-Anwendungen) importiert.
  • Mit der Funktion http.HandleFunc, haben wir zwei Routen eingerichtet:
    • Die erste Route / dient als übergeordnete Route innerhalb von func main.
    • Die zweite Route /greet/ akzeptiert einen URL-Parameter (in diesem Fall eine Zeichenkette). Die Zeichenkette wird dann zusammen mit der Begrüßungsnachricht angezeigt.
      • URL Pfad wird verwendet, um den Wert nach zu speichern/greet/. Der Wert wird dann als übergebenname des URL-Parameters.
    • Die http.ListenAndServe-Funktion initiiert den Webserver. Hier lauscht er auf Port 9990.

Da unser Programm nun bereit ist, kompilieren Sie die Datei in eine ausführbare Datei:

Der Go-Compiler erstellt eine ausführbare Datei mit demselben Namen wie die Datei. Sehen Sie sich die Ausgabe an:

Go Web Application ls -lh

Schritt 2 – Konfigurieren einer systemd-Unit-Datei für die Ausführung im Hintergrund

Wenn sich der aktuelle Benutzer bisher vom System abmeldet, wird die Go-Web-App nicht mehr ausgeführt. Das ist ein schlechtes Design für einen Webserver. Um dieses Problem zu lösen, erstellen wir eine systemd-Unit-Datei, damit sie im Hintergrund weiterläuft, selbst wenn sich der Benutzer vom Server abmeldet. Dies bringt die Konfiguration einen Schritt näher an eine produktionsreife Bereitstellung.

Erstellen Sie eine dedizierte systemd-Datei goweb.service unter /lib/systemd/system:

Fügen Sie das folgende Snippet in die Unit-Datei ein:

go web service

Hier,

  • Die Variable ExecStart gibt den Einstiegspunkt für den Dienst über die ausführbare Hauptdatei in unserem Projektverzeichnis an ( $GOPATH/go-web). Beachten Sie, dass wir anstelle von $GOPATH den vollständigen Pfad zur ausführbaren Datei eingegeben haben. Das liegt daran, dass die Variable $GOPATH nur für den Benutzer sichtbar ist.
  • Die Variable Restart teilt systemd mit, was zu tun ist, falls das Programm nicht mehr läuft. Der Wert always teilt systemd mit, das Programm jedes Mal neu zu starten, wenn es die Ausführung beendet.
  • Die Variable RestartSec teilt systemd mit, eine bestimmte Zeitspanne zu warten, bevor versucht wird, das Programm neu zu starten. Hier ist der Wert auf 5s (5 Sekunden) festgelegt.
  • Die Anweisung WantedBy=multi-user.target gibt an, in welchem Zustand systemd den Dienst aktivieren wird.

Speichern Sie die Datei und schließen Sie den Editor. Starten Sie den Dienst:

go web start

Überprüfen Sie, ob der Dienst aktiv ist und läuft:

go web status

Wie die Ausgabe andeutet, ist die Anwendung aktiv und läuft. Wir sind nun bereit, Nginx als Reverse-Proxy zu verwenden.

Schritt 3 – Konfigurieren von Nginx als Reverse-Proxy

Nun erstellen wir einen Server-Block für Nginx, damit dieser als Reverse-Proxy fungiert. Die Web-App wird über den Reverse-Proxy im Internet freigegeben (für zusätzliche Leistung und Sicherheit).

Wechseln Sie das aktuelle aktive Verzeichnis zu sites-available:

cd

Erstellen Sie nun eine Datei mit dem Domainnamen, unter dem Sie Ihre Anwendung freigeben möchten. Zur Demonstration verwenden wir example.com:

 

Geben Sie den folgenden Code in die Block-Datei ein:

example.com

Hier verwenden wir proxy_pass, um die Go-Web-App auf der IP-Adresse des Servers (localhost) auf Port bereitzustellen9990.

Um den Nginx-Block zu aktivieren, erstellen Sie einen Symlink (auch bekannt als Softlink) der Datei im Ordner sites-enabled:

create sym

Laden Sie die Nginx-Konfiguration neu, damit die Änderungen wirksam werden:

reload nginx

Schritt 4 – Überprüfung

Wenn alles wie erwartet verlaufen ist, sollte die Webanwendung nun erreichbar sein unter localhost:9990 und der von uns konfigurierten Domain. Öffnen Sie die URL in einem Webbrowser:

Hello World

Wie erwartet gibt die Anwendung “Hello World” auf dem Bildschirm aus. Dies ist die Aufgabe der primären Route. Testen Sie als Nächstes die zweite Route, indem Sie die folgende URL aufrufen:

Hello Cloud

Die Anwendung gibt erfolgreich die einfache Begrüßungsnachricht mit dem Namen aus dem über die URL empfangenen Parameter zurück.

Voila! Wir haben erfolgreich eine Go-Webanwendung auf unserem lokalen Server bereitgestellt!

Schlussgedanken

In dieser Anleitung haben wir die Bereitstellung einer einfachen Go-Webanwendung mithilfe von Go-Standardbibliotheken demonstriert. Wir haben auch einen Reverse-Proxy mit Nginx bereitgestellt. Obwohl die Demonstration auf einem lokalen Server durchgeführt wurde, wird für einen öffentlichen Server dringend empfohlen, ein SSL-Zertifikat zu implementieren für eine sichere Freigabe im Internet. Für weitere Go-Programmierung können Sie sich unser Tutorial zu Erstellen und Installieren von Go-Programmen.

Viel Spaß beim Computing!

author

Pranay Kapgate

Autor · CloudSigma

Preslav Dobrev ist ein kreativer Designer bei CloudSigma und konzentriert sich auf eine konsistente Unternehmensidentität durch traditionelle und innovative Marketingkanäle. Er versteht es meisterhaft, künstlerische Vision mit strategischem Marketing zu verbinden, um wirkungsvolle Markengeschichten zu schaffen.

Kommentare

Noch keine Kommentare. Schreiben Sie den ersten.