¿Cuál es la mejor manera de implementar Node.js?
Tengo un Dreamhost VPS (eso es lo que llaman una VM ), y he podido instalar Node.js y configurar un proxy. Esto funciona muy bien siempre que mantenga abierta la conexión SSH con la que comencé el nodo.
node.js
service
deployment
daemon
respectTheCode
fuente
fuente
Respuestas:
Respuesta de 2016 : casi todas las distribuciones de Linux vienen con systemd, lo que significa que para siempre, monit, PM2, etc. ya no son necesarias: su sistema operativo ya maneja estas tareas .
Cree un
myapp.service
archivo (reemplazando 'myapp' con el nombre de su aplicación, obviamente):Tenga en cuenta 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
/etc/systemd/system
carpeta.Informe a systemd sobre el nuevo servicio con
systemctl daemon-reload
.Comenzar con
systemctl start myapp
.Permitir que se ejecute en el arranque con
systemctl enable myapp
.Ver 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 / nodo (incluido el
.service
archivo).fuente
Failed to issue method call: Unit name ... is not valid.
?/etc/systemd/system
es posible que deba ejecutarlosystemctl daemon-reload
(systemd normalmente le dirá si es necesario). TBH esto se hace mejor como una pregunta separada./etc/systemd/system
, puede usarlosystemctl enable /full/path/to/myapp.service
, lo que crea un enlace simbólico/etc/systemd/system
para usted.node
se llama/var/www/myapp/app.js
solo. En Unix, si hace que un archivo sea ejecutable y la primera línea que comienza con#!/some/file
el archivo se interpretará con ese binario. Google 'intérprete Unix' para saber más.Usar para siempre . Ejecuta los programas Node.js en procesos separados y los reinicia si alguno muere.
Uso:
forever start example.js
para iniciar un procesoforever list
para ver la lista de todos los procesos iniciados por foreverforever stop example.js
para detener el proceso, oforever stop 0
para detener el proceso con el índice 0 (como se muestra enforever list
).fuente
forever stop 0
tuvo un error y las cosas se desmoronaron a partir de ahí. He estado tratando de hacer esto sin root en su propio usuario para poder limpiarlo fácilmente una vez que encuentre la solución correcta. Ese puede ser mi problema. Lo investigaré un poco más.He escrito sobre mi método de implementación aquí: Implementar aplicaciones node.js
En breve:
fuente
pm2 hace los trucos.
Las características son: Monitoreo, recarga de código activo, equilibrador de carga incorporado, secuencia de comandos de inicio automático y procesos de resucitación / volcado.
fuente
Se puede utilizar
monit
,forever
,upstart
osystemd
para iniciar su servidor.Puede usar Varnish o HAProxy en lugar de Nginx (se sabe que Nginx no funciona con websockets).
Como solución rápida y sucia, puede usar
nohup node your_app.js &
para evitar que su aplicación termine con su servidor, peroforever
,monit
y otras soluciones propuestas son mejores.fuente
Hice un script de Upstart actualmente utilizado para mis aplicaciones:
Personalice todo antes de #########, cree un archivo en /etc/init/your-service.conf y péguelo allí.
Entonces tú puedes:
fuente
He escrito una guía bastante completa para implementar Node.js, con archivos de ejemplo:
Tutorial: Cómo implementar aplicaciones Node.js, con ejemplos
Cubre cosas como http-proxy, SSL y Socket.IO .
fuente
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 para tener en mente:
Todas estas cosas se hacen fácilmente con systemd.
fuente
Si tiene acceso root, será mejor que configure un demonio para que se ejecute sano y salvo en segundo plano. Puede leer cómo hacer eso para Debian y Ubuntu en la publicación de blog Ejecutar Node.js como servicio en Ubuntu .
fuente
Por siempre hará el truco.
@Kevin: Deberías poder matar los procesos bien. Verificaría un poco la documentación un poco. Si puede reproducir el error, sería genial publicarlo como un problema en GitHub.
fuente
Pruebe 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 aplicaciones Node.js con Capistrano, Upstart y Nginx
fuente
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 se realizan largas sesiones de depuración, o para seguir la salida de la consola de largos procesos, o cuando sea útil para desconectar su conexión SSH, pero mantener el terminal vivo en el servidor para volver a conectarse 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 verificar cómo van las cosas).
Suponiendo que su servidor es un cuadro * nix, puede usar el comando de pantalla del shell para mantener el proceso en ejecución incluso si el cliente SSH está cerrado. Puede descargar / instalar la pantalla desde la web si aún no está instalado (busque un paquete para su distribución en Linux, o use MacPorts en OS X).
Funciona de la siguiente manera:
Puede tener múltiples 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.
fuente
nohup
yforever
Forever es una buena opción para mantener las aplicaciones en funcionamiento (y es npm instalable como un módulo, lo cual es bueno).
Pero para una 'implementación' más seria, como la administración remota de la implementación, el reinicio, la ejecución de comandos, etc., usaría capistrano con la extensión de nodo.
https://github.com/loopj/capistrano-node-deploy
fuente
https://paastor.com es un servicio relativamente nuevo que se implementa en un VPS u otro servidor. Hay una CLI para insertar código. Paastor tiene un nivel gratuito, al menos lo tenía al momento de publicar esto.
fuente
En su caso, puede usar el demonio advenedizo . Para una solución de implementación completa, puedo sugerir capistrano . Dos guías útiles son Cómo configurar Node.js env y Cómo implementar a través de capistrano + upstart .
fuente
Prueba 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.
fuente