_Der Autor hat das Programm Tech Education Fund ausgewählt, um eine Spende im Rahmen des Programms Write for DOnations zu erhalten. _
Einführung
Go ist eine universelle Programmiersprache, die sich allmählich zu einer der beliebtesten Web-Back-End-Programmiersprachen entwickelt. Durch die Konzentration auf Einfachheit haben die Entwickler von Go eine Sprache entwickelt, die sowohl einfach zu erlernen als auch schneller als viele andere Sprachen für Webanwendungen ist. Dabei wurden effiziente Funktionen wie die Fähigkeit genutzt, aufgrund der gleichzeitigen Verwendung mehrere Anforderungen gleichzeitig zu bearbeiten. Aus diesem Grund ist die Bereitstellung einer Webanwendung in Go für viele Back-End-Entwickler hilfreich.
Nginx ist einer der beliebtesten Webserver der Welt, da die Ressourcennutzung gering und die Auslastung zuverlässig ist. Viele der größten und am häufigsten frequentierten Websites im Internet sind auf Nginx angewiesen, um ihre Inhalte bereitzustellen. Bei der Bereitstellung wird Nginx häufig als Load Balancer oder Reverse Proxy verwendet, um die Sicherheit zu erhöhen und die Anwendung robuster zu machen. In Verbindung mit einem Go-Web-Backend kann Nginx eine leistungsstarke und schnelle Webanwendung bereitstellen.
In diesem Tutorial erstellen Sie eine "+ Hello World +" - Webanwendung in Go und stellen sie auf einem Ubuntu 18.04-Server unter Verwendung von Nginx als Reverse-Proxy bereit.
Voraussetzungen
Um diesem Tutorial zu folgen, benötigen Sie Folgendes:
-
Ein Ubuntu 18.04-Server, der gemäß dieser https://www.digitalocean.com/community/tutorials/initial-server-setup-with-ubuntu-18-04 eingerichtet wurde (anfängliches Server-Setup für Ubuntu 18.04-Tutorial), einschließlich eines sudo non -root Benutzer und eine Firewall.
-
Die Programmiersprache Go wird wie folgt installiert: https://www.digitalocean.com/community/tutorials/how-to- install-go-and-set-up-a-local-programming-environment-on-ubuntu-18-04 [So installieren Sie Go und richten eine lokale Programmierumgebung unter Ubuntu 18.04 ein].
-
Nginx wird installiert, indem How To Install Nginx auf Ubuntu 18.04. Folgen Sie nicht https://www.digitalocean.com/community/tutorials/how-to-install-nginx-on-ubuntu-18-04#step-5-%E2%80%93-setting-up-server- blocks- (empfohlen) [* Schritt 5 - Einrichten von Server-Blöcken *]; Sie werden später in diesem Lernprogramm einen Nginx-Serverblock erstellen.
-
Ein Domain-Name, der auf Ihren Server verweist (siehe How To Set Up a Host Name) mit DigitalOcean. In diesem Tutorial wird durchgehend "++" verwendet. Dies ist erforderlich, um ein SSL-Zertifikat für Ihre Website zu erhalten, damit Sie Ihre Anwendung mit TLS-Verschlüsselung sicher bereitstellen können.
Um eine produktive Bereitstellung Ihrer Go-Webanwendung zu erreichen, ist es außerdem wichtig, dass Sie Ihren Server durch die Installation eines TLS / SSL-Zertifikats schützen. Dieser Schritt wird dringend empfohlen. Folgen Sie zum Sichern Ihrer Go-Webanwendung How To Secure Nginx mit Let’s Encrypt unter Ubuntu 18.04 nach * Schritt 3 * dieses Tutorials, um das kostenlose TLS / SSL-Zertifikat zu erhalten.
Schritt 1 - Erstellen der Go-Webanwendung
In diesem Schritt erstellen Sie eine Beispiel-Go-Webanwendung, die "+ Hello World" bei "+" anzeigt und den Benutzer bei " / greet / +" begrüßt. Wenn Sie mehr über die Grundlagen der Programmierung in Go erfahren möchten, lesen Sie unsere How To Schreiben Sie Ihr erstes Programm in Go Artikel.
Erstellen Sie zunächst ein neues Verzeichnis in Ihrem https://www.digitalocean.com/community/tutorials/understanding-the-gopath [+ GOPATH +
] -Verzeichnis, in dem sich die Quelldatei befindet. Sie können den Ordner beliebig benennen, in diesem Tutorial wird jedoch "++" verwendet:
mkdir $GOPATH/
Befolgen Sie die im vorausgesetzten Lernprogramm vorgeschlagene Dateistruktur https://www.digitalocean.com/community/tutorials/how-to-install-go-and-set-up-a-local-programming-environment-on-ubuntu-18 -04 [So installieren Sie Go und richten eine lokale Programmierumgebung unter Ubuntu 18.04 ein]. Dadurch erhält Ihr Verzeichnis den Pfad "+ ~ / go / go-web +".
Führen Sie als Nächstes Folgendes aus, um das Verzeichnis in Ihren neu erstellten Ordner in Ihrem + GOPATH +
zu ändern:
cd $GOPATH/go-web
Verwenden Sie "+ nano " oder Ihren bevorzugten Texteditor, um eine Datei mit dem Namen " main.go +" zu erstellen, die den Quellcode für Ihre Webanwendung enthält:
nano main.go
Fügen Sie zum Erstellen der Funktionalität der Anwendung "+ Hello World " den folgenden Go-Code in die neu erstellte Datei " main.go +" ein:
~ / go / go-web / main.go
package main
import (
"fmt"
"net/http"
)
func main() {
http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, "Hello World")
})
http.HandleFunc("/greet/", func(w http.ResponseWriter, r *http.Request) {
name := r.URL.Path[len("/greet/"):]
fmt.Fprintf(w, "Hello %s\n", name)
})
http.ListenAndServe(":9990", nil)
}
Lassen Sie uns nun ab der ersten Zeile durchgehen, was das vorhergehende Code-Snippet tun wird.
Zuerst haben Sie den Einstiegspunkt in Ihre Anwendung geschrieben:
~ / go / go-web / main.go
package main
...
Das + package main +
weist den Go-Compiler an, diese Datei nicht als gemeinsam genutzte Bibliothek, sondern als ausführbares Programm zu kompilieren.
Als nächstes haben Sie die + import + -Anweisungen:
~ / go / go-web / main.go
...
import (
"fmt"
"net/http"
)
...
Dieses Snippet importiert die erforderlichen Module, damit dieser Code funktioniert. Dazu gehören das Standardpaket "+ fmt " und das Paket " net / http +" für Ihren Webserver.
Das nächste Snippet erstellt Ihre erste Route in der Funktion "+ main +", die der Einstiegspunkt für jede Go-Anwendung ist:
~ / go / go-web / main.go
...
func main () {
http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, "Hello World")
})
...
}
...
In "+ func main " wird eine übergeordnete Route " / " erstellt, die auf Anforderung den Text " Hello World +" zurückgibt.
Die zweite Route, wie im folgenden Snippet gezeigt, akzeptiert einen URL-Parameter, in diesem Fall einen Namen, der zusammen mit einer Begrüßung angezeigt wird.
~ / go / go-web / main.go
...
func main () {
...
http.HandleFunc("/greet/", func(w http.ResponseWriter, r *http.Request) {
name := r.URL.Path[len("/greet/"):]
fmt.Fprintf(w, "Hello %s\n", name)
})
...
}
...
Hiermit wird mit "+ URL.Path " von Go der Wert direkt nach " / greet / +" gespeichert und als Name aus dem URL-Parameter übergeben.
Zuletzt instanziieren Sie Ihren Server:
~ / go / go-web / main.go
...
func main () {
...
http.ListenAndServe(":9990", nil)
}
Das vorstehende Snippet startet den Server und macht Ihre Anwendung über den Port "+ 9990 " verfügbar, wobei der von Go eingebaute " http +" - Server verwendet wird.
Wenn Sie den Code in "+ main.go +" überprüft haben, speichern Sie die Datei und beenden Sie Ihren Texteditor.
Erstellen Sie als Nächstes die ausführbare Binärdatei Ihrer Anwendung, indem Sie Folgendes ausführen:
go build main.go
Der vorhergehende Befehl kompiliert "+ main.go ", um eine ausführbare Datei mit dem Titel " main +" zu erzeugen.
Sie haben Ihre Beispiel-Go-Webanwendung erstellt. Als Nächstes erstellen Sie eine System-Unit-Datei, damit Ihre Anwendung auch dann im Hintergrund ausgeführt wird, wenn Sie nicht auf Ihren Server zugreifen.
Schritt 2 - Erstellen einer Systemd Unit-Datei
In diesem Schritt erstellen Sie eine systemd -Unit-Datei, damit Ihre Anwendung auch bei einem Benutzer im Hintergrund ausgeführt wird meldet sich vom Server ab. Dies macht Ihre Anwendung dauerhaft und bringt Sie einer produktiven Bereitstellung einen Schritt näher.
Erstellen Sie zunächst eine neue Datei mit dem Namen "+ web.services" im Verzeichnis "+ / lib / systemd / system", indem Sie "+ nano +" oder einen von Ihnen bevorzugten Texteditor verwenden:
sudo nano /lib/systemd/system/goweb.service
Fügen Sie der Datei das folgende Snippet hinzu, um die Parameter des Dienstes festzulegen.
/lib/systemd/system/goweb.service
[Unit]
Description=goweb
[Service]
Type=simple
Restart=always
RestartSec=5s
ExecStart=/home//go/go-web/main
[Install]
WantedBy=multi-user.target
Die Variable + ExecStart = / home // go / go-web / main +
gibt an, dass der Einstiegspunkt für diesen Service über die ausführbare Datei + main +
liegt, die sich in + / home // go / go-web +
befindet Verzeichnis, wobei "+" der Benutzername des Nicht-Root-Sudo-Kontos des Servers ist. ` Neustart = immer ` stellt sicher, dass systemd immer versucht, das Programm neu zu starten, wenn es stoppt. In der nächsten Zeile legt ` RestartSec = 5s ` eine Wartezeit von fünf Sekunden zwischen den Neustartversuchen fest. ` WantedBy = multi-user.target +` gibt an, in welchem Zustand Ihr Server den Dienst aktivieren wird.
Speichern und schließen Sie die Datei.
Nachdem Sie die Service-Unit-Datei geschrieben haben, starten Sie Ihren Go-Webdienst, indem Sie Folgendes ausführen:
sudo service goweb start
Verwenden Sie den folgenden Befehl, um zu überprüfen, ob der Dienst ausgeführt wird:
sudo service goweb status
Sie erhalten folgende Ausgabe:
Output● goweb.service - goweb
Loaded: loaded (/lib/systemd/system/goweb.service; disabled; vendor preset: enabled)
Active: active (running) since Wed 2019-07-17 23:28:57 UTC; 6s ago
Main PID: 1891 (main)
Tasks: 4 (limit: 1152)
CGroup: /system.slice/goweb.service
└─1891 /home//go/go-web/main
Weitere Informationen zum Arbeiten mit Systemd-Einheitendateien finden Sie unter Understanding Systemd Units and Unit Files.
Nachdem Sie Ihre Anwendung eingerichtet und ausgeführt haben, können Sie den Nginx-Reverse-Proxy einrichten.
Schritt 3 - Einrichten eines Reverse Proxy mit Nginx
In diesem Schritt erstellen Sie einen Nginx-Serverblock und richten einen Nginx-Reverseproxy ein, um Ihre Anwendung für das Internet verfügbar zu machen.
Ändern Sie zunächst Ihr Arbeitsverzeichnis in das Verzeichnis Nginx + sites-available +
:
cd /etc/nginx/sites-available
Erstellen Sie eine neue Datei mit dem Namen der Domäne, für die Sie Ihre Anwendung verfügbar machen möchten. In diesem Tutorial wird "++" verwendet:
sudo nano
Fügen Sie die folgenden Zeilen in die Datei ein, um die Einstellungen für ++
festzulegen:
/ etc / nginx / sites-available / your_domain
server {
server_name ;
location / {
proxy_pass http://localhost:9990;
}
}
Dieser Nginx-Serverblock verwendet http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_pass [+ proxy_pass +
], um die Go-Webanwendung auf der IP-Adresse Ihres Servers bereitzustellen, die als + localhost +
angegeben ist Laufen Sie auf Port "+ 9990 ". " Servername +" gibt den Ihrer IP-Adresse zugeordneten Domainnamen an, in diesem Fall "" und "".
Erstellen Sie als Nächstes einen Symlink dieser Nginx-Konfiguration im Ordner "+ sites-enabled +", indem Sie den folgenden Befehl ausführen:
sudo ln -s /etc/nginx/sites-available/ /etc/nginx/sites-enabled/
Ein Symlink ist eine Verknüpfung einer Datei an einem anderen Ort. Die neu erstellte Verknüpfung verweist immer auf die Originaldatei, um sie bei Änderungen an Aktualisierungen anzupassen. Nginx benötigt eine Kopie der Konfiguration in beiden Verzeichnissen.
Laden Sie als Nächstes Ihre Nginx-Konfigurationen neu, indem Sie den Befehl reload ausführen:
sudo nginx -s reload
Um sicherzustellen, dass Ihre Bereitstellung funktioniert, rufen Sie in Ihrem Browser "+ http: // +" auf. Sie werden mit einer * Hello World * -Textzeichenfolge begrüßt.
Sie haben jetzt den Nginx-Reverseproxy so eingerichtet, dass Ihre Anwendung unter Ihrem Domainnamen verfügbar gemacht wird, und Ihre Go-Webanwendung mit SSL / TLS gesichert. Im nächsten Schritt testen Sie Ihre Anwendung über eine sichere Verbindung.
Schritt 4 - Testen der Anwendung
In diesem Schritt testen Sie Ihre Anwendung über eine sichere Verbindung, um sicherzustellen, dass alles funktioniert.
Öffnen Sie Ihren bevorzugten Webbrowser und besuchen Sie "+ https: // +":
image: https://assets.digitalocean.com/articles/66224/Hello_World.png [Anzeige der Hello World-Seite]
Sie erhalten eine einfache "+ Hello World" -Nachricht. Der Empfang dieser Nachricht bei Verwendung von "+ https: // +" in der URL zeigt an, dass Ihre Anwendung über eine sichere Verbindung bereitgestellt wird.
Versuchen Sie als nächstes, die zweite Route zu besuchen: "+ https: /// greet / " und ersetzen Sie "+" durch den Namen, den Ihre App begrüßen soll:
image: https://assets.digitalocean.com/articles/66224/Greet.png [Anzeige der Begrüßungsseite]
Die Anwendung gibt eine einfache Begrüßung zusammen mit "++" zurück, die auf dem an die URL übergebenen Parameter basiert.
Sobald Sie diese Ergebnisse erhalten haben, haben Sie Ihre Go-Webanwendung erfolgreich implementiert.
Fazit
In diesem Lernprogramm haben Sie eine einfache Webanwendung mit Go unter Verwendung der Standardbibliotheken erstellt, einen Reverse-Proxy mit Nginx eingerichtet und ein SSL-Zertifikat für Ihre Domain verwendet, um Ihre App zu schützen. Weitere Informationen zu Go finden Sie unter official documentation. Weitere Informationen zum Programmieren in dieser effizienten Sprache finden Sie auch in unserer Reihe How To Code in Go.