Einleitung: Warum Go und VPS das ideale Paar für Ihr Projekt sind
\n\nGo (Golang) ist eine kompilierte Sprache, die für Leistung und Einfachheit entwickelt wurde. Ihr Hauptvorteil bei der Bereitstellung ist die statische Kompilierung. Sie müssen keinen Interpreter oder eine virtuelle Maschine auf dem Server installieren. Sie laden einfach eine einzige Binärdatei hoch und führen sie aus. Dies macht die Bereitstellung einer Go-Anwendung auf einem VPS unglaublich schnell und zuverlässig.
\n\nIn dieser Anleitung gehen wir den gesamten Weg: vom Schreiben eines einfachen HTTP-Servers in Go bis zu seinem Betrieb auf einem echten VPS-Server mit Ubuntu 22.04. Wir richten systemd für den automatischen Start ein, Nginx als Reverse-Proxy und Let's Encrypt für HTTPS. Alle Codebeispiele sind einsatzbereit.
\n\n1. Vorbereitung des VPS und Schreiben der Go-Anwendung
\n\n1.1. Ersteinrichtung des Servers
\n\nNach dem Kauf eines VPS (z. B. bei DigitalOcean, Timeweb oder Hetzner) verbinden Sie sich per SSH:
\n\nssh root@Ihre_Server_IP\n\nFühren Sie die grundlegende Sicherheitseinrichtung durch:
\n\napt update && apt upgrade -y\nadduser deployer\nusermod -aG sudo deployer\n# Deaktivieren Sie die Root-Anmeldung in /etc/ssh/sshd_config\n# PermitRootLogin no\nsystemctl restart sshd\n\nStellen Sie sicher, dass die Ports 80 und 443 in der Firewall (UFW) geöffnet sind:
\n\nufw allow 22\nufw allow 80\nufw allow 443\nufw enable\n\n1.2. Einfache Go-Anwendung für die Bereitstellung
\n\nErstellen Sie auf Ihrem lokalen Rechner eine Datei main.go:
package main\n\nimport (\n\t"fmt"\n\t"log"\n\t"net/http"\n\t"os"\n)\n\nfunc main() {\n\tport := os.Getenv("PORT")\n\tif port == "" {\n\t\tport = "8080"\n\t}\n\n\thttp.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {\n\t\tfmt.Fprintf(w, "Hallo von Go! Der Server läuft auf Port %s", port)\n\t})\n\n\thttp.HandleFunc("/health", func(w http.ResponseWriter, r *http.Request) {\n\t\tw.WriteHeader(http.StatusOK)\n\t\tw.Write([]byte("OK"))\n\t})\n\n\tlog.Printf("Starte Server auf :%s", port)\n\tlog.Fatal(http.ListenAndServe(":"+port, nil))\n}\n\nTesten Sie lokal:
\n\ngo run main.go\n\nÖffnen Sie den Browser unter http://localhost:8080. Wenn Sie die Begrüßung sehen, funktioniert alles.
2. Kompilieren und Hochladen der Binärdatei auf den Server
\n\n2.1. Cross-Kompilierung für Linux
\n\nFühren Sie auf Ihrem lokalen Rechner (auch wenn Sie Windows oder macOS verwenden) Folgendes aus:
\n\nGOOS=linux GOARCH=amd64 go build -o myapp main.go\n\nDas Flag -o myapp legt den Namen der Ausgabedatei fest. Die Umgebungsvariablen GOOS und GOARCH geben die Zielarchitektur an (64-Bit-Linux).
Nach der Kompilierung erhalten Sie eine Binärdatei myapp mit einer Größe von etwa 10–15 MB.
2.2. Hochladen auf den VPS
\n\nVerwenden Sie scp, um die Datei zu kopieren:
scp myapp deployer@Ihre_Server_IP:/home/deployer/myapp\n\nOder, wenn Sie rsync verwenden:
\n\nrsync -avz myapp deployer@Ihre_Server_IP:/home/deployer/myapp\n\nVerschieben Sie die Binärdatei auf dem Server in ein Systemverzeichnis und machen Sie sie ausführbar:
\n\nsudo mv /home/deployer/myapp /usr/local/bin/myapp\nsudo chmod +x /usr/local/bin/myapp\n\n3. Einrichtung von systemd und automatischem Start
\n\n3.1. Erstellen der Service-Datei
\n\nSystemd verwaltet unsere Anwendung: Start beim Systemstart, Neustart bei Abstürzen und Protokollierung.
\n\nErstellen Sie die Datei /etc/systemd/system/myapp.service:
sudo nano /etc/systemd/system/myapp.service\n\nFügen Sie die folgende Konfiguration ein:
\n\n[Unit]\nDescription=Go Application Server\nAfter=network.target\n\n[Service]\nType=simple\nUser=deployer\nGroup=deployer\nWorkingDirectory=/usr/local/bin\nExecStart=/usr/local/bin/myapp\nRestart=always\nRestartSec=5\nEnvironment=PORT=8080\nEnvironment=GIN_MO