Tenho uma instância do Discourse sendo proxy por trás do Apache e se comunicando via socket, conforme descrito aqui.
O SELinux está habilitado, então, para conceder permissão ao httpd de usar o socket, atribuí ao socket um contexto em que o httpd tem permissão de leitura e gravação, conforme recomendado:
semanage fcontext -a -t httpd_sys_rw_content_t /var/discourse/shared/standalone/nginx.http.sock
restorecon /var/discourse/shared/standalone/nginx.http.sock
Isso funciona. É ótimo!
(Ponto lateral: seria um contexto mais apropriado httpd_var_run_t, já que o socket em si não é conteúdo e este é o contexto usado pelo httpd para outras infraestruturas de tempo de execução?)
No entanto, sempre que o contêiner do Discourse é reiniciado, o arquivo de socket é recriado com seu contexto original, e não o novo — por isso preciso executar restorecon nele antes que o Apache possa se comunicar com o Discourse. É fácil esquecer de fazer isso e acabar com um fórum inacessível. Pensei em usar um script do cron para executar restorecon periodicamente, para não ter que lembrar de fazer manualmente, mas isso é um hack feio.
Como posso garantir que o arquivo de socket receba o contexto correto ao ser criado (ou, pelo menos, que seu contexto seja redefinido como parte do processo de criação)?