Ejecutar una aplicación Raku Cro como un servicio persistente

11

Me gustaría ejecutar una aplicación perl6 / raku Cro como un servicio detrás de un servidor web frontend.

Solo ejecutar cro runno manejará el reinicio después de segfaults y reinicios.

Anteriormente con perl5 he usado FastCGI; sin embargo Cro::HTTP::Server, el Cro::HTTP::Server.new().start()idioma no parece compatible con el while $fcgi.accept() {}ejemplo de FastCGI :: Native .

El service.p6generado por cro stubtiene un SIGINTcontrolador, sin embargo, no estoy seguro de si esto es suficiente para señalarlo en un systemctlservicio, es decir

[Service]
ExecStart = /path/to/service.p6

¿Cómo están alojando actualmente las aplicaciones Cro?

artista de fuego
fuente

Respuestas:

12

cro run está pensado como una herramienta de desarrollo, no como una implementación, por lo que no es una buena opción para alojar los servicios.

Todos los servicios de Cro que cuido directamente están en contenedores ( alguna orientación sobre eso aquí ) y luego se ejecutan en un clúster Kubernetes alojado. Kubernetes se encarga de los reinicios automáticos, el lanzamiento de nuevas versiones, etc. También estoy al tanto de que docker-composese usa en lugar de Kubernetes, lo que supongo que funciona, aunque creo que eso también se considera principalmente como una herramienta de desarrollo.

Configurarlo como un systemctlservicio también debería funcionar bien, siempre que esté configurado para reiniciarse siempre. Sin embargo, parece que querría manejarSIGTERM el apagado limpio para que funcione en lugar de SIGINT(nada de malo en manejar ambos).

También coloco un servidor web frontend delante de Cro (usando Apache, aunque nginx también sería una buena opción), y también lo uso para almacenar en caché el contenido estático también (usar content-controlen mis rutas para describir la capacidad de almacenamiento).

Jonathan Worthington
fuente