Introduction : pourquoi le déploiement d'une application Go sur un VPS est simple et fiable
Go (Golang) est l'un des langages les plus efficaces pour créer des applications serveur. Son principal avantage est la compilation en un seul binaire statique, qui ne nécessite pas l'installation d'un interpréteur ou d'une machine virtuelle sur le serveur. Cela rend le déploiement d'une application Go sur un VPS (Virtual Private Server) incroyablement simple et rapide par rapport à Python, Node.js ou Java.
Dans cet article, nous allons déployer une application Go sur un VPS étape par étape : de la configuration initiale du serveur au lancement via systemd et à la publication via Nginx avec HTTPS. Vous apprendrez à minimiser les risques et à assurer le fonctionnement stable de votre service 24h/24 et 7j/7.
1. Préparation du VPS et installation des logiciels nécessaires
Avant de commencer le déploiement, assurez-vous d'avoir accès au VPS (par exemple, Ubuntu 22.04 LTS) via SSH. Nous utiliserons un ensemble d'outils de base.
1.1. Configuration initiale du serveur
Connectez-vous au serveur et effectuez la mise à jour des paquets :
ssh root@votre-ip-serveurapt update && apt upgrade -yCréez un utilisateur séparé pour l'application (ne travaillez pas en tant que root) :
adduser deployerusermod -aG sudo deployersu - deployer1.2. Installation de Go (si nécessaire pour compiler sur le serveur)
Bien que le binaire soit le plus souvent compilé localement, il est parfois pratique de compiler directement sur le VPS. Installez la dernière version de 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 de Git et Nginx
Git sera nécessaire pour cloner le dépôt, et Nginx pour le proxy inverse et le SSL :
sudo apt install git nginx -y2. Compilation de l'application Go et préparation au déploiement
2.1. Exemple d'une application Go simple
Créons un serveur HTTP minimal en Go. Vous pouvez utiliser votre propre projet, mais ce code (main.go) convient pour la démonstration :
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. Compilation du binaire pour Linux
Sur votre machine locale (ou sur le serveur), compilez le binaire pour l'architecture cible du VPS (généralement amd64) :
GOOS=linux GOARCH=amd64 go build -o myapp main.goVérifiez que le binaire est statique et ne nécessite pas de bibliothèques :
ldd myapp # Doit afficher "not a dynamic executable"2.3. Téléchargement sur le serveur
Copiez le binaire sur le VPS via SCP :
scp myapp deployer@votre-ip-serveur:/home/deployer/Sur le serveur, déplacez-le dans un répertoire approprié et donnez-lui les droits d'exécution :
sudo mkdir -p /opt/myappsudo mv /home/deployer/myapp /opt/myapp/sudo chmod +x /opt/myapp/myapp3. Configuration de systemd pour le démarrage automatique et la surveillance
systemd est le gestionnaire de services standard sous Linux. Il permettra à votre application de démarrer au lancement du système et de redémarrer automatiquement en cas de panne.
3.1. Création du fichier unit
Créez le fichier /etc/systemd/system/myapp.service :
sudo nano /etc/systemd/system/myapp.serviceInsérez la configuration suivante :
[Unit]Description=My Go ApplicationAfter=network.target
[Service]Type=simpleUser=deployerGroup=deployerWorkingDirectory=/opt/myappExecStart=/opt/myapp/myappRestart=alwaysRestartSec=5Environment=PORT=80