【问题标题】:Different Php-Fpm containers with ApacheApache 的不同 Php-Fpm 容器
【发布时间】:2017-08-21 15:10:27
【问题描述】:

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

谢谢

【问题讨论】:

  • 如果您担心性能,为什么不测量呢?如果您追求性能,为什么要使用 Apache 和 Docker?为什么将所有 3 项服务都放在同一个物理盒子上?过早的优化..你知道其余的。既然您有两种选择,为什么不简单地衡量并确定哪一种最适合您?
  • 我试图排除无用的解决方案。我也在考虑从 Apache 切换到 Nginx。

标签: php apache docker fpm


【解决方案1】:

在 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 的示例:Multiple versions of AMP in One Host,其中示例中docker-compose.yml 包含此公开语句:

  expose:      
   - "3306"   

- 使 sql 数据库可用于其他 docker 容器。

您还需要确保 php 文件对 php 和 apache 容器都可用 - 信用: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(默认虚拟主机)(在可用站点中) - 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 指令示例:

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-23
    相关资源
    最近更新 更多