Un equipo y yo hemos tenido la tarea de crear una aplicación que pueda recibir directorios de proyectos de node.js y debería ser capaz de activar estos proyectos (a través npm start ). Una vez que los proyectos se ponen en marcha, queremos poder alcanzar los puntos finales en estos proyectos con solicitudes AXIOS. La estructura con la que hemos optado hasta ahora es de 3 contenedores docker.
| Client Docker Container | --> | Server Docker Container | --> | SpinUp Docker Container |
El ciclo de vida es que cuando un cliente envía un directorio al servidor, el contenedor acoplable SpinUp debe tomar este directorio e intentar ejecutar npm start desde dentro. Investigué y parece que los volúmenes de la ventana acoplable serán la forma en que Server & SpinUp comunicarán los archivos entre ellos (o los compartirán, con mayor precisión).
El problema es cómo debemos usar este contenedor SpinUp, ya que solo estará esperando el envío al servidor desde el cliente antes de hacer algo, ¿debemos tener el contenedor allí vivo pero dormido () todo el tiempo, o debería no se pondrá en marcha hasta que se reciba una presentación? Esto abre otra lata de gusanos, creando dinámicamente un contenedor docker durante el tiempo de ejecución.
Nuestro primer pensamiento fue ejecutar los proyectos de nodo dentro del contenedor del servidor con la biblioteca child_process() , pero están sucediendo muchas cosas dentro de ese contenedor del servidor y sobrecargarlo no estaba funcionando bien.
Entonces, solo como una descripción general del proceso de la aplicación:
i) el usuario envía un directorio (o un zip de uno) de un proyecto node.js (piense en una aplicación express realmente básica, con 2 puntos finales url/get & url/post
ii) Una vez enviado, este proyecto node.js debe activarse mediante npm start (o un comando similar) dentro del contenedor de la ventana acoplable SpinUp.
iii) Luego queremos poder enviar solicitudes HTTP a este proyecto para ver las respuestas.
iv) Luego, debemos eliminar el proyecto (esto fue muy bueno en child_process() , y no estoy seguro de si debemos seguir ese enfoque en el contenedor SpinUp o simplemente eliminar el contenedor en sí)
Cualquier pensamiento o punto en una dirección sería increíble.
¡Gracias!