2012-03-05 10 views
14

¿Existe una buena forma de ejecutar y administrar varias aplicaciones nodejs en un solo servidor?Ejecución y administración de aplicaciones nodejs en un único servidor

He estado mirando haibu y nodester, pero parecen un poco complejos para lo que estoy tratando de hacer.

También estaba buscando en forever y creo que puede funcionar con el archivo de configuración y la interfaz web, pero no estoy seguro de cómo voy a manejar pasar la información del puerto a través de ENV o argumentos.

+0

No estoy del todo seguro de lo que el alcance de sus proyectos son, pero ¿sería una opción para utilizar los archivos de configuración de sitio por la aplicación? Puede especificar puertos para cada aplicación en un archivo "siteConfig.js" e importarlo en su archivo de servidor, que es una forma de organizar cosas (consulte https://github.com/mape/node-express-boilerplate). Eso podría manejar la parte del puerto, pero no necesariamente le daría una solución de administración para todas las aplicaciones. –

+0

Déjeme explicar mi flujo de trabajo. En nuestro servidor ejecutamos Apache y voy a configurar un proxy inverso para cada aplicación de nodo que desarrollemos. Por ahora, estas son aplicaciones de poco tráfico, por lo que quiero ejecutarlas en el mismo servidor. –

Respuesta

6

utilizo Supervisord & Monit, más detalles y ejemplo de configuración aquí: Process Management at Bringr.

Además, puede especificar la variable de entorno directamente desde el archivo de configuración supervisord (consulte sub-process environment). Pero personalmente prefiero agregar estas variables directamente dentro de ~/.bashrc en cada máquina.

Si el número de puerto no va a cambiar para cada aplicación (pero cambie entre el entorno de desarrollo de producción &). Recomiendo especificarlos dentro de un config.json (o directamente dentro de package.json). Y el config.json contendrá un número de puerto diferente para cada aplicación en función de la Environnement:

{ 
myapp:{ 
    production:{port:8080}, 
    development:{port:3000} 
} 
} 

y dentro myapp.js:

var config = require('./config'); 
app.listen(config.myapp[process.env.NODE_ENV].port) 

Con process.env.NODE_ENV declarado en ~/.bashrc.

+0

Gracias por escribir esa publicación de blog, es muy detallada. Entonces, ¿administraría puertos en la configuración de supervisión? [Program: myapp] command = node myapp.js 3000, [program: myapp2] command = node myapp.js 3001, etc.? –

+0

Respuesta editada, espero que responda a su pregunta. Personalmente prefiero mantener el archivo de configuración de supervisión tan pequeño como sea posible y mantener los bits/env cambiantes. variables en los archivos de configuración * .json. – FGRibreau

1

Si su servidor está advenedizo, simplemente úselo. No tengo suerte con forever y similar. Si desea proceder con advenedizo, roco estaría bien como solución de implementación:

roco deploy:setup:upstart 
roco deploy 
+0

Ah, ¿en el guión roco solo definiría todos los puertos? –

+0

Sí, describa todo lo que necesita: al menos nombre de puerto y servidor. – Anatoliy

1

Estamos constantemente tratando de mejorar forever y haibu en Nodejitsu. Parece que el enfoque que está buscando aquí es un archivo de configuración .forever para opciones complejas. Esta característica ha sido en nuestra cartera desde hace un tiempo

https://github.com/nodejitsu/forever/issues/124

comprobar de nuevo. Considero que es una prioridad muy alta después de la próxima ronda de mejoras de rendimiento.

+0

¡Es bueno saber que 'forever' sigue siendo compatible! El paquete 'npm' no se ha actualizado en un momento, a menos que lo haya omitido de alguna manera. ¡Gracias! – btleffler

+0

Gracias por esa entrada. Entonces, ¿sería óptimo crear un script de gestión que genere la configuración .forever en cada aplicación? –

3

Escribí una aplicación nodegod que uso para unas pocas implementaciones de quizás 10 aplicaciones cada una.

  • nodegod lee una lista de aplicaciones de JSON. Tiene una máquina de estado interno para cada aplicación que maneja el ciclo de vida de la aplicación de manera segura, incluidos los reinicios, y la página web cuenta con detener/iniciar/depurar.

  • La interfaz web utiliza sockets web para que pueda administrar servidores remotos en ssh.

  • Al implementar más de rsync, las aplicaciones se reinician automáticamente.

  • Dado que nodegod supervisa el stdout de otras aplicaciones, puede capturar el aliento final de una aplicación como segfault y errores malloc.

  • uso un tenedor de http-proxy delante de una serie de casos Express, por lo que cualquier número de aplicaciones pueden compartir un solo puerto del servidor por DNS para HTTP y sockets web.

me escribió un módulo haraldops leer la configuración de aplicaciones desde fuera del árbol de fuentes. Con eso puedes monitorear y recibir correos electrónicos cada vez que algo está pasando con una aplicación.

Configuraciones de la aplicación Guardo un repositorio git en el sistema de archivos.

No es ciencia de cohetes, y todo encaja muy bien. Sólo nodo y json: SIMPLE se hace más.

+0

Suena bien lo intentaré –

0

En estos días he comenzado a usar dokku que es un clon OSS de heroku. La implementación es tan simple como asegurarse de que package.json contenga un script de inicio. Por ejemplo:

"scripts": { 
    "start": "node index.js" 
} 

Sample App

Cuestiones relacionadas