Actualmente estamos desarrollando un sitio web (TYPO3 en Apache) para un cliente que es compatible con una aplicación node.js/socket.io que proporciona actualizaciones en tiempo real para el contenido servido desde el CMS.Configuración de Node.js para fácil implementación y actualización
Como este es nuestro primer proyecto node.js, no tengo ninguna de las mejores prácticas para realizar cuando se trata de "la configuración perfecta", así que he dedicado un tiempo a investigar las técnicas de implementación.
Un par de preguntas siguen siendo para mí para conseguir una buena puesta a punto, que:
es fácil para el cliente para desplegar. Esto es muy importante porque nuestro sitio web se integrará en su instalación "en vivo" de TYPO3 que sirve a una gran cantidad de sitios web y se ejecuta en servidores que no son administrados por el cliente sino otra organización (centralizada) que hace que las llamadas de soporte y el servidor cambien Proceso lento.
Debería ser fácil de actualizar. Como se mencionó, la solicitud de reinicios y la realización de cambios en el servidor es un proceso lento, por lo que la instalación del nodo debería reiniciarse/actualizarse cuando recibe cambios que se envían a la instalación activa usando
git
.
despliegue
El general consensus parece ser el uso de forever
cuando se trata de la implementación de aplicaciones de nodo para que sigan funcionando. Probé forever
, y parece funcionar bien cuando se instala por npm install forever -g
(global). Sin embargo, esto requeriría asistencia externa para la instalación global en el entorno en vivo, por lo que preferiría tenerlo ejecutándose desde el directorio node_modules
de la aplicación, pero no he podido crear un contenedor sólido para hacerlo.
Además, forever
funciona bien, pero debe iniciarse manualmente. ¿Cuál sería el mejor enfoque para garantizar que se inicie en el arranque del servidor y siga funcionando?
- Un simple
init.d
script? - Escribiendo un contenedor de perro guardián?
- ¿Una tarea del programador TYPO3 que comprueba el estado
forever
?
El rápido desarrollo/reinicio en la actualización
Actualmente estamos todavía en la etapa de desarrollo del proyecto y cada vez que realice cambios en la aplicación Node.js reinicio manualmente node
o forever
. Esto funciona, pero está lejos de ser ideal. Hay varios pequeños módulos npm
que comprueban las modificaciones del archivo y reinicie node
de los cambios detectados, como:
- Nodemon
- Node.js Supervisor
- Bounce
- Nodules (que no requiere reiniciar el nodo, por lo podría ser más fácil de combinar con
forever
) - Up
¿Alguien tiene experiencia con alguno de estos?
Actualización: ¿Por qué no utiliza Cluster?
El Cluster module proporciona una funcionalidad similar a través del mecanismo reload, pero doesn't work with Node 0.5+. El core Cluster module (Node 0.6+) que lo reemplazó no tiene todas estas características, pero solo proporciona clustering. Que a su vez doesn't play well with socket.io. Al menos not without using Redis (que es un problema para nosotros, porque no podemos forzar otro servicio previo al cliente).
-
Obviamente, yo estoy tratando de encontrar la solución más estable que combina una actualización-restarter con forever
antes de entregar el proyecto al cliente y realmente espero que nadie ha producido una combinación probada de técnicas.
y para cualquier otra persona pensando en Racimo: no se ha actualizado en los últimos tres años. – oligofren