Despliegue de una aplicación C++ en VPS: guía paso a paso
El desarrollo en C++ a menudo termina con la etapa de despliegue: transferir la aplicación terminada a un servidor remoto (VPS). A diferencia de los lenguajes interpretados, C++ requiere compilación para la arquitectura objetivo, configuración correcta del entorno y organización del inicio automático. En este artículo, analizaremos el ciclo completo: desde la preparación del VPS hasta la ejecución de la versión de producción de una aplicación C++ usando systemd y Nginx.
1. Preparación del VPS e instalación de herramientas necesarias
Antes del despliegue, asegúrese de que su VPS funcione con Ubuntu 20.04/22.04 o Debian 11/12. Conéctese por SSH:
ssh root@su-ip-del-servidorActualice la base de paquetes e instale el compilador g++, el sistema de compilación CMake y el administrador de procesos screen (para depuración):
apt update && apt upgrade -yapt install build-essential cmake screen git -yVerifique la versión del compilador:
g++ --versionSi utiliza bibliotecas (por ejemplo, Boost, OpenSSL), instálelas de antemano:
apt install libboost-all-dev libssl-dev -y2. Compilación de la aplicación C++ para el entorno del servidor
Transfiera el código fuente al VPS. La forma más sencilla es a través de Git:
git clone https://github.com/su-repositorio/project.gitcd projectCree una carpeta de compilación y ejecute la compilación con optimizaciones para producción:
mkdir build && cd buildcmake .. -DCMAKE_BUILD_TYPE=Releasemake -j$(nproc)La bandera -j$(nproc) acelera la compilación usando todos los núcleos del procesador. Después de una compilación exitosa, aparecerá un archivo ejecutable (por ejemplo, app). Verifique su funcionamiento:
./appSi la aplicación utiliza archivos de configuración o recursos, cópielos en la carpeta junto al binario o configure las rutas en el código a través de argv.
3. Configuración del inicio automático mediante systemd
Para que la aplicación se inicie al arrancar el sistema y se reinicie automáticamente en caso de fallos, cree un servicio systemd.
Cree el archivo /etc/systemd/system/myapp.service:
nano /etc/systemd/system/myapp.serviceInserte el siguiente contenido (reemplace las rutas con las suyas):
[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.targetExplicación de los parámetros:
Restart=always— reinicio ante cualquier finalización (excepto detención mediante systemctl stop).RestartSec=5— pausa de 5 segundos antes del reinicio.Environment— transferencia de variables de entorno (por ejemplo, para configuración).
Active e inicie el servicio:
systemctl daemon-reloadsystemctl enable myappsystemctl start myappVerifique el estado:
systemctl status myappDebería ver active (running). Si la aplicación falla, systemd la reiniciará automáticamente después de 5 segundos.
4. Configuración de Nginx como proxy inverso (opcional)
Si su aplicación C++ escucha HTTP (por ejemplo, API REST en el puerto 8080), es útil colocar Nginx delante para terminación SSL, balanceo y contenido estático.
Instale Nginx:
apt install nginx -yCree una configuración para su dominio (o IP) en /etc/nginx/sites-available/myapp:
server { listen 80; server_name su-dominio.com;
location / { proxy_pass http://127.0.0.1:8080; proxy_set_header H