Einleitung: Warum das Deployment einer Go-Anwendung auf einer VPS einfach und zuverlässig ist
Go (Golang) ist eine der effizientesten Sprachen für die Entwicklung von Serveranwendungen. Sein Hauptvorteil ist die Kompilierung in eine einzige statische Binärdatei, die keine Installation eines Interpreters oder einer virtuellen Maschine auf dem Server erfordert. Dies macht das Deployment einer Go-Anwendung auf einer VPS (Virtual Private Server) im Vergleich zu Python, Node.js oder Java unglaublich einfach und schnell.
In diesem Artikel werden wir Schritt für Schritt eine Go-Anwendung auf einer VPS bereitstellen: von der anfänglichen Serverkonfiguration über den Start via systemd bis zur Veröffentlichung über Nginx mit HTTPS. Sie erfahren, wie Sie Risiken minimieren und den stabilen Betrieb Ihres Dienstes rund um die Uhr sicherstellen.
1. Vorbereitung der VPS und Installation der notwendigen Software
Stellen Sie vor Beginn des Deployments sicher, dass Sie per SSH Zugriff auf die VPS (z. B. Ubuntu 22.04 LTS) haben. Wir verwenden einen grundlegenden Satz an Werkzeugen.
1.1. Ersteinrichtung des Servers
Verbinden Sie sich mit dem Server und führen Sie ein Update der Pakete durch:
ssh root@ihre-server-ipapt update && apt upgrade -yErstellen Sie einen separaten Benutzer für die Anwendung (arbeiten Sie nicht als root):
adduser deployerusermod -aG sudo deployersu - deployer1.2. Installation von Go (falls eine Kompilierung auf dem Server erforderlich ist)
Obwohl die Binärdatei meist lokal erstellt wird, ist es manchmal praktisch, direkt auf der VPS zu kompilieren. Installieren Sie die neueste Version von Go:
wget https://go.dev/dl/go1.22.2.linux-amd64.tar.gzsudo tar -C /usr/local -xzf go1.22.2.linux-amd64.tar.gzecho 'export PATH=$PATH:/usr/local/go/bin' >> ~/.bashrcsource ~/.bashrcgo version1.3. Installation von Git und Nginx
Git wird zum Klonen des Repositorys benötigt, und Nginx für den Reverse Proxy und SSL:
sudo apt install git nginx -y2. Build der Go-Anwendung und Vorbereitung für das Deployment
2.1. Beispiel einer einfachen Go-Anwendung
Erstellen wir einen minimalen HTTP-Server in Go. Sie können Ihr eigenes Projekt verwenden, aber für die Demonstration ist dieser Code geeignet (main.go):
package main
import ( "fmt" "net/http" "os")
func main() { port := os.Getenv("PORT") if port == "" { port = "8080" }
http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { fmt.Fprintf(w, "Hello from Go! Server time: %s", time.Now().Format(time.RFC1123)) })
fmt.Printf("Server starting on port %s", port) http.ListenAndServe(":"+port, nil)}2.2. Kompilierung der Binärdatei für Linux
Erstellen Sie auf Ihrem lokalen Rechner (oder auf dem Server) die Binärdatei für die Zielarchitektur der VPS (normalerweise amd64):
GOOS=linux GOARCH=amd64 go build -o myapp main.goÜberprüfen Sie, ob die Binärdatei statisch ist und keine Bibliotheken benötigt:
ldd myapp # Sollte "not a dynamic executable" ausgeben2.3. Hochladen auf den Server
Kopieren Sie die Binärdatei per SCP auf die VPS:
scp myapp deployer@ihre-server-ip:/home/deployer/Verschieben Sie sie auf dem Server in ein geeignetes Verzeichnis und geben Sie Ausführungsrechte:
sudo mkdir -p /opt/myappsudo mv /home/deployer/myapp /opt/myapp/sudo chmod +x /opt/myapp/myapp3. Konfiguration von systemd für Autostart und Überwachung
systemd ist der Standard-Dienstmanager in Linux. Er ermöglicht es Ihrer Anwendung, beim Systemstart zu starten und bei Abstürzen automatisch neu zu starten.
3.1. Erstellung der Unit-Datei
Erstellen Sie die Datei /etc/systemd/system/myapp.service:
sudo nano /etc/systemd/system/myapp.serviceFügen Sie die folgende Konfiguration ein:
[Unit]Description=My Go ApplicationAfter=network.target
[Service]Type=simpleUser=deployerGroup=deployerWorkingDirectory=/opt/myappExecStart=/opt/myapp/myappRestart=alwaysRestartSec=5Environment=PORT=80