• Saltar al contenido principal
  • Skip to secondary menu
  • Saltar a la barra lateral principal
  • Saltar al pie de página
  • Inicio
  • Secciones
    • Ciencia de datos
    • Criptografía
    • Herramientas
    • Machine Learning
    • Noticias
    • Opinión
    • Productividad
    • Programación
      • JavaScript
      • Julia
      • Matlab
      • Python
      • R
  • Programación
    • JavaScript
    • Julia
    • Matlab
    • Python
    • R
  • Laboratorio
    • Estadística
      • Calculadora del Tamaño Muestral en Encuestas
      • Calculadora de estadísticos descriptivos
      • Test de normalidad
      • Calculadora de contrastes de hipotesis
      • Calculadora de tamano del efecto
      • Simulador de Regresión Lineal con Ruido
      • Visualizador de PCA
      • Visualizador de Series Temporales
      • Simulador de Regresión Logística
      • Simulador de K-Means
      • Simulador de DBSCAN
      • Detector de la Ley de Benford
    • Probabilidad
      • Calculadora de Probabilidad de Distribuciones
      • Calculadora de Probabilidades de Lotería
      • Simulador del Problema de Monty Hall
      • Simulador de la Estrategia Martingala
    • Finanzas
      • Calculadora de Préstamos e Hipotecas
      • Conversor TIN ↔ TAE
      • Calculadora DCA con ajuste por inflación
      • Calculadora XIRR con Flujos Irregulares
      • Simulador FIRE (Financial Independence, Retire Early)
    • Negocios
      • CLV
      • Scoring
    • Herramientas
      • Formateador / Minificador de JSON
      • Conversor CSV ↔ JSON
      • Comparador y Formateador de Texto y JSON
      • Formateador y Tester de Expresiones Regulares
      • Inspector de JWT
      • Generador y verificador de hashes
      • Codificador / Decodificador Base64 y URL
      • Conversor de bases numericas
      • Conversor de Timestamp Unix
      • Conversor de colores
      • Generador de UUIDs
    • Juegos
      • Tres en Raya
      • Nim con Q-Learning
    • Más
      • Método D’Hondt
      • Generador de Contraseñas Seguras
  • Noticias
  • Boletín
  • Contacto
  • Tienda
    • Libros
    • Equipamiento de oficina
    • Equipamiento en movilidad

Analytics Lane

Ciencia e ingeniería de datos aplicada

  • Ciencia de datos
  • Machine Learning
  • IA Generativa
  • Python
  • Pandas
  • NumPy
  • R
  • Excel

Ejecutar la aplicación en producción con PM2 (10ª parte de creación de una API REST con Express y TypeScript)

diciembre 14, 2022 Por Daniel Rodríguez Deja un comentario
Tiempo de lectura: 6 minutos

Una vez finalizada la implementación del API REST con Express y TypeScript para ejecutar esta simplemente habrá que compilar el código e indicarle a Node el archivo de inicio. También se puede usar ts-node para ejecutar el programa sin la necesidad de compilarlo previamente. Aunque esta no es la mejor opción para publicar una aplicación Node en producción. En el caso de que se de un error de ejecución, la aplicación simplemente se apagará al no estar monitorizada. Además, cada vez que se reincide el sistema será necesario volver a iniciar la aplicación manualmente. Problemas que se pueden solucionar en producción con PM2, un gestor de procesos.

Esta entrada forma parte de la serie “Creación de una API REST con Express y TypeScript” de la cual forman los siguientes entregas:

  1. Creación de una API REST con Express y TypeScript
  2. Organizar el código del proyecto
  3. Configurar TypeORM para acceder a la base de datos
  4. Creación de rutas para consultar y agregar los registros
  5. Creación de rutas para modificar y borrar los registros
  6. Agregando logs al API con Winston
  7. Requerir autenticación mediante JWT
  8. Registro de usuarios
  9. Incluir un certificado en Express para servir el API mediante HTTPS
  10. Ejecutar la aplicación en producción con PM2

Tabla de contenidos

  • 1 ¿Qué es PM2?
    • 1.1 Instalación de PM2
  • 2 Arrancar una aplicación con PM2
    • 2.1 Detener un proceso con PM2
    • 2.2 Reiniciar un proceso con PM2
    • 2.3 Listado de los proceso en PM2
    • 2.4 Consulta de los logs
  • 3 Uso de monit para el monitoreo visual de las aplicaciones en producción con PM2
  • 4 Reiniciar los procesos tras el inicio del sistema
  • 5 Conclusiones

¿Qué es PM2?

