Déploiement d'une application C++ 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 déployer une application C++ sur un VPS ?

\n

C++ reste l'un des langages de programmation les plus performants. Si vous avez créé un serveur à forte charge, un analyseur, un moteur de jeu ou un microservice en C++, la question de sa publication sur Internet se posera tôt ou tard. La location d'un VPS (Virtual Private Server) est le choix optimal pour de telles tâches : vous obtenez un contrôle total sur l'environnement, ce qui est crucial pour les langages compilés.

\n

Dans cet article, nous allons parcourir le cycle complet : de la configuration d'un serveur vierge au lancement d'un binaire C++ sous systemd et à sa publication via Nginx. Tous les exemples de code sont fonctionnels et ont été testés sur Ubuntu 22.04.

\n\n

1. Préparation du VPS et installation des outils

\n\n

1.1. Connexion au serveur

\n

Après avoir acheté un VPS, vous recevrez une adresse IP, un identifiant (généralement root) et un mot de passe. Connectez-vous via SSH :

\n
ssh root@votre_adresse_IP_serveur
\n

Nous vous recommandons de mettre à jour immédiatement la base de paquets et d'installer les utilitaires de base :

\n
apt update && apt upgrade -y\napt install git curl wget build-essential -y
\n\n

1.2. Installation du compilateur et de CMake

\n

Pour compiler un projet C++, vous aurez besoin de g++ et cmake :

\n
apt install g++ cmake -y\ng++ --version  # Vérification de la version
\n

Si vous avez besoin d'une version plus récente de GCC (par exemple, pour C++20), ajoutez le PPA :

\n
add-apt-repository ppa:ubuntu-toolchain-r/test -y\napt install g++-13 -y\nupdate-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-13 100
\n\n

2. Écriture d'une application C++ de test (serveur HTTP)

\n

Pour la démonstration, nous allons créer un serveur HTTP simple en C++ utilisant des sockets. Il écoutera sur le port 8080 et répondra "Hello from C++ VPS!".

\n\n

2.1. Structure du projet

\n
mkdir ~/cpp-server && cd ~/cpp-server\nnano main.cpp
\n\n

2.2. Code source (main.cpp)

\n
#include <iostream>\n#include <string>\n#include <sstream>\n#include <sys/socket.h>\n#include <netinet/in.h>\n#include <unistd.h>\n\nint main() {\n    int server_fd, new_socket;\n    struct sockaddr_in address;\n    int opt = 1;\n    int addrlen = sizeof(address);\n    char buffer[1024] = {0};\n\n    // Création du socket\n    if ((server_fd = socket(AF_INET, SOCK_STREAM, 0)) == 0) {\n        perror("socket failed");\n        exit(EXIT_FAILURE);\n    }\n\n    // Liaison du port\n    if (setsockopt(server_fd, SOL_SOCKET, SO_REUSEADDR, &opt, sizeof(opt))) {\n        perror("setsockopt");\n        exit(EXIT_FAILURE);\n    }\n    address.sin_family = AF_INET;\n    address.sin_addr.s_addr = INADDR_ANY;\n    address.sin_port = htons(8080);\n\n    if (bind(server_fd, (struct sockaddr *)&address, sizeof(address)) < 0) {\n        perror("bind failed");\n        exit(EXIT_FAILURE);\n    }\n\n    if (listen(server_fd, 3) < 0) {\n        perror("listen");\n        exit(EXIT_FAILURE);\n    }\n\n    std::cout << "Server listening on port 8080..." << std::endl;\n\n    while (true) {\n        if ((new_socket = accept(server_fd, (struct sockaddr *)&address,\n                                 (socklen_t*)&addrlen)) < 0) {\n            perror("accept");\n            continue;\n        }\n\n        read(new_socket, buffer, 1024);\n        std::string response = "HTTP/1.1 200 OK\\r\\nContent-Type: text/plain\\r\\n\\r\\nHello from C++ VPS!";\n        send(new_socket, response.c_str(), response.length(), 0);\n        close(new_socket);\n    }\n    return 0;\n}
\n\n

2.3. Compilation du projet

\n

Compilons avec optimisation et liaison statique (si nécessaire) :

\n
g++ -O2 -std=c++17 main.cpp -o server\nls -la server  # Vérification du binaire
\n\n

3. Déploiement : systemd + proxy inverse Nginx

\n\n

3.1. Création du service systemd

\n

Pour que l'application démarre automatiquement au lancement du serveur et ne plante pas, créons une unité systemd :

\n
nano /etc/systemd/system/cpp-server.se                

Blogs

Book Recommendations