tutorial socket servidor proyecto produccion nodejs node example crear node.js service deployment daemon

socket - ¿Cómo ejecuto una aplicación Node.js como su propio proceso?



npm (16)

¿Cuál es la mejor forma de implementar Node.js?

Tengo un Dreamhost VPS (así es como lo llaman una VM ), y he podido instalar Node.js y configurar un proxy. Esto funciona muy bien siempre que mantenga la conexión SSH que comencé con el nodo abierto.


Aquí hay un artículo más extenso sobre cómo resolver este problema con systemd: http://savanne.be/articles/deploying-node-js-with-systemd/

Algunas cosas para tener en mente:

  • ¿Quién comenzará su monitoreo de proceso? Forever es una gran herramienta, pero necesita una herramienta de monitoreo para mantenerse en funcionamiento. Eso es un poco tonto, ¿por qué no usar tu sistema init?
  • ¿Puedes controlar adecuadamente tus procesos?
  • ¿Estás ejecutando múltiples backends? De ser así, ¿tiene disposiciones para evitar que alguna de ellas disminuya a las demás en términos de uso de recursos?
  • ¿El servicio será necesario todo el tiempo? Si no, considere la activación del socket (ver el artículo).

Todas estas cosas se hacen fácilmente con systemd.


Como dijo Box9, Forever es una buena opción para el código de producción. Pero también es posible mantener un proceso en marcha incluso si la conexión SSH está cerrada desde el cliente.

Aunque no es necesariamente una buena idea para la producción, es muy útil cuando se realizan sesiones de depuración largas, o para seguir la salida de la consola de procesos largos, o siempre que sea útil desconectar su conexión SSH, pero mantener la terminal activa en el servidor para reconectarse más tarde (como iniciar la aplicación Node.js en casa y volver a conectarse a la consola más tarde en el trabajo para comprobar cómo van las cosas).

Suponiendo que su servidor es un cuadro * nix, puede utilizar el comando de screen desde el shell para mantener el proceso en ejecución incluso si el cliente SSH está cerrado. Puede descargar / instalar la pantalla de la web si aún no está instalado (busque un paquete para su distribución si es Linux, o use MacPorts si es OS X).

Funciona de la siguiente manera:

  1. Cuando abra por primera vez la conexión SSH, escriba ''pantalla'' - esto iniciará su sesión de pantalla.
  2. Comience a trabajar normalmente (es decir, inicie su aplicación Node.js)
  3. Cuando termine, cierre su terminal. Su (s) proceso (s) de servidor continuarán ejecutándose.
  4. Para volver a conectarse a su consola, vuelva al servidor, inicie sesión e ingrese ''screen -r'' para volver a conectar. El contexto de la consola anterior volverá a estar listo para que pueda volver a usarlo.
  5. Para salir de la pantalla, mientras está conectado al servidor, escriba ''exit'' en el indicador de la consola, que lo llevará al shell normal.

Si es necesario, puede tener varias sesiones de pantalla simultáneas como esta, y puede conectarse a cualquiera de ellas desde cualquier cliente. Lea la documentación en línea para todas las opciones.



Forever es una buena opción para mantener las aplicaciones en ejecución (y es npm instalable como un módulo que es bueno).

Pero para una "implementación" más seria -como la administración remota de la implementación, reinicio, ejecución de comandos, etc.- utilizaría capistrano con la extensión del nodo.

https://github.com/loopj/capistrano-node-deploy


He escrito sobre mi método de implementación aquí: Implementar aplicaciones node.js

En breve:

  • Utilice el gancho git post-receive
  • Jake para la herramienta de compilación
  • Upstart como envoltorio de servicio para el nodo
  • Monit para monitorear y reiniciar aplicaciones que bajan
  • nginx para enrutar solicitudes a diferentes aplicaciones en el mismo servidor


Hice un script Upstart actualmente utilizado para mis aplicaciones:

