Tengo una instancia de Discourse proxyada detrás de Apache y comunicándose a través de un socket, como se describe aquí.
Tengo SELinux habilitado, por lo que, para otorgar a httpd permiso para usar el socket, he asignado al socket un contexto donde httpd tiene permiso de lectura y escritura, según se aconseja:
semanage fcontext -a -t httpd_sys_rw_content_t /var/discourse/shared/standalone/nginx.http.sock
restorecon /var/discourse/shared/standalone/nginx.http.sock
Esto funciona. ¡Es genial!
(Aparte: ¿Sería un contexto más apropiado httpd_var_run_t, ya que el socket en sí no es contenido y este es el contexto que httpd utiliza para otra infraestructura de tiempo de ejecución?)
Sin embargo, cada vez que se reinicia el contenedor de Discourse, el archivo del socket se recrea con su contexto original, no con el nuevo; por lo tanto, debo ejecutar restorecon en él antes de que Apache pueda comunicarse con Discourse. Es fácil olvidarse de hacerlo y terminar con un foro inaccesible. Se me ocurrió que podría usar un script de cron para ejecutar restorecon periódicamente para no tener que recordarlo manualmente, pero eso es un parche feo.
¿Cómo puedo asegurarme de que el archivo del socket obtenga el contexto correcto al crearse (o al menos que su contexto se restablezca como parte del proceso de creación)?