php - 用于各种 vhost 配置的通用 docker 映像
问题描述
我正在寻找一种将我的 php web 应用程序部署到基于 Ubuntu 18.04 和 Apache 2.4 的本地 docker 容器的良好做法。
根据应用程序的类型,它的基本文件是myapp/public/index.php
(Laravel) 或只是myapp/index.php
(plain vanilla php)。当然,我可以将应用程序安装到/var/www/html/myapp
任何其他位置。
选项 1(固定 /etc/hosts、apache2.conf 和 vhosts):
对于每个应用程序,添加
127.0.0.1 myapp
到我的本地/etc/hosts
文件,以便它重定向到 docker 容器。在我的
/etc/apache2/apache2.conf
文件中,将文档根目录设置为/var/www/html
对于每个 Web 应用程序,在
/etc/apache2/sites-available
优点:
http://myapp_1
我可以通过使用诸如等 的 url 在本地访问我的应用程序http://myapp_2
。我可以
http://myapp_1
指点/var/www/myapp_1/public
。以后我可以在我的生产环境(没有 docker)中或多或少地使用这个配置而无需修改。
缺点:
apache 配置被硬编码到 docker 镜像中。每当我添加、删除或重命名应用程序时,我都必须调整并重新构建 docker 映像。
团队合作非常麻烦,因为每个人都可能在不同的应用程序子集上工作,这些应用程序必须在他/她的 docker 镜像中。
选项 2(使用 .htaccess):
在
/etc/apache2/apache2.conf
并且/etc/apache2/sites-available
仅定义 Web 根目录:/var/www/html
将应用挂载为 Web 根目录的子目录:
/var/www/html/myapp_1
.htaccess
在相应的文件夹中使用myapp
来配置应用程序。它们应该可以在http://localhost/myapp_1
等处访问。
优点:
无需为新应用调整 docker 镜像。
本地
/etc/hosts
文件没有变化。
缺点:
我不知道是否(以及如何)
.htaccess
可以配置,以便可以像<VirtualHost>
配置一样使用所有路径都正常工作(例如css)。apache 配置与生产环境有很大不同。
我的问题
将两种方法的优点结合起来的良好做法是什么?你会选择哪个选项?有没有我没有提到的另一种选择?