Bereitstellung einer Go-Anwendung auf einem VPS: Schritt-für-Schritt-Anleitung für Entwickler

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

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 -y

Erstellen Sie einen separaten Benutzer für die Anwendung (arbeiten Sie nicht als root):

adduser deployerusermod -aG sudo deployersu - deployer


1.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 version


1.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 -y


2. 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" ausgeben


2.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/myapp


3. 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.service

Fü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

Blogs

Buchempfehlungen