Despliegue de aplicación C++ en VPS: nivel avanzado (guía paso a paso)

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: de la compilación local al lanzamiento en producción de una aplicación C++

Desarrollar una aplicación C++ es solo la mitad del trabajo. La segunda parte, igualmente importante, es su despliegue confiable y seguro en un servidor remoto (VPS). En este artículo, analizaremos un enfoque avanzado para el despliegue de aplicaciones C++ que va más allá de simplemente copiar el binario. Aprenderá a configurar la compilación automática, ejecutar la aplicación como un servicio del sistema, organizar un reverse proxy a través de Nginx e implementar un monitoreo básico.

El artículo está dirigido a desarrolladores que ya están familiarizados con C++ y los fundamentos de Linux. Usaremos herramientas modernas: CMake, systemd, Nginx y Git.



1. Automatización de la compilación y preparación del entorno en VPS

1.1. Instalación de dependencias y compilador

Antes del despliegue, asegúrese de que en el servidor esté instalado un compilador actualizado (g++ o clang) y las bibliotecas necesarias. Para un servidor de producción, se recomienda usar enlace estático o contenedorización, pero en este artículo consideraremos el enfoque clásico.

# Actualización de paquetessudo apt update && sudo apt upgrade -y

# Instalación del compilador y herramientas de compilaciónsudo apt install build-essential cmake git -y

# Instalación de bibliotecas adicionales (ejemplo para Boost)sudo apt install libboost-all-dev -y


1.2. Creación del script de compilación con CMake

Use CMake para gestionar la compilación. Esto garantizará la portabilidad y simplificará la integración con CI/CD. Ejemplo de CMakeLists.txt:

cmake_minimum_required(VERSION 3.16)project(MyCppApp VERSION 1.0.0 LANGUAGES CXX)

set(CMAKE_CXX_STANDARD 17)set(CMAKE_CXX_STANDARD_REQUIRED ON)

# Optimización para compilación de producciónset(CMAKE_BUILD_TYPE Release)

# Búsqueda de bibliotecas externasfind_package(Boost REQUIRED COMPONENTS system filesystem)

# Compilación del archivo ejecutableadd_executable(${PROJECT_NAME} src/main.cpp src/server.cpp)target_link_libraries(${PROJECT_NAME} PRIVATE Boost::system Boost::filesystem pthread)

# Instalación del binario en el sistemainstall(TARGETS ${PROJECT_NAME} DESTINATION /usr/local/bin)

Después de crear CMakeLists.txt, realice la compilación en el servidor:

cd /opt/myappmkdir build && cd buildcmake .. -DCMAKE_BUILD_TYPE=Releasemake -j$(nproc)sudo make install


2. Configuración de systemd para la gestión del proceso

Ejecutar la aplicación en segundo plano y reiniciarla automáticamente en caso de fallo es una tarea crítica. Use systemd para crear un servicio estable.



2.1. Creación del archivo unit

Cree el archivo /etc/systemd/system/myapp.service:

[Unit]Description=My C++ Production ApplicationAfter=network.target

[Service]Type=simpleUser=www-dataGroup=www-dataWorkingDirectory=/opt/myappExecStart=/usr/local/bin/MyCppApp --config /etc/myapp/config.jsonRestart=alwaysRestartSec=5StandardOutput=journalStandardError=journal

# SeguridadNoNewPrivileges=trueProtectSystem=fullProtectHome=true

[Install]WantedBy=multi-user.target


2.2. Inicio y verificación del servicio

sudo systemctl daemon-reloadsudo systemctl enable myapp.servicesudo systemctl start myapp.servicesudo systemctl status myapp.service

Ahora su aplicación C++ se iniciará automáticamente al arrancar el sistema y se reiniciará en caso de fallo.



3. Reverse proxy a través de Nginx y configuración de HTTPS

El acceso directo al puerto de la aplicación no es seguro ni conveniente. Use Nginx como reverse proxy para manejar contenido estático, terminación SSL y balanceo de carga.



3.1. Instalación y configuración de Nginx

sudo apt install nginx certbot python3-certbot-nginx -y

Cree la configuración /etc/nginx/sites-available/myapp:

server {    listen 80;    server_name myapp.example.com;

location / { pr

Blogs

Book Recommendations