Para contextualizar: estou usando um servidor Debian ou Ubuntu com Apache 2.4, PHP 7.2 e uma série de outras coisas, para configurar um ambiente de desenvolvimento e teste para desenvolvedores e técnicos usarem no trabalho.
Eu segui otutorial sobre host virtual em massausando mod_vhost_alias
para que eu possa obter coisas assim:
path: /var/www/{projectname}/public
url: {projectname}.dev.mycompany.net
A configuração relevante é a seguinte (editada adequadamente)
VirtualDocumentRoot /var/www/%-4/public
ServerName dev.mycompany.net
ServerAlias *.dev.mycompany.net
UseCanonicalName Off
Agora, tudo isso está funcionando corretamente e os desenvolvedores podem facilmente iniciar seus próprios projetos solicitando um usuário; o usuário é criado e adicionado ao www-data
grupo e então as pastas adequadas são criadas em /var/www com uma estrutura como esta:
projectname:projectname rwxrwxr-x /var/www/projectname
www-data:www-data rwxrwsr-x /var/www/projectname/public
setfacl -m user:www-data:rwx /var/www/projectname
setfacl -R -m user:projectname:rwx /var/www/projectname/public
(o último era necessário para que os arquivos criados, por exemplo: estruturas instaladas ou descompactadores, pudessem realmente ser manipulados pelo servidor web)
É claro que isso tem a desvantagem de qualquer projeto poder incluir coisas em qualquer outro projeto, então quero trabalhar nisso. No entanto, eu quero, sempre que possível,mantera automação, já que os desenvolvedores e técnicos devem ser capazes de iniciar projetos com o mínimo possível de informações do backend sobre o assunto ("Distrair o backend fica para depois", disse o chefe).
Agora, para tornar as coisas seguras, mas ainda tentando mantê-las simples, o que eu quero é configurar o Apache (ou PHP?) Para que o usuário adequado seja usado para executar o processo webserver/PHP correspondente a cada host virtual. Isso significa que, por exemplo: o projeto /var/www/foo1
é executado sob o usuário foo1
e não tem acesso aos arquivos sob /var/www/foo2
. É claro que espero adaptar as permissões e a ACL para isso.
Mas não consigo encontrar nenhuma documentação sobre como configurar usuários separados enquantomantendo-se por pertoa automação para host virtual em massa. Presumo que isso deva existir - afinal, as empresas de hospedagem fariam coisas assim. Mas pesquisei várias coisas e nada parece oferecer uma alternativa que funcione.
No máximo, fui orientado para o apache2-mod-itk, mas uma vez instalado, o servidor web sempre falhará ao iniciar, não importa o que aconteça, mesmo quando padronizar a maioria dos arquivos conf para a configuração padrão, então não é uma opção.
O que estou procurando é algo que tenha um efeito semelhante a este "pseudocódigo" de configuração do Apache:
<Virtualhost *:443>
VirtualDocumentRoot /var/www/%-4/public
ServerName dev.mycompany.net
ServerAlias *.dev.mycompany.net
UseCanonicalName Off
User %-4
Group %-4
SuexecUserGroup %-4
CustomLog /var/www/%-4/logs/access.log vcommon
[...other directives]
</Virtualhost>
Existe algo assim disponível no Apache/+PHP ou devo procurar outro tipo de solução automatizada?
Observe que eunãoquero acabar separando tudo em, por exemplo: um docker ou VM para cada usuário, a menos que haja uma maneira semelhante a mass_vhosts de automatizar a configuração; isso exigiria ainda mais informações (sem mencionar dar permissão root (?) aos técnicos para executar e instalar contêineres docker) e também interromper a automação em andamento (como você conecta os subdomínios aos contêineres dinamicamente?).