PM2 es un gestor de procesos para Node con el que se pueden gestionar aplicaciones en producción de una forma sencilla. Haciendo sencillas las tareas habituales de administración. Entre otras características, ofrece la posibilidad de monitorizar las aplicaciones y volverlas a lanzar en el caso de que estas se caigan, evitando de este modo una caída de los servicios. Incluyendo también un balanceador de carga con el que mejorar el rendimiento de los servicios. Además de poder llevar un registro de las aplicaciones.

Nuevo test de normalidad interactivo en el laboratorio de Analytics Lane
En Analytics Lane
Nuevo test de normalidad interactivo en el laboratorio de Analytics Lane

Algunas de las características más destacadas de PM2 son:

  • Permite gestionar múltiples aplicaciones Node
  • Monitoriza el uso de recursos de cada una de las aplicaciones (memoria, procesador y tiempo en marcha)
  • Almacenado en logs de los mensajes que produce el servidor en la terminal.
  • Permite realizar un balanceo de carga.
  • Reinicio automático de las aplicaciones cuando estas se caen o el código cambia.
  • Inicio automático de las aplicaciones después de un reinicio del servidor.

Instalación de PM2

PM2 es un programa de Node, por lo que la instalación se realiza mediante npm. Así para instalarlo hay que instalar previamente Node y luego escribir en la terminal el comando

npm install -g pm2

Lo que instalara el paquete globalmente. En el caso de que se trabaje en Linux o en macOS se debe anteponer el comando sudo para realizar la instalación.

Publicidad


Arrancar una aplicación con PM2

Ahora para iniciar una aplicación con PM2 solamente se debe ir a la carpeta del proyecto y en lugar de ejecutar el comando

node index.js

Se debe ejecutar el comando

pm2 start index.js

donde index.js es el archivo donde se encuentra la aplicación. Si esto se hace en nuestro proyecto se tendría una salida como la siguiente.

% pm2 start ./dist/index.js  
[PM2] Starting /Users/analyticslane/expresslanets/dist/index.js in fork_mode (1 instance)
[PM2] Done.
┌────┬────────────────────┬──────────┬──────┬───────────┬──────────┬──────────┐
│ id │ name               │ mode     │ ↺    │ status    │ cpu      │ memory   │
├────┼────────────────────┼──────────┼──────┼───────────┼──────────┼──────────┤
│ 0  │ index              │ fork     │ 0    │ online    │ 0%       │ 716.0kb  │
└────┴────────────────────┴──────────┴──────┴───────────┴──────────┴──────────┘

Por defecto la aplicación tomará el nombre del archivo, lo que puede no ser significativo, por lo que se puede asignar un nombre con la opción --name. Aunque antes de asignar un nombre se debe borrar previamente el servicio con el comando delete seguido del id.

pm2 delete 0

Lo que detiene y borrara el proceso. Ahora ya se le puede dar un nombre más significativo al servicio.

% pm2 start ./dist/index.js --name expresslanets
[PM2] Starting /Users/analyticslane/expresslanets/dist/index.js in fork_mode (1 instance)
[PM2] Done.
┌────┬────────────────────┬──────────┬──────┬───────────┬──────────┬──────────┐
│ id │ name               │ mode     │ ↺    │ status    │ cpu      │ memory   │
├────┼────────────────────┼──────────┼──────┼───────────┼──────────┼──────────┤
│ 0  │ expresslanets      │ fork     │ 0    │ online    │ 0%       │ 716.0kb  │
└────┴────────────────────┴──────────┴──────┴───────────┴──────────┴──────────┘

Detener un proceso con PM2

Para detener un proceso se debe usar el comando stop seguido del nombre o id del proceso. Así para detener nuestro servidor se deberá escribir el comando

% pm2 stop expresslanets
[PM2] Applying action stopProcessId on app [expresslanets](ids: [ 0 ])
[PM2] [expresslanets](0) ✓
┌────┬────────────────────┬──────────┬──────┬───────────┬──────────┬──────────┐
│ id │ name               │ mode     │ ↺    │ status    │ cpu      │ memory   │
├────┼────────────────────┼──────────┼──────┼───────────┼──────────┼──────────┤
│ 0  │ expresslanets      │ fork     │ 0    │ stopped   │ 0%       │ 0b       │
└────┴────────────────────┴──────────┴──────┴───────────┴──────────┴──────────┘

Como se puede ver el estado pasa de online a stopped y el uso de memoria se vuelve 0.

Reiniciar un proceso con PM2

