Einleitung: Warum das Deployment einer Go-Anwendung auf einer VPS einfach und effizient ist
Go (Golang) ist bekannt für seine Leistung und Einfachheit. Einer der Hauptvorteile der Sprache ist die Kompilierung in eine einzige statische Binärdatei, die keine Installation zusätzlicher Laufzeitumgebungen auf dem Server erfordert. Dies macht das Deployment einer Go-Anwendung auf einer VPS unglaublich schnell und zuverlässig. In diesem Artikel werden wir den gesamten Bereitstellungszyklus durchgehen: von der Servervorbereitung bis zur Konfiguration von Reverse Proxy und HTTPS. Sie erhalten eine fertige Checkliste, die Sie für jedes Go-Projekt verwenden können.
1. Vorbereitung der VPS und Installation der erforderlichen Software
Bevor Sie Code hochladen, müssen Sie den Server vorbereiten. Es wird davon ausgegangen, dass Sie eine VPS mit Ubuntu 22.04 oder 24.04 haben. Verbinden Sie sich über SSH und führen Sie eine Systemaktualisierung durch.
sudo apt update && sudo apt upgrade -yGo auf dem Server installieren
Obwohl Go in eine Binärdatei kompiliert wird, wird auf dem Server möglicherweise ein Compiler für die Erstellung benötigt. Installieren wir die neueste Version:
wget https://go.dev/dl/go1.22.5.linux-amd64.tar.gzsudo tar -C /usr/local -xzf go1.22.5.linux-amd64.tar.gzexport PATH=$PATH:/usr/local/go/binecho 'export PATH=$PATH:/usr/local/go/bin' >> ~/.profileÜberprüfen Sie die Installation: go version.
Installation von Git und Nginx
Git wird zum Klonen des Repositorys benötigt, und Nginx für den Reverse Proxy und statische Dateien.
sudo apt install git nginx -y2. Erstellung und Ausführung der Go-Anwendung
Betrachten wir den Prozess am Beispiel eines einfachen HTTP-Servers. Erstellen Sie eine Datei main.go:
package main
import (\t"fmt"\t"net/http")
func handler(w http.ResponseWriter, r *http.Request) {\tfmt.Fprintf(w, "Hello from Go on VPS!")}
func main() {\thttp.HandleFunc("/", handler)\tfmt.Println("Server started on :8080")\thttp.ListenAndServe(":8080", nil)}Erstellen Sie die Binärdatei für Linux (auch wenn Sie auf Windows/Mac arbeiten):
GOOS=linux GOARCH=amd64 go build -o myapp main.goLaden Sie nun die Binärdatei auf den Server hoch. Verwenden Sie SCP oder Rsync:
scp myapp user@your-server-ip:~/Machen Sie die Datei auf dem Server ausführbar und starten Sie sie:
chmod +x ~/myapp./myapp &Überprüfen Sie die Funktion: curl http://localhost:8080. Wenn Sie "Hello from Go on VPS!" sehen, funktioniert alles.
3. Konfiguration von systemd für den Autostart
Manuelles Starten ist keine gute Praxis. Verwenden wir systemd, damit die Anwendung beim Systemstart startet und bei Abstürzen neu gestartet wird.
Erstellen Sie eine Servicedatei:
sudo nano /etc/systemd/system/myapp.serviceFügen Sie die Konfiguration ein:
[Unit]Description=Go Application ServiceAfter=network.target
[Service]Type=simpleUser=www-dataWorkingDirectory=/home/userExecStart=/home/user/myappRestart=alwaysRestartSec=5
[Install]WantedBy=multi-user.targetErsetzen Sie /home/user durch Ihren Pfad. Aktivieren und starten Sie den Dienst:
sudo systemctl daemon-reloadsudo systemctl enable myappsudo systemctl start myappsudo systemctl status myappJetzt läuft Ihre Go-Anwendung als Daemon.
4. Konfiguration von Nginx als Reverse Proxy und HTTPS
Damit die Anwendung über eine Domain und Port 443 erreichbar ist, konfigurieren wir Nginx.
Reverse-Proxy-Konfiguration
Entfernen Sie die Standardkonfiguration und erstellen Sie Ihre eigene:
sudo rm /etc/nginx/sites-enabled/defaultsudo nano /etc/nginx/sites-available/myappFügen Sie hinzu:
server { listen 80; server_name yourdomain.com www.yourdomain.com;
location / { proxy_pass http://127.0.0.1:8080; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_h