Introduction : Pourquoi Go est idéal pour un VPS, et ce que nous allons faire
Go (Golang) est un langage conçu pour les applications serveur évolutives et performantes. La compilation en un seul fichier binaire statique en fait un candidat idéal pour le déploiement sur un VPS (Virtual Private Server). Vous n'avez pas besoin d'installer d'interpréteur ou de dépendances sur le serveur — il suffit de copier le fichier et de l'exécuter.
Dans cet article, nous allons parcourir le chemin complet : de l'écriture d'un simple serveur HTTP en Go à son exécution en production sur un VPS en utilisant systemd pour le démarrage automatique, Nginx comme proxy inverse et Let's Encrypt pour le HTTPS.
Vous apprendrez à :
- Compiler une application Go pour Linux
- Télécharger le fichier binaire sur le VPS via SSH
- Configurer systemd pour un démarrage automatique
- Installer et configurer Nginx
- Obtenir un certificat SSL gratuit
Étape 1 : Préparation de l'application Go et compilation
Création d'une application web simple
Pour l'exemple, écrivons un serveur HTTP minimal qui répond "Hello, VPS!". Créez un fichier main.go :
package main
import ( "fmt" "net/http")
func main() { http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { fmt.Fprintf(w, "Hello, VPS!") })
fmt.Println("Server started on :8080") http.ListenAndServe(":8080", nil)}Compilation pour Linux
Si vous développez sur Windows ou macOS, vous devez compiler le binaire pour l'architecture cible du VPS (généralement linux/amd64). Ouvrez un terminal dans le dossier du projet et exécutez :
set GOOS=linuxset GOARCH=amd64go build -o myappPour Linux/macOS, utilisez export :
export GOOS=linuxexport GOARCH=amd64go build -o myappLe résultat sera un fichier binaire myapp. Vérifiez sa taille — elle sera petite (environ 7-10 Mo), car Go compile tout de manière statique.
Étape 2 : Téléchargement sur le VPS et configuration de systemd
Connexion au serveur et téléchargement du fichier
Connectez-vous à votre VPS via SSH :
ssh root@votre-ip-serveurCréez un répertoire pour l'application :
mkdir -p /opt/myappcd /opt/myappSur votre machine locale, téléchargez le binaire via SCP (exécutez dans un terminal séparé) :
scp myapp root@votre-ip-serveur:/opt/myapp/Revenez sur le serveur et donnez les droits d'exécution :
chmod +x /opt/myapp/myappCréation du service systemd
Pour que l'application démarre automatiquement au démarrage du système et redémarre en cas de panne, créons une unité systemd. Créez le fichier :
nano /etc/systemd/system/myapp.serviceInsérez le contenu suivant :
[Unit]Description=My Go ApplicationAfter=network.target
[Service]Type=simpleUser=www-dataGroup=www-dataWorkingDirectory=/opt/myappExecStart=/opt/myapp/myappRestart=on-failureRestartSec=5
[Install]WantedBy=multi-user.targetExplication des paramètres :
UseretGroup— l'utilisateur sous lequel l'application sera exécutée (recommandé : ne pas utiliser root).Restart=on-failure— redémarrage automatique en cas de panne.RestartSec=5— pause avant le redémarrage.
Maintenant, activons et démarrons le service :
systemctl daemon-reloadsystemctl enable myappsystemctl start myappsystemctl status myappSi tout est fait correctement, vous verrez le statut active (running). Vérifiez que l'application répond localement :
curl http://localhost:8080Étape 3 : Configuration de Nginx comme proxy inverse
L'accès direct à l'application via le port 8