Déploiement d'une application Go sur VPS : guide pas à pas de A à Z

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

Introduction : pourquoi Go et VPS sont le duo idéal pour votre projet

\n\n

Go (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\n

Dans 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\n

1. Préparation du VPS et écriture de l'application Go

\n\n

1.1. Configuration initiale du serveur

\n\n

Après avoir acheté un VPS (par exemple, chez DigitalOcean, Timeweb ou Hetzner), connectez-vous via SSH :

\n\n
ssh root@votre_IP_serveur
\n\n

Effectuez la configuration de sécurité de base :

\n\n
apt 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\n

Assurez-vous que les ports 80 et 443 sont ouverts dans le pare-feu (UFW) :

\n\n
ufw allow 22\nufw allow 80\nufw allow 443\nufw enable
\n\n

1.2. Application Go simple pour le déploiement

\n\n

Créez un fichier main.go sur votre machine locale :

\n\n
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\n

Testez localement :

\n\n
go run main.go
\n\n

Ouvrez votre navigateur à l'adresse http://localhost:8080. Si vous voyez le message de bienvenue, tout fonctionne.

\n\n

2. Compilation et téléchargement du binaire sur le serveur

\n\n

2.1. Compilation croisée pour Linux

\n\n

Sur votre machine locale (même si vous êtes sous Windows ou macOS), exécutez :

\n\n
GOOS=linux GOARCH=amd64 go build -o myapp main.go
\n\n

Le 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).

\n\n

Après la compilation, vous obtiendrez un fichier binaire myapp d'environ 10 à 15 Mo.

\n\n

2.2. Téléchargement sur le VPS

\n\n

Utilisez scp pour copier le fichier :

\n\n
scp myapp deployer@votre_IP_serveur:/home/deployer/myapp
\n\n

Ou, si vous utilisez rsync :

\n\n
rsync -avz myapp deployer@votre_IP_serveur:/home/deployer/myapp
\n\n

Sur le serveur, déplacez le binaire dans un répertoire système et rendez-le exécutable :

\n\n
sudo mv /home/deployer/myapp /usr/local/bin/myapp\nsudo chmod +x /usr/local/bin/myapp
\n\n

3. Configuration de systemd et du démarrage automatique

\n\n

3.1. Création du fichier service

\n\n

Systemd 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\n

Créez un fichier /etc/systemd/system/myapp.service :

\n\n
sudo nano /etc/systemd/system/myapp.service
\n\n

Insé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                

Blogs

Book Recommendations