Apache vhost_alias — как задать пользователя для виртуального хоста?

Apache vhost_alias — как задать пользователя для виртуального хоста?

Для контекста: я использую сервер Debian или Ubuntu с Apache 2.4, PHP 7.2 и рядом других вещей, чтобы настроить среду разработки и тестирования для разработчиков и технических специалистов, которые могут использовать ее на работе.

Я следил заучебник по массовому виртуальному хостуиспользуя mod_vhost_alias, чтобы я мог получить что-то вроде этого:

path: /var/www/{projectname}/public
url: {projectname}.dev.mycompany.net

Соответствующая конфигурация выглядит следующим образом (соответствующим образом отредактировано):

        VirtualDocumentRoot /var/www/%-4/public
        ServerName dev.mycompany.net
        ServerAlias *.dev.mycompany.net
        UseCanonicalName Off

Теперь все это работает правильно, и разработчики могут легко запустить свои собственные проекты, запросив пользователя; пользователь создается и добавляется в www-dataгруппу, а затем в /var/www создаются соответствующие папки со следующей структурой:

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 

(последнее было необходимо для того, чтобы файлы, созданные, например, установленными фреймворками или распаковщиками, могли фактически обрабатываться веб-сервером)

Конечно, это имеет тот недостаток, что любой проект может писать вещи в любой другой проект, поэтому я хочу работать над этим. Однако я хочу, где это возможно,держатьавтоматизация, поскольку разработчики и технические специалисты должны иметь возможность запускать проекты с минимальным участием бэкенда в этом вопросе («Отвлекающий бэкенд останется на потом», — сказал босс).

Теперь, чтобы сделать вещи безопасными, но при этом сохранить простоту, я хочу настроить Apache (или PHP?) так, чтобы соответствующий пользователь использовался для выполнения процесса веб-сервера / PHP, соответствующего каждому виртуальному хосту. Это означает, что, например: проект /var/www/foo1запускается под пользователем foo1и не имеет доступа к файлам под /var/www/foo2. Конечно, я ожидаю адаптировать разрешения и ACL к этому.

Но я не могу найти никакой документации о том, как настроить отдельных пользователей, покадержаться рядомавтоматизация для массового виртуального хоста. Я предполагаю, что это должно существовать — хостинговые компании в конце концов делают такие вещи. Но я рассмотрел множество вещей, и ничто не предлагает работающей альтернативы.

В лучшем случае мне посоветовали apache2-mod-itk, но после установки веб-сервер всегда отказывается запускаться, несмотря ни на что, даже если сбросить большинство файлов конфигурации до конфигурации по умолчанию, так что это не вариант.

Я ищу что-то, что имело бы эффект, аналогичный этому «псевдокоду» конфигурации 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>

Есть ли что-то подобное в Apache/+PHP или мне следует поискать другое автоматизированное решение?

Обратите внимание, что янехотите в конечном итоге разделить все это на, например, docker или VM для каждого пользователя, если только не существует простого способа автоматизации настройки, подобного mass_vhosts; это потребовало бы еще больше ввода (не говоря уже о предоставлении техническим специалистам прав root(?) для запуска и установки контейнеров docker), а также нарушило бы автоматизацию (как динамически подключать поддомены к контейнерам?).

Связанный контент