Cómo hago funcionar un Nodo.aplicación js como su propio proceso?


Cuál es la mejor manera de desplegar el nodo.js?

Tengo un Dreamhost VPS (eso es lo que llaman un VM), y he podido instalar Node.js y configurar un proxy. Esto funciona muy bien siempre y cuando mantenga abierta la conexión SSH con la que inicié el nodo.

Author: Peter Mortensen, 2011-01-13

16 answers

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

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

[Unit]
Description=My app

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

[Install]
WantedBy=multi-user.target

Nota si eres nuevo en Unix: /var/www/myapp/app.js debe tener #!/usr/bin/env node en la primera línea.

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

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

Comience con systemctl start myapp.

Habilite que se ejecute en el arranque con systemctl enable myapp.

Ver los registros con journalctl -u myapp

Esto se toma de Cómo implementamos aplicaciones de nodo en Linux, edición 2018, que también incluye comandos para generar un AWS / DigitalOcean / Azure CloudConfig para construir servidores Linux / node (incluido el archivo .service).

 90
Author: mikemaccana,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-08-12 16:10:09

Use Para siempre. Ejecuta Node.js programa en procesos separados y los reinicia si alguno muere.

Uso:

  • forever start example.js para iniciar un proceso.
  • forever list para ver la lista de todos los procesos iniciados por forever
  • forever stop example.js para detener el proceso, o forever stop 0 para detener el proceso con índice 0 (como se muestra en forever list).
 100
Author: David Tang,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-04-26 18:27:53

He escrito sobre mi método de implementación aquí: Nodo de implementación.js apps

En breve:

  • Use git post-receive hook
  • Jake para la herramienta de compilación
  • Upstart como contenedor de servicio para node
  • Monit para monitorear y reiniciar las aplicaciones se bajan
  • nginx para enrutar solicitudes a diferentes aplicaciones en el mismo servidor
 41
Author: Ben,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-05-04 17:56:41

Pm2 hace los trucos.

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

 13
Author: nickleefly,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-05-04 19:21:07

Puede utilizar monit, forever, upstart o systemd para iniciar el servidor.

Puede usar 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 & para evitar que su aplicación termine con su servidor, pero forever, monit y otras soluciones propuestas son mejores.

 9
Author: nponeccop,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-09-10 08:59:17

Hice un script advenedizo utilizado actualmente 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

Personalizar todo antes #########, cree un archivo en /etc/init / your-service.conf y pégalo ahí.

Entonces puedes:

start your-service
stop your-service
restart your-service
status your-service
 7
Author: Capy,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-04-24 17:54:27

He escrito una guía bastante completa para implementar el nodo.js, con archivos de ejemplo:

Tutorial: Cómo Implementar Nodo.Aplicaciones js, Con Ejemplos

Cubre cosas como http-proxy, SSL y Socket.IO .

 6
Author: Rich Jones,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-05-04 17:59:17

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

Algunas cosas a tener en cuenta:

  • ¿Quién iniciará el monitoreo de su 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 su sistema de inicio?
  • ¿Puede monitorear adecuadamente sus procesos?
  • ¿Está ejecutando varios backends? Si es así, ¿tiene provisiones en el lugar para evitar que cualquiera de ellos de derribar a los demás en términos de uso de recursos?
  • ¿Será necesario el servicio todo el tiempo? Si no, considere la activación de sockets (vea el artículo).

Todas estas cosas se hacen fácilmente con systemd.

 5
Author: Ruben Vermeersch,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-01-22 06:41:45

Si tiene acceso root, sería mejor configurar un demonio para que se ejecute sano y salvo en segundo plano. Puede leer cómo hacer exactamente eso para Debian y Ubuntu en la publicación del blog Ejecutar Nodo.js como servicio en Ubuntu.

 5
Author: Seldaek,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-04-26 18:26:41

para Siempre hará el truco.

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

 3
Author: Marak,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-04-26 18:29:13

Prueba esto: http://www.technology-ebay.de/the-teams/mobile-de/blog/deploying-node-applications-with-capistrano-github-nginx-and-upstart.html

Una guía excelente y detallada para implementar el nodo.aplicaciones js con Capistrano, Advenedizo y Nginx

 2
Author: Pono,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-11-08 10:17:25

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.

Si bien no es necesariamente una buena idea para la producción, esto es muy útil cuando está en medio de largas sesiones de depuración, o para seguir la salida de la consola de procesos largos, o cuando es útil desconectar su conexión SSH, pero mantener el terminal vivo en el servidor para volver a conectarse más tarde (como iniciar nodo.aplicación js en casa y volver a conectar a la consola más tarde en el trabajo para comprobar cómo van las cosas).

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

Funciona como siguiente:

  1. La primera vez que abra la conexión SSH, escriba 'screen' - esto iniciará su sesión de pantalla.
  2. Comience a trabajar de forma normal (es decir, inicie su nodo.js application)
  3. Cuando haya terminado, cierre su terminal. Su proceso de servidor(es) seguirá funcionando.
  4. Para volver a conectarse a su consola, ssh de vuelta al servidor, inicie sesión e ingrese 'screen-r' para volver a conectarse. El contexto de la consola antigua volverá a aparecer listo para que reanude su uso.
  5. Para salir pantalla, mientras está conectado al servidor, escriba 'exit' en el símbolo del sistema de la consola, que lo dejará caer en el shell normal.

Puede tener varias sesiones de pantalla ejecutándose simultáneamente de esta manera si lo necesita, y puede conectarse a cualquiera de ellas desde cualquier cliente. Lea la documentación en línea para todas las opciones.

 2
Author: cjcela,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-05-04 19:19:28

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

Pero para 'deployment' más serio things cosas como administración remota de deployment, reinicio, ejecución de comandos, etc I usaría capistrano con la extensión de nodo.

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

 1
Author: martyman,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-02-14 02:28:18

Https://paastor.com es un servicio relativamente nuevo que hace la implementación por usted, a un VPS u otro servidor. Hay un CLI para insertar el código. Paastor tiene un nivel gratuito, al menos lo tenía en el momento de publicar esto.

 1
Author: ruffrey,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-09-21 04:13:02

En su caso puede usar el demonio upstart. Para una solución de implementación completa, puedo sugerir capistrano . Dos guías útiles son Cómo configurar el Nodo.js env y Cómo implementar a través de capistrano + upstart.

 1
Author: Anatoliy,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-04-26 18:31:14

Intente node-deploy-server. Es un conjunto de herramientas complejas para implementar una aplicación en sus servidores privados. Está escrito en Nodo.js y utiliza npm para la instalación.

 1
Author: AndyGrom,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-05-04 19:22:20