description "YOUR APP NAME" author "Capy - http://ecapy.com" env LOG_FILE=/var/log/node/miapp.log env APP_DIR=/var/node/miapp env APP=app.js env PID_NAME=miapp.pid env USER=www-data env GROUP=www-data env POST_START_MESSAGE_TO_LOG="miapp HAS BEEN STARTED." env NODE_BIN=/usr/local/bin/node env PID_PATH=/var/opt/node/run env SERVER_ENV="production" ###################################################### start on runlevel [2345] stop on runlevel [016] respawn respawn limit 99 5 pre-start script mkdir -p $PID_PATH mkdir -p /var/log/node end script script export NODE_ENV=$SERVER_ENV exec start-stop-daemon --start --chuid $USER:$GROUP --make-pidfile --pidfile $PID_PATH/$PID_NAME --chdir $APP_DIR --exec $NODE_BIN -- $APP >> $LOG_FILE 2>&1 end script post-start script echo $POST_START_MESSAGE_TO_LOG >> $LOG_FILE end script

Personalice todo antes de #########, cree un archivo en /etc/init/your-service.conf y péguelo allí.

Entonces tú puedes:

start your-service stop your-service restart your-service status your-service


Pruebe node-deploy-server . Es un conjunto de herramientas complejo para implementar una aplicación en sus servidores privados. Está escrito en Node.js y usa npm para la instalación.



Puede usar monit , forever , upstart o systemd para iniciar su servidor.

Puede utilizar Varnish o HAProxy en lugar de Nginx (se sabe que Nginx no funciona con websockets).

Como una solución rápida y sucia, puede usar nohup node your_app.js & evitar que su aplicación finalice con su servidor, pero forever , monit y otras soluciones propuestas son mejores.


Si tiene acceso de administrador, sería mejor configurar un daemon para que funcione de manera segura en segundo plano. Puede leer cómo hacer eso para Debian y Ubuntu en la publicación de blog Run Node.js as a Service en Ubuntu .


Use para Forever Ejecuta programas Node.js en procesos separados y los reinicia si alguno muere.

Uso:

  • forever start example.js para iniciar un proceso.
  • forever list para forever list para ver la lista de todos los procesos iniciados por siempre
  • forever stop example.js para detener el proceso, o forever stop 0 para detener el proceso con el índice 0 (como se muestra por la forever list ).

pm2 hace los trucos.

Las características son: Monitoreo, recarga de código caliente, equilibrador de carga integrado, script de inicio automático y procesos de resucitación / volcado.


https://paastor.com es un servicio relativamente nuevo que realiza la implementación para usted, para un VPS u otro servidor. Hay una CLI para impulsar el código. Paastor tiene un nivel gratuito, al menos lo hizo en el momento de publicarlo.


Forever hará el truco.

@Kevin: Deberías poder matar procesos bien. Verificaría un poco la documentación un poco. Si puedes reproducir el error, sería genial publicarlo como un problema en GitHub.


Respuesta de 2016 : casi todas las distribuciones de Linux vienen con systemd, lo que significa que para siempre, monit, etc. ya no son necesarias; su sistema operativo ya maneja estas tareas .

Cree un archivo myapp.service (reemplazando ''myapp'' con el nombre de su aplicación, obviamente):

[Unit] Description=My app [Service] ExecStart=/var/www/myapp/app.js Restart=always User=nobody # Note RHEL/Fedora uses ''nobody'', Debian/Ubuntu uses ''nogroup'' Group=nobody Environment=PATH=/usr/bin:/usr/local/bin Environment=NODE_ENV=production WorkingDirectory=/var/www/myapp [Install] WantedBy=multi-user.target

Tenga en cuenta que si es nuevo en Unix: /var/www/myapp/app.js debería tener #!/usr/bin/env node en la primera línea.

Copie su archivo de servicio en la carpeta /etc/systemd/system .

Informe a systemd sobre el nuevo servicio con systemctl daemon-reload .

Comience con systemctl start myapp .

Habilítelo para que se ejecute al arrancar con systemctl enable myapp .

Ver registros con journalctl -u myapp

Más detalles en: Cómo implementamos aplicaciones de nodo en Linux, edición 2018