Introduction : pourquoi le déploiement d'une application Go sur un VPS est simple et efficace
Go (Golang) est réputé pour ses performances et sa simplicité. L'un des principaux avantages du langage est la compilation en un seul binaire statique qui ne nécessite pas l'installation de runtimes supplémentaires sur le serveur. Cela rend le déploiement d'une application Go sur un VPS incroyablement rapide et fiable. Dans cet article, nous allons parcourir le cycle complet de déploiement : de la préparation du serveur à la configuration du reverse proxy et du HTTPS. Vous obtiendrez une checklist prête à l'emploi que vous pourrez utiliser pour n'importe quel projet Go.
1. Préparation du VPS et installation des logiciels nécessaires
Avant de charger le code, vous devez préparer le serveur. On suppose que vous disposez d'un VPS avec Ubuntu 22.04 ou 24.04. Connectez-vous via SSH et effectuez la mise à jour du système.
sudo apt update && sudo apt upgrade -yInstallation de Go sur le serveur
Bien que Go soit compilé en binaire, un compilateur peut être nécessaire sur le serveur pour la construction. Installons la dernière 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' >> ~/.profileVérifiez l'installation : go version.
Installation de Git et Nginx
Git sera nécessaire pour cloner le dépôt, et Nginx pour le reverse proxy et les fichiers statiques.
sudo apt install git nginx -y2. Construction et lancement de l'application Go
Examinons le processus avec l'exemple d'un simple serveur HTTP. Créez un fichier 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)}Construisez le binaire pour Linux (même si vous travaillez sous Windows/Mac) :
GOOS=linux GOARCH=amd64 go build -o myapp main.goTéléchargez maintenant le binaire sur le serveur. Utilisez SCP ou Rsync :
scp myapp user@your-server-ip:~/Sur le serveur, rendez le fichier exécutable et lancez-le :
chmod +x ~/myapp./myapp &Vérifiez le fonctionnement : curl http://localhost:8080. Si vous voyez "Hello from Go on VPS!" — tout fonctionne.
3. Configuration de systemd pour le démarrage automatique
Le lancement manuel n'est pas une bonne pratique. Utilisons systemd pour que l'application démarre au démarrage du système et redémarre en cas de panne.
Créez un fichier de service :
sudo nano /etc/systemd/system/myapp.serviceInsérez la configuration :
[Unit]Description=Go Application ServiceAfter=network.target
[Service]Type=simpleUser=www-dataWorkingDirectory=/home/userExecStart=/home/user/myappRestart=alwaysRestartSec=5
[Install]WantedBy=multi-user.targetRemplacez /home/user par votre chemin. Activez et démarrez le service :
sudo systemctl daemon-reloadsudo systemctl enable myappsudo systemctl start myappsudo systemctl status myappMaintenant, votre application Go fonctionnera comme un démon.
4. Configuration de Nginx comme reverse proxy et HTTPS
Pour que l'application soit accessible par domaine et via le port 443, configurons Nginx.
Configuration du reverse proxy
Supprimez la configuration par défaut et créez la vôtre :
sudo rm /etc/nginx/sites-enabled/defaultsudo nano /etc/nginx/sites-available/myappAjoutez :
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