El comando con el que se puede reiniciar un servicio detenido es restart, depuesto del cual se debe indicar el nombre del proceso o su id. Para volver a poner en marcha el servicio detenido solamente se tendrá que escribir el comando.

% pm2 restart expresslanets
Use --update-env to update environment variables
[PM2] Applying action restartProcessId on app [expresslanets](ids: [ 0 ])
[PM2] [expresslanets](0) ✓
┌────┬────────────────────┬──────────┬──────┬───────────┬──────────┬──────────┐
│ id │ name               │ mode     │ ↺    │ status    │ cpu      │ memory   │
├────┼────────────────────┼──────────┼──────┼───────────┼──────────┼──────────┤
│ 0  │ expresslanets      │ fork     │ 0    │ online    │ 0%       │ 888.0kb  │
└────┴────────────────────┴──────────┴──────┴───────────┴──────────┴──────────┘

Lo que hace que el estado de servicio vuelva a ser online.

Publicidad


Listado de los proceso en PM2

En cualquier momento se puede consultar el listado de procesos, activos o no, que están gestionados con PM2. Lo que se consigue escribiendo el pm2 con el comando list. Así, para ver el listado de tareas se puede hacer con

% pm2 list
┌────┬────────────────────┬──────────┬──────┬───────────┬──────────┬──────────┐
│ id │ name               │ mode     │ ↺    │ status    │ cpu      │ memory   │
├────┼────────────────────┼──────────┼──────┼───────────┼──────────┼──────────┤
│ 0  │ expresslanets      │ fork     │ 0    │ online    │ 0%       │ 55.5mb   │
└────┴────────────────────┴──────────┴──────┴───────────┴──────────┴──────────┘

Obteniendo una tabla como la anterior.

Consulta de los logs

PM2 también almacena los mensajes que saca por pantalla la aplicación Node, lo que permite mantener un log básico del servidor. Para ello se debe escribir pm2 seguido del comando log para ver el de todas las aplicaciones. Aunque también se puede indicar el nombre o id de un proceso para limitar la salida solo a este. Así, el comando

pm2 log

mientras que

pm2 log expresslanets

mostrará solo el log de expresslanets. Algo que es más interesante ya que habitualmente sólo se revisa el log de una aplicación.

Uso de monit para el monitoreo visual de las aplicaciones en producción con PM2

Además de lo visto hasta ahora PM2 también ofrece la posibilidad de monitorizar el estado de los servicios con una aplicación de terminal llamada monit. Para iniciarla solamente se debe escribir en la terminal el comando

pm2 monit

obteniendo como resultado una ventana como la siguiente.

Aplicación monit de PM2 para monitorizar los servicios
Aplicación monit de PM2 para monitorizar los servicios

Publicidad


Reiniciar los procesos tras el inicio del sistema

Para reiniciar los procesos después de un reinicio del sistema es necesario crear un script de inicio. Una de las características clave a la hora de poner un programa en producción con PM2. La creación de este script lo puede realizar el propio PM2 ejecutando el siguiente comando en la terminal

pm2 startup

El cual detectará automáticamente el sistema operativo y realizará las tareas necesarias. En caso de que no sea así se puede indicar el nombre del sistema operativo detrás como parámetro.

Ahora PM2 se iniciará automáticamente después de cada reinicio del sistema, pero todavía no iniciarán los servicios. Para que los servicios se reinicien es necesario guardar la configuración con el comando save de pm2, esto es, escribiendo en la terminal

pm2 save

Nótese que esta operación se tendrá que repetir cada vez que se cambie alguna opción de algún servicio.

Conclusiones

En esta última publicación de la serie creación de una API REST con Express y TypeScript se ha visto cómo se puede poner en producción el servicio con PM2. Aunque no es necesario, ya que se puede iniciar el programa solo con Node, el uso de PM2 facilita las tareas de mantenimiento. Permite que todas las aplicaciones que se encuentren en un servidor puedan reiniciarse automáticamente cuando este se inicie. Además de monitorizar y garantizar que estas están funcionando.

El código creado en toda la serie de publicaciones se puede encontrar en la cuenta de GitHub de Analytics Lane.

Imagen de Tayeb MEZAHDIA en Pixabay

¿Te ha parecido de utilidad el contenido?

¡Puntúalo entre una y cinco estrellas!

Puntuación promedio 0 / 5. Votos emitidos: 0

Ya que has encontrado útil este contenido...

¡Síguenos en redes sociales!

¡Siento que este contenido no te haya sido útil!

¡Déjame mejorar este contenido!

Dime, ¿cómo puedo mejorar este contenido?

