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

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

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


2. 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.go

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

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

Ersetzen Sie /home/user durch Ihren Pfad. Aktivieren und starten Sie den Dienst:

sudo systemctl daemon-reloadsudo systemctl enable myappsudo systemctl start myappsudo systemctl status myapp

Jetzt 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/myapp

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

Blogs

Buchempfehlungen