Apache使用不同的Php-Fpm容器

我的生产服务器以经典结构运行Docker
Db容器,服务器容器和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

谢谢

最佳答案
在conf文件或vhosts文件中使用docker-compose暴露和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.

本文显示了暴露的示例: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 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(默认虚拟主机)(在可用站点中)
-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指令的示例:

> Apache 2.4 + PHP-FPM and Authorization headers
> https://www.cyberciti.biz/tips/rhel-fedora-centos-apache2-external-php-spawn.html
> https://www.howtoforge.com/using-php5-fpm-with-apache2-on-centos-6.2-p2
> Difference between FastCgiExternalServer and FastCgiServer in Apache FastCGI PHP?
> Apache 2.4.6 on Ubuntu Server: Client denied by server configuration (PHP FPM) [While loading PHP file]
> https://www.digitalocean.com/community/questions/apache-2-4-with-php5-fpm?answer=12056
> https://www.howtoforge.com/tutorial/apache-with-php-fpm-on-ubuntu-16-04/#-making-phpfpm-use-a-tcp-connection-optional

对conf文件和Apache的Debian / Ubuntu约定的引用

> https://serverfault.com/questions/216252/how-to-configure-apache-sites-available-vs-httpd-conf
> https://forum.owncloud.org/viewtopic.php?t=30157
> https://askubuntu.com/questions/378734/how-to-configure-apache-to-run-php-as-fastcgi-on-ubuntu-12-04-via-terminal

关于PHP-FPM的讨论
 –https://serverfault.com/questions/645755/differences-and-dis-advanages-between-fast-cgi-cgi-mod-php-suphp-php-fpm

有关docker-file.yml语句的有用的相关信息

> Difference between ‘image’ and ‘build’ within docker compose
> https://docs.docker.com/compose/compose-file/#build

一起运行单独容器的类似讨论

> https://medium.com/docker-captain/multiple-versions-of-amp-in-one-host-6e107c836cd8
> php docker link apache docker
> Multi Docker container with PHP7 fpm and nginx
> Docker – Run Apache on host and container for different websites
> Linking nginx and php-fpm container together for fast interaction in docker prod
> How to correctly link php-fpm and Nginx Docker containers?

转载注明原文:Apache使用不同的Php-Fpm容器 - 代码日志