Despliegue de aplicación C++ en VPS: guía paso a paso de la A a la Z

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

Introducción: ¿Por qué desplegar una aplicación C++ en VPS?

\n

C++ sigue siendo uno de los lenguajes de programación más eficientes. Si has creado un servidor de alta carga, un parser, un motor de juegos o un microservicio en C++, tarde o temprano surgirá la cuestión de publicarlo en Internet. Alquilar un VPS (Servidor Privado Virtual) es la opción óptima para estas tareas: obtienes control total sobre el entorno, lo cual es crítico para los lenguajes compilados.

\n

En este artículo, analizaremos el ciclo completo: desde la configuración de un servidor vacío hasta la ejecución del binario C++ bajo systemd y su publicación a través de Nginx. Todos los ejemplos de código son funcionales y han sido probados en Ubuntu 22.04.

\n\n

1. Preparación del VPS e instalación de herramientas

\n\n

1.1. Conexión al servidor

\n

Después de comprar un VPS, recibirás una dirección IP, un usuario (generalmente root) y una contraseña. Nos conectamos vía SSH:

\n
ssh root@tu_dirección_IP_del_servidor
\n

Recomendamos actualizar inmediatamente la base de paquetes e instalar las utilidades básicas:

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

1.2. Instalación del compilador y CMake

\n

Para compilar un proyecto C++ necesitarás g++ y cmake:

\n
apt install g++ cmake -y\ng++ --version  # Verificar la versión
\n

Si necesitas una versión más reciente de GCC (por ejemplo, para C++20), agrega el 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. Escritura de una aplicación C++ de prueba (Servidor HTTP)

\n

Para la demostración, crearemos un servidor HTTP simple en C++ usando sockets. Escuchará en el puerto 8080 y responderá "Hello from C++ VPS!".

\n\n

2.1. Estructura del proyecto

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

2.2. Código fuente (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    // Creamos el socket\n    if ((server_fd = socket(AF_INET, SOCK_STREAM, 0)) == 0) {\n        perror("socket failed");\n        exit(EXIT_FAILURE);\n    }\n\n    // Vinculamos el puerto\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. Compilación del proyecto

\n

Compilaremos con optimización y enlace estático (si es necesario):

\n
g++ -O2 -std=c++17 main.cpp -o server\nls -la server  # Verificamos el binario
\n\n

3. Despliegue: systemd + Nginx reverse proxy

\n\n

3.1. Creación del servicio systemd

\n

Para que la aplicación se inicie automáticamente al arrancar el servidor y no se caiga, crearemos una unidad de systemd:

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

Blogs

Book Recommendations