Desplegar Node.js en Linux con Nginx y PM2 - una guía práctica para principiantes
Gancho: por qué esta pila importa
Si has creado una aplicación Node.js y quieres que funcione de forma fiable en producción, no basta con ejecutar node app.js y cruzar los dedos. La combinación Linux + Nginx + PM2 ofrece una solución pragmática: estabilidad del sistema operativo, rendimiento y terminación SSL con Nginx, y gestión automática de procesos con PM2. Este artículo resume la lógica y da un camino práctico y directo para desplegar una app real rápidamente.
Contexto: el problema que enfrentan la mayoría de desarrolladores
Las aplicaciones nuevas fallan en producción por razones sencillas: procesos que crashean, puertos expuestos, ausencia de HTTPS o reinicios del servidor sin configuración de arranque. Necesitas un patrón de despliegue que:
- Mantenga la app en ejecución tras caídas y reinicios
- Oculte puertos internos del acceso público
- Gestione HTTPS, activos estáticos y picos de carga
Nginx y PM2 en un VPS Linux resuelven todo esto sin una orquestación pesada y con herramientas estándar compatibles con distribuciones comunes como Ubuntu o CentOS.
Visión general de la solución
Flujo de alto nivel: Nginx escucha en 80 y 443 y hace proxy hacia tu proceso Node en un puerto interno como 3000. PM2 ejecuta y monitoriza el proceso Node, reinicia al fallar y resucita procesos tras reinicios. Usa un archivo ecosistema PM2 para versionar la configuración del proceso. Estas prácticas encajan perfectamente con equipos que desarrollan aplicaciones a medida y software a medida y quieren un entorno estable para crecer.
Checklist rápido antes de empezar
- Provisiona un servidor Linux (1-2 GB RAM es suficiente para apps pequeñas)
- Conéctate por SSH y actualiza paquetes
- Instala Node.js (NodeSource o nvm), Nginx y PM2
- Asegura que el DNS apunte al servidor antes de emitir certificados SSL
- Mantén código y configuración ecosystem en git
Implementación: pasos esenciales y accionables
- Instala Node.js y verifica node -v y npm -v. Para múltiples proyectos usa nvm.
- Sube o clona tu app en una carpeta dedicada, por ejemplo /home/usuario/mi-app y ejecuta npm install --production.
- Instala PM2 globalmente y arranca la app con un nombre amigable: pm2 start app.js --name mi-app. Ejecuta pm2 startup y pm2 save para asegurar reinicios.
- Instala Nginx y crea un server block que haga proxy_pass a http://127.0.0.1:3000, prueba nginx -t y recarga Nginx.
- Asegura el sitio con Let’s Encrypt usando certbot --nginx para HTTPS gratuito y renovaciones automáticas.
Nota importante: no expongas el puerto de Node al internet público. Deja que Nginx gestione el tráfico entrante y SSL.
PM2: hazlo repetible
Usa un archivo ecosystem.config.js para describir tus apps y variables de entorno. Con PM2 puedes correr múltiples apps desde un solo archivo, definir NODE_ENV y PORT por entorno y usar clustering con instances: max para aprovechar todos los núcleos CPU. Inicia todo con pm2 start ecosystem.config.js --env production y guarda el estado con pm2 save. Evita watch true en producción; usa CI para reinicios controlados.
Nginx: proxy inverso y consejos prácticos
Configura proxy_pass a http://127.0.0.1:3000 y añade cabeceras comunes como X-Forwarded-For y Host. Prueba nginx -t antes de recargar. Activa gzip y cabeceras de cache para activos estáticos. Añade cabeceras de seguridad básicas como X-Frame-Options, X-Content-Type-Options y X-XSS-Protection. Si alojas varias apps crea bloques de servidor separados por dominio y apunta cada uno al puerto interno de su app.
Seguridad, monitorización y validación
- Firewall: activa UFW en Ubuntu o firewalld en CentOS y permite SSH y Nginx Full (puertos 22, 80, 443).
- HTTPS: usa certbot con el plugin nginx para automatizar emisión y renovación de certificados.
- Logs y monitoring: usa pm2 logs y pm2 monit para chequeos rápidos. Instala pm2-logrotate para evitar crecimiento excesivo de logs y haz pruebas de carga ligeras con herramientas como ab mientras observas pm2 monit, top/htop y logs de Nginx.
Buenas prácticas rápidas
- Ejecuta Node bajo un usuario no root
- Nunca subas secretos al repositorio; usa variables de entorno o bloques env en PM2
- Haz npm audit regularmente y manten dependencias actualizadas
Sobre Q2BSTUDIO
En Q2BSTUDIO somos una empresa de desarrollo de software dedicada a crear aplicaciones a medida y software a medida, con especialización en inteligencia artificial, ciberseguridad y servicios cloud. Ofrecemos soluciones completas desde diseño y desarrollo hasta despliegue y operación en AWS y Azure. Si buscas apoyo para construir una solución robusta y escalable podemos ayudarte con desarrollo a medida y consultoría en IA y seguridad.
Si te interesa que desarrollemos tu plataforma o aplicación personalizada visita nuestra página de desarrollo de apps en
software a medida y aplicaciones a medida
y para proyectos que integren modelos y agentes IA consulta
inteligencia artificial para empresas
Palabras clave y servicios relacionados
Este enfoque cubre muchas necesidades de empresas que buscan servicios cloud aws y azure, servicios inteligencia de negocio y power bi, ia para empresas, agentes IA y soluciones de ciberseguridad y pentesting integradas en su ciclo de vida de desarrollo.
Conclusión
Desplegar Node.js en Linux con Nginx y PM2 te da una base fiable y mantenible sin la complejidad inicial de contenedores o plataformas de orquestación. Empieza pequeño: pon Node y PM2 en marcha, coloca Nginx delante, añade HTTPS con certbot y formaliza la configuración con un archivo ecosistema y CI. Ese patrón cubre la mayoría de necesidades de producción para proyectos indie, MVPs y SaaS en fases tempranas. Si necesitas ayuda profesional para ejecutar este despliegue o ampliar la solución con inteligencia artificial, ciberseguridad o servicios cloud, en Q2BSTUDIO podemos acompañarte en todo el proceso.
Comentarios