Déploiement d'une application C++ sur VPS : guide étape par étape
Le développement en C++ se termine souvent par l'étape de déploiement — le transfert de l'application prête vers un serveur distant (VPS). Contrairement aux langages interprétés, le C++ nécessite une compilation pour l'architecture cible, une configuration correcte de l'environnement et l'organisation du démarrage automatique. Dans cet article, nous allons parcourir le cycle complet : de la préparation du VPS au lancement de la version de production d'une application C++ en utilisant systemd et Nginx.
1. Préparation du VPS et installation des outils nécessaires
Avant le déploiement, assurez-vous que votre VPS fonctionne sous Ubuntu 20.04/22.04 ou Debian 11/12. Connectez-vous via SSH :
ssh root@votre-ip-serveurMettez à jour la base de paquets et installez le compilateur g++, le système de build CMake et le gestionnaire de processus screen (pour le débogage éventuel) :
apt update && apt upgrade -yapt install build-essential cmake screen git -yVérifiez la version du compilateur :
g++ --versionSi vous utilisez des bibliothèques (par exemple, Boost, OpenSSL), installez-les à l'avance :
apt install libboost-all-dev libssl-dev -y2. Compilation de l'application C++ pour l'environnement serveur
Transférez le code source sur le VPS. Le plus simple est via Git :
git clone https://github.com/votre-repository/project.gitcd projectCréez un dossier de build et effectuez la compilation avec les optimisations pour la production :
mkdir build && cd buildcmake .. -DCMAKE_BUILD_TYPE=Releasemake -j$(nproc)Le flag -j$(nproc) accélère la compilation en utilisant tous les cœurs du processeur. Après une compilation réussie, un fichier exécutable apparaîtra (par exemple, app). Vérifiez son fonctionnement :
./appSi l'application utilise des fichiers de configuration ou des ressources, copiez-les dans le dossier à côté du binaire ou configurez les chemins dans le code via argv.
3. Configuration du démarrage automatique avec systemd
Pour que l'application démarre au lancement du système et redémarre automatiquement en cas de panne, créez un service systemd.
Créez le fichier /etc/systemd/system/myapp.service :
nano /etc/systemd/system/myapp.serviceInsérez le contenu suivant (remplacez les chemins par les vôtres) :
[Unit]Description=My C++ ApplicationAfter=network.target
[Service]ExecStart=/root/project/build/appWorkingDirectory=/root/project/buildRestart=alwaysRestartSec=5User=rootGroup=rootEnvironment="APP_ENV=production"
[Install]WantedBy=multi-user.targetExplication des paramètres :
Restart=always— redémarrage en cas de toute terminaison (sauf arrêt via systemctl stop).RestartSec=5— pause de 5 secondes avant le redémarrage.Environment— transmission des variables d'environnement (par exemple, pour la configuration).
Activez et démarrez le service :
systemctl daemon-reloadsystemctl enable myappsystemctl start myappVérifiez le statut :
systemctl status myappVous devriez voir active (running). Si l'application plante — systemd la relancera automatiquement après 5 secondes.
4. Configuration de Nginx comme proxy inverse (optionnel)
Si votre application C++ écoute sur HTTP (par exemple, une API REST sur le port 8080), il est utile de placer Nginx devant elle pour la terminaison SSL, l'équilibrage de charge et les fichiers statiques.
Installez Nginx :
apt install nginx -yCréez une configuration pour votre domaine (ou IP) dans /etc/nginx/sites-available/myapp :
server { listen 80; server_name your-domain.com;
location / { proxy_pass http://127.0.0.1:8080; proxy_set_header H