与Apache不同的Php-Fpm容器

时间:2017-03-28 13:47:10

标签: php apache docker fpm

我的生产服务器正在运行具有经典结构的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

由于

1 个答案:

答案 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语句的有用信息

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