[英]Different Php-Fpm containers with Apache
我的生产服务器正在运行具有经典结构Db-Container,Server-Container和Php-Fpm容器的Docker。
我想做的是拆分源,以便为项目的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
谢谢
在conf文件或vhosts文件中使用docker-compose暴露和FastCgiExternalServer
(请注意,这是我将要采用并且仍在研究中的一种方法。随着我所知,我将进行更新。但是它也应该给您概述该怎么做。此处的示例: 获取在Vagrant VM(在Windows 7主机下)上运行的LAMP堆栈,是否有完整说明? )
安装搬运工,撰写它提供了一个正式的标准化的方法来批量/自动化您泊坞窗容器运行,使用docker-compose.yml
文件,而不是使用命令行docker
命令单独启动每个命令。
在docker-compose.yml
文件中,定义您的php-fpm服务,例如:
服务:
使用EXPOSE
关键字语句/指令使php-fpm的端口可用于apache。
本文显示了expose
的示例: 一台主机中的多个版本的AMP,其中示例docker-compose.yml
包含以下暴露语句:
expose:
- "3306"
-使sql数据库可用于其他docker容器。
您还需要确保php和apache容器都可以使用php文件-CREDIT: https : //stackoverflow.com/a/40449377/227926
然后,将需要从vhosts文件或conf文件中的Apache FastCgiExternalServer
伪指令中引用相同的expose:
端口以及服务名称。 我认为,选择一个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语句的有用的相关信息
一起运行单独容器的类似讨论
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.