当前位置: 首页 > 知识库问答 >
问题:

使用Apache的不同Php Fpm容器

公良泰宁
2023-03-14

我的正式服正在运行具有经典结构Db-Container、Server-Container和Php-Fpm容器的Docker。

我想做的是将来源分开,以便为项目的三个主要部分提供不同的容器。现在他们以旧的方式工作,比如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个答案

池永长
2023-03-14

在conf文件或vhosts文件中使用docker compose expose和FastCgiExternalServer

(请注意,这是我将采取并仍在研究的一种方法。我将根据我了解的更多信息进行更新。但希望它也能为您提供一个操作大纲。我会更新我的答案,而不是空洞的promise,请参见下面的示例:在漫游虚拟机(windows 7主机下)上运行灯堆栈,完整说明?)

安装docker compose,它使用docker compose提供了一种正式的标准化方法来批量/自动运行docker容器。yml文件,而不是使用命令行docker命令分别启动每个命令。

docker-compose.yml文件中,定义php-fpm服务,例如:

服务:

使用EXPOSE关键字语句/指令将php fpm的端口提供给apache。

本文展示了一个expose的示例:一台主机中的多个AMP版本,其中示例docker组合。yml包含以下公开语句:

  expose:      
   - "3306"   

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

您还需要确保php文件对php和apache容器都可用-CREDIT:https://stackoverflow.com/a/40449377/227926

然后,相同的公开:端口,以及服务名称将需要从vhost文件或conf文件中的ApacheFastCgiExtranalServer指令中引用。我认为,选择vhost文件或conf文件来放入指令似乎是个人偏好,尽管研究可能会揭示其中一个更适合您的情况的差异。

conf文件中的示例如下所示:

FastCgiExternalServer /usr/lib/cgi-bin/php5-fcgi -host 127.0.0.1:9000 -pass-header Authorization

我应该把这个放在什么conf文件中?

回答:有几个选项(如上所述),更详细地说,这些选项是(假设Ubunut/DebianLinux是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、,现场/生产2)无需人工操作3)Docker容器是短暂的,因为它们可以被销毁和重新创建。任何持久性数据都应该保存在它们之外—在主机中—(docker文件中的配置、docker composer文件、单独文件夹中的资产(图像)、容器外部和主机上的数据库存储。

FastCgiExternalServer指令示例:

  • Apache 2.4 PHP-FPM和授权标头
  • 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
  • Apache FastCGI PHP中FastCgiExternalServer和FastCgiServer之间的区别
  • Apache 2.4。6在Ubuntu服务器上:客户端被服务器配置(PHP FPM)拒绝[加载PHP文件时]
  • 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/#-使-phpfpm-use-a-tcp-connection-可选

关于conf文件和Apache的Debian/Ubuntu约定的参考

  • https://serverfault.com/questions/216252/how-to-configure-apache-sites-available-vs-httpd-conf

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

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

  • docker comment中图像和构建之间的区别
  • https://docs.docker.com/compose/compose-file/#build

关于将不同容器一起运行的类似讨论

  • https://medium.com/docker-captain/multiple-versions-of-amp-in-one-host-6e107c836cd8
  • php docker链接apache docker
  • 多Docker容器与PHP7 fpm和nginx
  • Docker-在不同网站的主机和容器上运行Apache
  • 将nginx和php-fpm容器链接在一起,以便在docker prod中进行快速交互
  • 如何正确链接php-fpm和Nginx Docker容器?
 类似资料:
  • 我有这样Apache Cxf maven插件配置: 我基本上有两个问题,也许有人可以回答:

  • -我发现shiftRows函数存在一个导致excel中断的错误。https://bz.apache.org/bugzilla/show_bug.cgi?id=57423我不确定这是否已经修复。我已经在bugzilla上添加了一个评论来进一步了解这一点。 如果满足特定的单元格值条件,我正尝试从excel文件中删除行(而不是删除的内容)。 我成功地实现了这一点,但问题是它破坏了我的excel并且当我重

  • 我想使用Docker,以便能够运行一个需要PHP5.3的旧应用程序,同时在我的主机服务器上还有我的其他网站,在主机Apache上运行。 所以我有一个网站。com,siteB。com,siteC。com运行在主机上,使用主机Apache/PHP/MySQL服务器,我有siteZ。com,安装在Docker容器中,该容器应使用容器的Apache/PHP,而不是主机MySQL服务器。 这是我想获得的架构

  • 我现在有一个列表的sql server 的数据库表,然后有一个用户提交的数据库表,想要实现的话就是,用户提交完毕后给第一张表的一个字段变为true,就是不同用户看到的列表字段不一样,只有提交表单后的用户,他的列表特定字段才会变为true,用户未提交就为false 想要实现的话就是,用户提交完毕后给第一张表的一个字段变为true,就是不同用户看到的列表字段不一样,只有提交表单后的用户,他的列表特定字

  • 我一直在使用ApacheOpenNLP进行一些功能测试,它具有句子检测、标记化和名称实体识别的功能。现在,当我开始查看UIMA文档时,它出现在UIMA主页——“语言识别”上= 这表明我可以使用UIMA完成与OpenNLP相同的任务。两者都有什么附加功能?我是这个领域的新手,请帮助我了解两者的用途和功能视角。

  • 我想用不同的命令启动已停止的Docker容器,因为默认命令崩溃——这意味着我不能启动容器,然后使用“docker exec”。 基本上,我想开始一个外壳,这样我就可以检查容器的内容。 幸运的是,我用-it选项创建了这个容器!