El logotipo completo de Astro
    NodeJS
    15 abr 20244 min read

    Despliegue de aplicaciones Nodejs con PM2

    PM2 es una herramienta de gestión de procesos para Node.js con características como recarga sin tiempo de inactividad y balanceo de carga.

    Roberto Serrano Díaz-Grande

    Roberto Serrano

    Ingeniero de Software

    🤔 ¿Qué es PM2?

    PM2 es una herramienta de gestión de procesos para Node.js que ofrece características como recarga sin tiempo de inactividad y balanceo de carga, entre otras.

    Características principales de PM2

    • Monitorización de estado y seguimiento detallado
    • Balanceo de carga y gestión de cluster
    • Administración de memoria y gestión de logs
    • Reinicio automático de aplicaciones en caso de fallos,
    • Capacidad para lanzar aplicaciones en modo fork o cluster
    • Posibilidad de añadir o eliminar dinámicamente procesos de un cluster
    • Integraciones con herramientas de DevOps como Docker y Kubernetes

    Ventajas de Usar PM2

    • Gestión de procesos automatizada para una disponibilidad continua
    • Recarga sin tiempo de inactividad (zero-downtime reload)
    • Balanceo de carga para un mejor rendimiento

    Vamos a entrar en materia… empezamos con la instalación 😉

    🤓 Instalación y Configuración

    Realizaremos la instalación global de PM2 en nuestro sistema para facilitar la gestión de cualquier aplicación Node.js desde cualquier lugar.

    npm install -g pm2
    

    🧐 Monitoreo y Mantenimiento

    Para monitorear tus aplicaciones Node.js con PM2, puedes utilizar una serie de comandos útiles que te proporcionan información detallada sobre el estado y el rendimiento de tus procesos.

    # Muestra una lista de todas las aplicaciones que están siendo gestionadas por PM2
    pm2 list
    
    # Muestra una lista de todas las aplicaciones que están siendo gestionadas por PM2 con más detalle
    pm2 ls
    
    # AWESOME COMMAND 🚨
    # Abre una terminal interactiva que permite monitorear el uso de CPU y memoria de cada aplicación en tiempo real
    pm2 monit
    
    # Descripción detallada de un proceso específico
    pm2 show [app-name o id]
    
    # Similar a pm2 list, pero puede proporcionar una salida más detallada dependiendo de las versiones de PM2
    pm2 status
    
    # Permite seguir los logs en tiempo real
    pm2 logs [app-name o id]
    
    # Información detallada sobre un proceso específico, útil para la depuración
    pm2 describe [id]
    
    # Para aquellos que prefieren una interfaz gráfica 💻
    pm2 dashboard
    

    Se pueden combinar estos comandos con scripts de shell o sistemas de monitoreo para automatizar el seguimiento de la salud de las aplicaciones.

    🚀 Despliegue de aplicaciones con PM2

    PM2 ofrece herramientas que pueden hacer que este proceso sea más eficiente y fiable. Aquí te presento algunos puntos que podrías tratar en tu sección sobre estrategias de despliegue.

    Configuración del archivo ecosystem.config.js

    El archivo ecosystem.config.js es el corazón de la configuración de PM2 y permite definir el entorno de nuestras aplicaciones Node.js. Aquí puedes especificar:

    • Scripts de despliegue: Define los comandos necesarios para ejecutar antes y después del despliegue, como la instalación de dependencias con npm install.
    • Repositorio: Indica el origen del código fuente, normalmente un repositorio de Git.
    • Información del host: Especifica los servidores donde se desplegará la aplicación.
    • Rutas de directorios: Define dónde se guardará el código en los servidores.
    • Variables de entorno: Establece las variables específicas del entorno de producción, desarrollo, etc.

    Ejemplo de fichero:

    module.exports = {
      apps: [{
        name: 'mi-aplicacion-node',
        script: 'app.js',
        instances: 'max',
        autorestart: true,
        watch: false,
        max_memory_restart: '1G',
        env: {
          NODE_ENV: 'development'
        },
        env_production: {
          NODE_ENV: 'production'
        }
      }],
    
      deploy: {
        production: {
          user: 'username',
          host: ['192.168.0.1'],
          ref: 'origin/main',
          repo: 'git@github.com:usuario/repositorio.git',
          path: '/var/www/mi-aplicacion-node',
          'post-deploy': 'npm install && pm2 reload ecosystem.config.js --env production',
          env: {
            NODE_ENV: 'production'
          }
        },
        development: {
          user: 'username',
          host: ['192.168.0.2'],
          ref: 'origin/dev',
          repo: 'git@github.com:usuario/repositorio.git',
          path: '/var/www/mi-aplicacion-node-dev',
          'post-deploy': 'npm install y pm2 reload ecosystem.config.js --env development',
          env: {
            NODE_ENV: 'development'
          }
        }
      }
    };
    

    💻 Comandos de Despliegue

    Utilizando pm2 deploy, puedes automatizar todo el ciclo de despliegue:

    • Despliegue:
    # Preparar el entorno de producción
    pm2 deploy production setup
    
    # Despliegue de la aplicación
    pm2 deploy production
    
    • Actualización: Si ya está desplegada, pm2 deploy production update actualiza la aplicación.

    ✅ Rollbacks Automáticos

    Si algo sale mal, PM2 puede revertir a un despliegue anterior automáticamente.

    # Donde `[n]` es el número de despliegues que quieres retroceder
    pm2 deploy production revert [n]
    

    ♻️ Zero-Downtime Reload

    Con PM2 puedes recargar la aplicación sin tiempo de inactividad, lo que permite que las actualizaciones sean imperceptibles para los usuarios.

    pm2 reload ecosystem.config.js
    

    🌐 Estrategias de Escalado

    PM2 permite escalar horizontalmente tu aplicación con facilidad mediante el comando.

    pm2 scale app +1
    

    ❤️ Conclusión

    PM2 no solo simplifica la gestión de aplicaciones Node.js, sino que también potencia su estabilidad y rendimiento con herramientas avanzadas de monitoreo, despliegue y escalado.

    Te animo a integrar PM2 en tus proyectos y a explorar cómo puede mejorar la disponibilidad y eficiencia de tus aplicaciones.

    ¿Tienes experiencias con PM2 que te gustaría compartir? ¡Deja tus comentarios abajo y hablemos!

    Enlaces relacionados:

    PM2

    Etiquetas

    NodeJS
    Roberto Serrano Diaz-Grande

    Roberto Serrano

    Ingeniero de Software especializado en crear aplicaciones útiles que resuelven problemas reales. Con más de 15 años de experiencia en desarrollo full-stack y tecnologías modernas.

    Ver perfil completo
    Despliegue de aplicaciones Nodejs con PM2 | | Roberto Serrrano Díaz-Grande