我的生产服务器正在运行具有经典结构的Docker Db-Container,Server-Container和Php-Fpm容器。
我想要做的是拆分源,以便为项目的3个主要部分提供不同的容器。现在,他们使用mydomain.com/index作为主站点的旧方式,mydomain.com / api和mydomain.com/adm用于其他服务。
我如何设置Apache虚拟主机以映射这样的请求?
mydomain.com -> fcgi://siteFpm:9000
mydomain.com/api -> fcgi://apiFpm:9000
mydomain.com/cms -> fcgi://cmsFpm:9000
由于
答案 0 :(得分:0)
在conf文件或vhosts文件中使用docker-compose expose和FastCgiExternalServer
(注意这是我将采取的一种方法,我仍在研究。我会更新,因为我知道更多。但它应该会给你一个大概做什么。我会更新我的答案,而不是空洞的承诺,请参见此示例:Getting a LAMP stack running on a Vagrant VM (under windows 7 host), full instructions?)
安装docker-compose,它使用docker-compose.yml
文件提供批处理/自动运行docker容器的官方标准化方法,而不是使用命令行docker
命令启动每个单独命令。
在docker-compose.yml
文件中,定义您的php-fpm服务,例如:
服务:
使用EXPOSE
关键字语句/指令将php-fpm的端口提供给apache。
本文中显示了expose
的一个示例:Multiple versions of AMP in One Host示例docker-compose.yml
中包含此公开语句:
expose:
- "3306"
- 这使得sql数据库可供其他docker容器使用。
您还需要确保php和apache容器都可以使用php文件 - CREDIT:https://stackoverflow.com/a/40449377/227926
然后,需要从vhosts文件或conf文件中的Apache expose:
指令引用相同的FastCgiExternalServer
端口以及服务名称。我认为,选择一个vhosts文件或conf文件来指令,这似乎是个人偏好,尽管研究可能会发现其中一个或另一个更适合你的环境的差异。
conf文件中的示例如下所示:
FastCgiExternalServer /usr/lib/cgi-bin/php5-fcgi -host 127.0.0.1:9000 -pass-header Authorization
我应该把它放在什么conf文件中?
答案:有几个选项(如上所示),稍微详细一些(假设Ubunut / Debian Linux是Apache运行的操作系统): - httpd.conf - 000-default.conf(默认vhost)(在站点可用) - yoursite.conf(在站点中可用) - 和(例如)/etc/apache2/conf-available/php5.6-fpm.conf
这些conf文件位于何处?
答案:在你的apache docker容器里面。一旦定义了服务,就需要使用docker-compose.yml文件将描述的设置添加(注入)到容器中。您可以从docket-compose.yml执行标准的linux命令,将文本插入到配置文件中。
您应该自动添加这些设置,而不是手动编辑容器内的Apache配置文件,因为:1)自动化意味着设置是可重复的,因此可以用于开发工作流程中的不同平台:dev ,qa,uat,live / prod 2)不需要手工操作3)Docker容器是短暂的,因为它们可以被破坏和重建。任何持久性数据都应保存在它们之外 - 在主机中 - (在Dockerfiles中配置,docker-composer文件,资产(图像)在单独的文件夹中,数据库存储在容器外部以及主机上。
FastCgiExternalServer指令的示例:
对conf文件和Apache的Debian / Ubuntu约定的引用
关于PHP-FPM的讨论 - https://serverfault.com/questions/645755/differences-and-dis-advanages-between-fast-cgi-cgi-mod-php-suphp-php-fpm
有关docker-file.yml语句的有用信息
关于一起运行单独容器的类似讨论