Déploiement d'une application Go sur VPS : guide étape par étape pour développeurs

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 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 -y

Créez un utilisateur séparé pour l'application (ne travaillez pas en tant que root) :

adduser deployerusermod -aG sudo deployersu - deployer


1.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 version


1.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 -y


2. 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.go

Vé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/myapp


3. 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.service

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

Blogs

Book Recommendations