1

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

谢谢

4

1 回答 1

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 容器,使用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 文件 - 信用:https ://stackoverflow.com/a/40449377/227926

expose:然后,需要从FastCgiExternalServervhosts 文件或 conf 文件中的 Apache 指令引用相同的端口以及服务名称。我认为,选择一个 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 语句的有用相关信息

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

于 2018-06-15T23:53:23.390 回答