{"id":2902,"date":"2022-10-17T11:02:37","date_gmt":"2022-10-17T10:02:37","guid":{"rendered":"https:\/\/www.jmarior.net\/itank\/?p=2902"},"modified":"2022-10-17T12:00:33","modified_gmt":"2022-10-17T11:00:33","slug":"pm2-para-gestionar-y-monitorizar-procesos-node-js-en-produccion","status":"publish","type":"post","link":"https:\/\/www.jmarior.net\/itank\/pm2-para-gestionar-y-monitorizar-procesos-node-js-en-produccion\/","title":{"rendered":"PM2 para gestionar y monitorizar procesos Node.js en producci\u00f3n"},"content":{"rendered":"<p><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.jmarior.net\/itank\/files\/pm2-logo.jpg\" alt=\"\" width=\"795\" height=\"119\" class=\"aligncenter size-full wp-image-2903\" srcset=\"https:\/\/www.jmarior.net\/itank\/files\/pm2-logo.jpg 795w, https:\/\/www.jmarior.net\/itank\/files\/pm2-logo-400x60.jpg 400w, https:\/\/www.jmarior.net\/itank\/files\/pm2-logo-768x115.jpg 768w\" sizes=\"auto, (max-width: 795px) 100vw, 795px\" \/><br \/>\nAunque arrancar una aplicaci\u00f3n Javascript en el entorno Node.js sea tan sencillo como ejecutar el comando:<\/p>\n<p><code>$\u00a0\/usr\/bin\/node \/path\/myProject.js<\/code><\/p>\n<p>esto no nos protege de las ca\u00eddas derivadas de excepciones de ejecuci\u00f3n ni que el programa se ejecute como un servicio automaticamente al inicio del sistema.<\/p>\n<p><a href=\"https:\/\/pm2.keymetrics.io\/\">PM2 (Advanced, production process manager for Node.JS)<\/a> es un demonio que mantiene nuestros programas Node.js en ejecuci\u00f3n aunque una excepci\u00f3n lo interrumpa y que los ejecuta como servicios que se mentienen operativos tras el reinicio del sistema.<\/p>\n<p>Para instalar pm2 usaremos:<\/p>\n<p><code>$ npm install pm2 -g<\/code><\/p>\n<p>A partir de aqu\u00ed podemos arrancar nuestra aplicaci\u00f3n usando PM2 en lugar de ped\u00edrselo a Node<\/p>\n<p><code>$ pm2 start ruta\/proyecto.js<\/code><\/p>\n<p>lo que la incluir\u00e1 en la lista de aplicaciones activas:<\/p>\n<p>$ pm2 list<img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-2906\" src=\"https:\/\/www.jmarior.net\/itank\/files\/pm2-list.jpg\" alt=\"\" width=\"877\" height=\"102\" srcset=\"https:\/\/www.jmarior.net\/itank\/files\/pm2-list.jpg 877w, https:\/\/www.jmarior.net\/itank\/files\/pm2-list-400x47.jpg 400w, https:\/\/www.jmarior.net\/itank\/files\/pm2-list-800x93.jpg 800w, https:\/\/www.jmarior.net\/itank\/files\/pm2-list-768x89.jpg 768w\" sizes=\"auto, (max-width: 877px) 100vw, 877px\" \/><\/p>\n<p>y la mantendr\u00e1 viva aunque realizacemos un kill.<\/p>\n<p>Para reiniciar o detener aplicaciones:<\/p>\n<p><code>$ pm2 restart ruta\/proyecto.js<br \/>\n$ pm2 stop ruta\/proyecto.js<\/code><\/p>\n<p>Para monitorizar procesos desde la consola:<\/p>\n<p><code>$ pm2 monit<\/code><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-2905\" src=\"https:\/\/www.jmarior.net\/itank\/files\/mp2-monit.jpg\" alt=\"\" width=\"831\" height=\"518\" srcset=\"https:\/\/www.jmarior.net\/itank\/files\/mp2-monit.jpg 831w, https:\/\/www.jmarior.net\/itank\/files\/mp2-monit-400x249.jpg 400w, https:\/\/www.jmarior.net\/itank\/files\/mp2-monit-800x499.jpg 800w, https:\/\/www.jmarior.net\/itank\/files\/mp2-monit-768x479.jpg 768w\" sizes=\"auto, (max-width: 831px) 100vw, 831px\" \/><\/p>\n<p>Para desinstalarla<br \/>\n<code>$ pm2 delete<\/code><\/p>\n<p>Para hacer seguimiento de los logs de aplicaci\u00f3n con el monitor:<\/p>\n<p><code>$ pm2 log<\/code><\/p>\n<p>Una vez tengamos nuestros procesos de producci\u00f3n en funcionamiento, debemos generar el script de inicio del sistema con la orden:<br \/>\n<code>$ pm2 startup<\/code><\/p>\n<p>Lo que nos pedir\u00e1 que ejecutemos un comando personalizado a nuestro entorno:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.jmarior.net\/itank\/files\/mp2-startup.jpg\" alt=\"\" width=\"1038\" height=\"82\" class=\"aligncenter size-full wp-image-2908\" srcset=\"https:\/\/www.jmarior.net\/itank\/files\/mp2-startup.jpg 1038w, https:\/\/www.jmarior.net\/itank\/files\/mp2-startup-400x32.jpg 400w, https:\/\/www.jmarior.net\/itank\/files\/mp2-startup-800x63.jpg 800w, https:\/\/www.jmarior.net\/itank\/files\/mp2-startup-768x61.jpg 768w\" sizes=\"auto, (max-width: 1038px) 100vw, 1038px\" \/><\/p>\n<p>Y a partir de ah\u00ed tendremos nuestros procesos Node ejecut\u00e1ndose al inicio del sistema<\/p>\n<p>Ahora viene la magia: <strong>monitorizar tus procesos node en tiempo real a trav\u00e9s de la web<\/strong> desde cualquier lugar. Primero activamos la monitorizaci\u00f3n:<\/p>\n<p><code>$ pm2 plus<\/code><\/p>\n<p>lo que nos proporcionar\u00e1 una URL de acceso al panel de control web:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.jmarior.net\/itank\/files\/pm2-plus-web-monitor.jpg\" alt=\"\" width=\"1274\" height=\"1288\" class=\"aligncenter size-full wp-image-2912\" srcset=\"https:\/\/www.jmarior.net\/itank\/files\/pm2-plus-web-monitor.jpg 1274w, https:\/\/www.jmarior.net\/itank\/files\/pm2-plus-web-monitor-400x404.jpg 400w, https:\/\/www.jmarior.net\/itank\/files\/pm2-plus-web-monitor-800x809.jpg 800w, https:\/\/www.jmarior.net\/itank\/files\/pm2-plus-web-monitor-768x776.jpg 768w\" sizes=\"auto, (max-width: 1274px) 100vw, 1274px\" \/><\/p>\n<p>La opci\u00f3n gratu\u00edta permite monitorizaci\u00f3n b\u00e1sica de hasta 4 procesos. La opci\u00f3n de suscripci\u00f3n por 39$\/mes a\u00f1ade notificaciones, dashboards, m\u00e9tricas, hist\u00f3rico de problemas, logging en tiempo real y acciones remotas de hasta 8 procesos.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.jmarior.net\/itank\/files\/pm2-plus-options.jpg\" alt=\"\" width=\"293\" height=\"1022\" class=\"aligncenter size-full wp-image-2917\" \/><\/p>\n<p>Por \u00faltimo, para desenlazar el servidor de la monitorizaci\u00f3n web us\u00e9:<\/p>\n<p><code>$ pm2 link delete<\/code><\/p>\n<p>Me puso sobre la pista <a href=\"https:\/\/desarrolloweb.com\">https:\/\/desarrolloweb.com\/articulos\/ejecutar-aplicacion-nodejs-pm2.html<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Aunque arrancar una aplicaci\u00f3n Javascript en el entorno Node.js sea tan sencillo como ejecutar el comando: $\u00a0\/usr\/bin\/node \/path\/myProject.js esto no nos protege de las ca\u00eddas derivadas de excepciones de ejecuci\u00f3n ni que el programa se ejecute como un servicio automaticamente al inicio del sistema. PM2 (Advanced, production process manager for Node.JS) es un demonio que [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":2912,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[5],"tags":[141,2018,2025],"class_list":["post-2902","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-itank-ideas","tag-javascript","tag-node-js","tag-pm2"],"views":277,"_links":{"self":[{"href":"https:\/\/www.jmarior.net\/itank\/wp-json\/wp\/v2\/posts\/2902","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.jmarior.net\/itank\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.jmarior.net\/itank\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.jmarior.net\/itank\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.jmarior.net\/itank\/wp-json\/wp\/v2\/comments?post=2902"}],"version-history":[{"count":0,"href":"https:\/\/www.jmarior.net\/itank\/wp-json\/wp\/v2\/posts\/2902\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.jmarior.net\/itank\/wp-json\/wp\/v2\/media\/2912"}],"wp:attachment":[{"href":"https:\/\/www.jmarior.net\/itank\/wp-json\/wp\/v2\/media?parent=2902"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.jmarior.net\/itank\/wp-json\/wp\/v2\/categories?post=2902"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.jmarior.net\/itank\/wp-json\/wp\/v2\/tags?post=2902"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}