• 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
  • Noticias
  • Boletín
  • Contacto
  • Tienda
    • Libros
    • Equipamiento de oficina
    • Equipamiento en movilidad
    • Tiendas afiliadas
      • AliExpress
      • Amazon
      • Banggood
      • GeekBuying
      • Lenovo

Analytics Lane

Ciencia e ingeniería de datos aplicada

  • Ciencia de datos
  • Machine Learning
  • Python
  • Pandas
  • NumPy
  • Matlab
  • Julia
  • JavaScript
  • 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

¿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.

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

Publicidad


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.

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.

Publicidad


% 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.

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

Publicidad


% 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

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

Publicidad


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.

Publicidad


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

  • Creación de imagen Docker para Node y Express
    Creación de imagen Docker para Node y Express
  • Creación de una API REST con Express y TypeScript
    Creación de una API REST con Express y TypeScript
  • Creación de una librería TypeScript
    Creación de una librería TypeScript
  • Estructurar el proyecto TypeScript y pruebas unitarias (3º parte - Creación de una librería TypeScript)
    Estructurar el proyecto TypeScript y pruebas unitarias (3º…
  • Organizar el código del proyecto (2ª parte de creación de una API REST con Express y TypeScript)
    Organizar el código del proyecto (2ª parte de creación de…
  • Creación de rutas para modificar y borrar los registros (5ª parte de creación de una API REST con Express y TypeScript)
    Creación de rutas para modificar y borrar los registros (5ª…

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.

Publicidad




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
  • Facebook
  • GitHub
  • Instagram
  • Pinterest
  • RSS
  • Twitter
  • Tumblr
  • YouTube

Publicidad

Entradas recientes

El método de Hare-Niemeyer y su implementación en Python

septiembre 29, 2023 Por Daniel Rodríguez

Redimensionar una partición de disco LVM con espacio no asignado en Linux

septiembre 27, 2023 Por Daniel Rodríguez

¿Cómo saber la versión de Pandas o cualquier otra librería en Python?

septiembre 25, 2023 Por Daniel Rodríguez

Publicidad

Es tendencia

  • ¿Cómo eliminar columnas y filas en un dataframe pandas? publicado el marzo 25, 2019 | en Python
  • Seleccionar filas y columnas en Pandas con iloc y loc publicado el junio 21, 2019 | en Python
  • La aplicación Auto Py to Exe Creación de un EXE desde un archivo Python en Windows publicado el mayo 16, 2022 | en Python
  • Cómo encontrar la posición de elementos en una lista de Python publicado el abril 12, 2021 | en Python
  • Unir y combinar dataframes con pandas en Python publicado el septiembre 10, 2018 | en Python

Publicidad

Lo mejor valorado

4.9 (22)

Seleccionar filas y columnas en Pandas con iloc y loc

4.7 (12)

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

4.6 (15)

Archivos JSON con Python: lectura y escritura

4.5 (10)

Diferencias entre var y let en JavaScript

4.3 (12)

Ordenación de diccionarios en Python mediante clave o valor

Publicidad

Comentarios recientes

  • Daniel Rodríguez en ¿Cómo eliminar columnas y filas en un dataframe pandas?
  • Miguel en ¿Cómo eliminar columnas y filas en un dataframe pandas?
  • alberto en Resolver problema de credenciales en Bitbucket
  • Pablo en Aplicar el método D’Hondt en Excel
  • Agapito en Creación de un EXE desde un archivo Python en Windows

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-2023 Analytics Lane ·Términos y condiciones ·Política de Cookies ·Política de Privacidad ·Herramientas de privacidad ·Contacto