Desplegar aplicación Node.js con PM2 y Nginx: guía completa

desplegar aplicación Node.js

📅 Publicado el 6 de octubre, 2026 · Por Equipo RedServicio

Desplegar aplicación Node.js en producción es, probablemente, el momento en que tu proyecto deja de ser un experimento para convertirse en algo serio. Porque una cosa es que tu código funcione en local con node app.js, y otra muy distinta es que aguante tráfico real, caídas inesperadas y reinicios del servidor. En esta guía te contamos, paso a paso, cómo combinar PM2 como gestor de procesos y Nginx como proxy inverso para conseguir un despliegue profesional, estable y con margen para crecer. Y si buscas un hosting con soporte 24/7 que te acompañe en cada etapa, en RedServicio encontrarás servidores optimizados para Node.js y asistencia técnica real cuando la necesites.

¿Qué necesitas antes de desplegar aplicación Node.js en producción?

Antes de tocar cualquier comando, conviene preparar el terreno. No es glamuroso, pero este checklist te ahorrará más de un dolor de cabeza:

  • Servidor con acceso SSH: una VPS o servidor dedicado con Ubuntu 20.04/22.04 o Debian, y un usuario con privilegios sudo.
  • Node.js instalado: recomendamos usar NVM para gestionar versiones sin complicarte la vida:
  1. Descarga NVM: curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash
  2. Recarga tu shell: source ~/.bashrc
  3. Instala la versión LTS: nvm install –lts
  • Tu aplicación lista: con su package.json al día, las variables de entorno definidas en un archivo .env (nunca versionado en Git, por favor) y las dependencias de producción bien declaradas.
  • Nombre de dominio apuntando al servidor: configura el registro A de tu dominio hacia la IP del servidor antes de meter manos a Nginx y al certificado SSL.
  • Firewall básico: con UFW, deja abiertos solo los puertos 22, 80 y 443: sudo ufw allow OpenSSH && sudo ufw allow ‘Nginx Full’.

Un consejo práctico que muchos se saltan: prueba tu aplicación en el servidor ejecutándola directamente con node app.js antes de añadir PM2. Si arranca sin errores y responde en su puerto (el 3000, por ejemplo), ya tienes la base garantizada. Si no, mejor descubrirlo ahora.

Instalación y configuración de PM2 en tu servidor

PM2 es el gestor de procesos más popular del ecosistema Node.js, y no sin motivo: mantiene tu aplicación viva tras fallos, la levanta al arrancar el servidor y facilita muchísimo la gestión de logs. La instalación es global y no tiene ciencia:

npm install -g pm2

Para arrancar tu aplicación con PM2 dándole un nombre identificativo:

pm2 start app.js –name «mi-app»

Si tu proyecto usa otro punto de entrada (server.js, dist/index.js…), simplemente ajústalo. Para aplicaciones con framework tipo Next.js o NestJS, lo ideal es usar un archivo de configuración ecosystem.config.js:

Consejo: en ecosystem.config.js puedes definir instances: «max» con exec_mode: «cluster» para aprovechar todos los núcleos de CPU de tu servidor y multiplicar el rendimiento sin cambiar una sola línea de tu aplicación.

Dos comandos imprescindibles a partir de aquí:

  • pm2 startup: genera el script para que PM2 arranque automáticamente al reiniciar el servidor; ejecuta el comando que te muestra en pantalla.
  • pm2 save: guarda la lista actual de procesos para restaurarla en el próximo arranque.

Con esto tu aplicación sobrevivirá a reinicios y caídas del proceso. ¿Imprescindible en producción? Totalmente.

Configurar Nginx como proxy inverso para Node.js

Exponer directamente el puerto de Node.js (3000, 4000…) al público es una mala práctica. Nginx hace de intermediario: recibe las peticiones en los puertos 80/443, sirve los contenidos estáticos con gran eficiencia y reenvía las dinámicas a tu aplicación. Crea la configuración en /etc/nginx/sites-available/mi-app:

Contenido básico del bloque server: listen 80; con tu server_name (tudominio.com), y dentro de location / la directiva proxy_pass http://localhost:3000; junto con las cabeceras proxy_set_header Host $host;, proxy_set_header X-Real-IP $remote_addr; y proxy_set_header X-Forwarded-Proto $scheme;.

Luego activa el sitio y verifica que todo esté en orden:

  1. Crea el enlace simbólico: sudo ln -s /etc/nginx/sites-available/mi-app /etc/nginx/sites-enabled/
  2. Comprueba que no haya errores: sudo nginx -t
  3. Recarga el servicio: sudo systemctl reload nginx

