对于上下文:我使用带有 Apache 2.4、PHP 7.2 和许多其他东西的 Debian 或 Ubuntu 服务器,为开发人员和技术人员在工作中使用设置开发和测试环境。
我已经按照海量虚拟主机教程使用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?),以便使用足够的用户来执行与每个虚拟主机相对应的 Web 服务器/PHP 进程。这意味着例如:项目/var/www/foo1
在用户下运行foo1
,并且无权访问/var/www/foo2
.当然,我希望调整权限和 ACL 来适应这一点。
但我找不到任何有关如何设置单独用户的文档留在身边大规模虚拟主机的自动化。我认为这必须存在——毕竟托管公司会做这样的事情。但我研究了很多东西,似乎没有什么可以提供有效的替代方案。
最多,我被引导到 apache2-mod-itk,但是一旦安装,网络服务器无论如何都将始终无法启动,即使将大多数conf文件默认为默认配置也是如此,所以它不是一个选项。
我正在寻找的是具有类似于此 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 或虚拟机,除非有一种类似 Mass_vhosts 的简单方法来自动化设置;这将需要更多的输入(更不用说给予技术人员 root(?) 运行和安装 docker 容器的权限),并且还会破坏正在进行的自动化(如何动态地将子域连接到容器?)。