Publicaciones relacionadas

  • Nuevo test de normalidad interactivo en el laboratorio de Analytics Lane
  • Nuevo conversor de timestamp Unix en el laboratorio de Analytics Lane
  • Calculadora de Contrastes de Hipótesis: interpreta correctamente el p-valor y toma decisiones estadísticas con confianza
  • Calculadora de Tamaño del Efecto: la herramienta clave para entender cuánto importa realmente una diferencia
  • Simulador de DBSCAN: descubre cómo encontrar clusters reales (y ruido) sin fijar K
  • Conversor de Colores: convierte, compara y valida cualquier color en tiempo real
  • Analytics Lane lanza su Generador de UUIDs: identificadores únicos, seguros y listos para producción en segundos
  • 1200 publicaciones en Analytics Lane
  • Analytics Lane lanza su Conversor TIN ↔ TAE: la herramienta definitiva para entender el coste real de depósitos, préstamos e hipotecas

Publicado en: JavaScript Etiquetado como: Express, Node, PM2

Interacciones con los lectores

Deja una respuesta Cancelar la respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

I accept the Terms and Conditions and the Privacy Policy

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.

Barra lateral principal

Suscríbete a nuestro boletín

Suscríbete al boletín semanal para estar al día de todas las publicaciones.

Política de Privacidad

Analytics Lane en redes sociales

  • Amazon
  • Bluesky
  • Facebook
  • GitHub
  • Instagram
  • Mastodon
  • Pinterest
  • RSS
  • Telegram
  • Tumblr
  • Twitter
  • YouTube

Publicidad

Entradas recientes

De la Regresión Logística al Scorecard: La Transformación Matemática

mayo 19, 2026 Por Daniel Rodríguez

Noticias

Analytics Lane lanza la versión 1.1 del laboratorio con nuevas suites de CLV y Scoring

mayo 18, 2026 Por Daniel Rodríguez

Interés compuesto: la fuerza que multiplica tu dinero (y los errores que la anulan)

mayo 14, 2026 Por Daniel Rodríguez

Publicidad

Es tendencia

  • Gráficos de correlación en Seaborn: Mapas de calor y gráficos de pares publicado el julio 27, 2023 | en Python
  • Media, mediana y moda: Descubre cómo interpretar las medidas de tendencia central con ejemplos claros y sin complicaciones publicado el mayo 16, 2025 | en Ciencia de datos
  • Gráficos de barras en Matplotlib publicado el julio 5, 2022 | en Python
  • Cómo encontrar la posición de elementos en una lista de Python publicado el abril 12, 2021 | en Python
  • Programador de tareas de Windows: Guía definitiva para automatizar tu trabajo (BAT, PowerShell y Python) publicado el octubre 7, 2025 | en Herramientas, Productividad

Publicidad

Lo mejor valorado

4.9 (24)

Seleccionar filas y columnas en Pandas con iloc y loc

4.6 (16)

Archivos JSON con Python: lectura y escritura

4.4 (14)

Ordenación de diccionarios en Python mediante clave o valor

4.7 (13)

Operaciones de filtrado de DataFrame con Pandas en base a los valores de las columnas

4.1 (11)

Aplicar el método D’Hondt en Excel

Comentarios recientes

  • bif en JSON en bases de datos: cuándo es buena idea y cuándo no
  • bif en Cómo desinstalar Oracle Database 19c en Windows
  • M. Pilar en Cómo eliminar las noticias en Windows 11 y recuperar tu concentración
  • Daniel Rodríguez en Probabilidad básica: cómo entender el azar en nuestra vida diaria
  • Pepe en Probabilidad básica: cómo entender el azar en nuestra vida diaria

Publicidad


Footer

Analytics Lane

  • Acerca de Analytics Lane
  • Boletín de noticias
  • Contacto
  • Libros
  • Lo más popular
  • Noticias
  • Tienda
  • Tiendas afiliadas

Secciones

  • Ciencia de datos
  • Criptografía
  • Herramientas
  • Machine Learning
  • Opinión
  • Productividad
  • Programación
  • Reseñas

Sobre de Analytics Lane

En Analytics Lane tratamos de explicar los principales conceptos de la ciencia e ingeniería de datos con un enfoque práctico. Los principales temas tratados son ciencia de datos, ingeniería de datos, inteligencia artificial, machine learning, deep learning y criptografía. Además, también se habla de los principales lenguajes de programación y herramientas utilizadas por los científicos e ingenieros de datos.

Copyright © 2018-2026 Analytics Lane ·Términos y condiciones ·Política de Cookies ·Política de Privacidad ·Herramientas de privacidad ·Contacto