Introduction : pourquoi Go et VPS sont le duo idéal pour votre projet
\n\nGo (Golang) est un langage compilé, conçu pour la performance et la simplicité. Son principal avantage lors du déploiement est la compilation statique. Vous n'avez pas besoin d'installer d'interpréteur ou de machine virtuelle sur le serveur. Vous téléchargez simplement un fichier binaire et l'exécutez. Cela rend le déploiement d'une application Go sur un VPS incroyablement rapide et fiable.
\n\nDans ce guide, nous parcourrons le chemin complet : de l'écriture d'un simple serveur HTTP en Go à son exécution sur un vrai serveur VPS sous Ubuntu 22.04. Nous configurerons systemd pour le démarrage automatique, Nginx comme proxy inverse et Let's Encrypt pour HTTPS. Tous les exemples de code sont prêts à l'emploi.
\n\n1. Préparation du VPS et écriture de l'application Go
\n\n1.1. Configuration initiale du serveur
\n\nAprès avoir acheté un VPS (par exemple, chez DigitalOcean, Timeweb ou Hetzner), connectez-vous via SSH :
\n\nssh root@votre_IP_serveur\n\nEffectuez la configuration de sécurité de base :
\n\napt update && apt upgrade -y\nadduser deployer\nusermod -aG sudo deployer\n# Désactivez la connexion root dans /etc/ssh/sshd_config\n# PermitRootLogin no\nsystemctl restart sshd\n\nAssurez-vous que les ports 80 et 443 sont ouverts dans le pare-feu (UFW) :
\n\nufw allow 22\nufw allow 80\nufw allow 443\nufw enable\n\n1.2. Application Go simple pour le déploiement
\n\nCréez un fichier main.go sur votre machine locale :
package main\n\nimport (\n\t"fmt"\n\t"log"\n\t"net/http"\n\t"os"\n)\n\nfunc main() {\n\tport := os.Getenv("PORT")\n\tif port == "" {\n\t\tport = "8080"\n\t}\n\n\thttp.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {\n\t\tfmt.Fprintf(w, "Bonjour depuis Go ! Le serveur fonctionne sur le port %s", port)\n\t})\n\n\thttp.HandleFunc("/health", func(w http.ResponseWriter, r *http.Request) {\n\t\tw.WriteHeader(http.StatusOK)\n\t\tw.Write([]byte("OK"))\n\t})\n\n\tlog.Printf("Démarrage du serveur sur :%s", port)\n\tlog.Fatal(http.ListenAndServe(":"+port, nil))\n}\n\nTestez localement :
\n\ngo run main.go\n\nOuvrez votre navigateur à l'adresse http://localhost:8080. Si vous voyez le message de bienvenue, tout fonctionne.
2. Compilation et téléchargement du binaire sur le serveur
\n\n2.1. Compilation croisée pour Linux
\n\nSur votre machine locale (même si vous êtes sous Windows ou macOS), exécutez :
\n\nGOOS=linux GOARCH=amd64 go build -o myapp main.go\n\nLe drapeau -o myapp définit le nom du fichier de sortie. Les variables d'environnement GOOS et GOARCH spécifient l'architecture cible (Linux 64 bits).
Après la compilation, vous obtiendrez un fichier binaire myapp d'environ 10 à 15 Mo.
2.2. Téléchargement sur le VPS
\n\nUtilisez scp pour copier le fichier :
scp myapp deployer@votre_IP_serveur:/home/deployer/myapp\n\nOu, si vous utilisez rsync :
\n\nrsync -avz myapp deployer@votre_IP_serveur:/home/deployer/myapp\n\nSur le serveur, déplacez le binaire dans un répertoire système et rendez-le exécutable :
\n\nsudo mv /home/deployer/myapp /usr/local/bin/myapp\nsudo chmod +x /usr/local/bin/myapp\n\n3. Configuration de systemd et du démarrage automatique
\n\n3.1. Création du fichier service
\n\nSystemd gérera notre application : la démarrer au démarrage du système, la redémarrer en cas de panne et collecter les logs.
\n\nCréez un fichier /etc/systemd/system/myapp.service :
sudo nano /etc/systemd/system/myapp.service\n\nInsérez la configuration suivante :
\n\n[Unit]\nDescription=Serveur d'application Go\nAfter=network.target\n\n[Service]\nType=simple\nUser=deployer\nGroup=deployer\nWorkingDirectory=/usr/local/bin\nExecStart=/usr/local/bin/myapp\nRestart=always\nRestartSec=5\nEnvironment=PORT=8080\nEnvironment=GIN_MO