Un extra muy recomendable si tu aplicación usa WebSockets (Socket.io, chats en tiempo real): añade en el bloque location las directivas proxy_http_version 1.1;, proxy_set_header Upgrade $http_upgrade; y proxy_set_header Connection «upgrade»;. Sin ellas, las conexiones se cortan de forma aleatoria y acabarás perdiendo una tarde entera buscando el problema.

Con Nginx respondiendo en el puerto 80 y PM2 manteniendo tu proceso Node.js activo, el despliegue básico ya está operativo y accesible desde tu dominio.

Cómo habilitar HTTPS con Let’s Encrypt en Nginx

Sin HTTPS, tu aplicación pierde credibilidad y posicionamiento. La vía más directa para conseguir un certificado gratuito y renovable es Certbot, el cliente oficial de Let’s Encrypt.

Instala Certbot y el plugin de Nginx en el servidor. En Ubuntu/Debian: sudo apt install certbot python3-certbot-nginx. En CentOS/RHEL: sudo yum install certbot python3-certbot-nginx.

Luego ejecuta Certbot con tu dominio (que ya debe apuntar al servidor y estar configurado en Nginx):

sudo certbot --nginx -d tudominio.com -d www.tudominio.com

Certbot detecta solo el bloque de servidor de tu app, pide el certificado, lo instala y ajusta la configuración para redirigir todo el tráfico HTTP hacia HTTPS. Cuando te pregunte, elige la opción de redirección. No la dejes pasar.

Certbot instala un temporizador de renovación automática, pero conviene verificar que la renovación funciona en modo prueba:

sudo certbot renew --dry-run

Y un detalle que se olvida a menudo: abre el puerto 443 en el firewall (sudo ufw allow 443 si usas UFW). Sin eso, el tráfico cifrado no llega a Nginx por mucho que el certificado esté bien instalado.

Comandos esenciales de PM2 para monitorizar y escalar tu app

Llegados a producción, hay un puñado de comandos de PM2 que vas a usar a diario en tu despliegue de aplicación Node.js:

  1. pm2 status: el estado de todos los procesos, con su PID, uso de CPU y memoria.
  2. pm2 logs: logs en tiempo real. Con --lines 100 ves las últimas 100 líneas; con --err filtras solo errores.
  3. pm2 monit: un panel interactivo en terminal con métricas en vivo de CPU, memoria y latencia de eventos.
  4. pm2 restart app: reinicia tras un despliegue. Y si estás en modo cluster, mejor pm2 reload app, que reinicia sin downtime.
  5. pm2 stop app y pm2 delete app: detienen o eliminan del todo el proceso de la lista de PM2.

¿Escalado horizontal? PM2 reparte la carga entre varios núcleos del servidor:

pm2 scale app 4 lanza 4 instancias de tu aplicación en modo cluster, equilibrando las peticiones automáticamente entre ellas.

Un consejo práctico que te ahorrará dolores de cabeza: crea un archivo ecosystem.config.js y gestiona la configuración de forma declarativa. Ahí defines el número de instancias, las variables de entorno y los límites de memoria (max_memory_restart: "512M") que reinician la app si esta empieza a fugar memoria. Lo he visto salvar más de un despliegue.

Para terminar, tras configurar todo ejecuta pm2 save y pm2 startup, de modo que PM2 restablezca tus procesos si el servidor se reinicia. Parece un detalle menor. No lo es: evita sustos mayúsculos tras un reinicio inesperado.

Conclusión: tu aplicación Node.js lista para producción

Con Nginx de proxy inverso, HTTPS activado mediante Let’s Encrypt y PM2 gestionando procesos con monitorización, logs y autoarranque, tienes un despliegue de aplicación Node.js sólido, seguro y preparado para escalar. Es la misma arquitectura sobre la que corren miles de aplicaciones en producción, y dominarla te da control total sobre tu infraestructura.

Eso sí, mantener este stack exige un servidor fiable, soporte técnico cuando algo falla a las 3 de la madrugada y buen rendimiento de red. En RedServicio.net ofrecemos hosting con servidores optimizados para Node.js y soporte 24/7 en español, para que tú te centres en tu código y nosotros en que tu aplicación siga en línea. Empieza hoy mismo tu despliegue con la tranquilidad de tener un equipo detrás.

📝

Equipo RedServicio

Artículos escritos y revisados por nuestro equipo técnico especializado en hosting e infraestructura web en España.

¿Listo para un hosting de verdad?

Servidores en España · Soporte 24/7 en español · Migración gratuita

Ver Planes desde 3,95€/mes →

Te puede interesar:

Clisec — Seguridad informática

Página Gratis — Crea tu web gratis

Scroll al inicio