我的生产服务器正在运行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
谢谢
发布于 2018-06-16 07:53:23
在配置文件或vhosts文件中使用docker-compose expose和FastCgiExternalServer
(请注意,这是我将采取的方法,并且仍在研究中。当我知道更多的时候我会更新的。但希望它也能给你一个做什么的大纲。我确实更新了我的答案,而不是一个空洞的承诺,请参阅此处的示例:Getting a LAMP stack running on a Vagrant VM (under windows 7 host), full instructions?)
Install 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语句:
expose:
- "3306"
使sql数据库可供其他码头容器使用的
您还需要确保php文件对php和apache容器都可用- CREDIT:https://stackoverflow.com/a/40449377/227926。
然后,需要从vhosts文件或FastCgiExternalServer
文件中的Apache FastCgiExternalServer
指令引用相同的expose:
端口和服务名称。选择vhosts文件或conf文件来放置指令,我认为这似乎是个人偏好,尽管研究可能会发现其中之一更适合您的情况的差异。
conf文件中的示例如下所示:
FastCgiExternalServer /usr/lib/cgi-bin/php5-fcgi -host 127.0.0.1:9000 -pass-header Authorization
我应该把它放到哪个conf文件中?
答:有几个选项(如上所述),更详细地说,这些是(假设运行Apache的操作系统是Ubunut/Debian Linux ):- httpd.conf - 000-default.conf (默认vhost) (在sites-available中)- yoursite.conf (在sites-available中)-和(例如)/etc/apache2/conf-available/php5.6fpm.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语句的有用相关信息
关于一起运行独立容器的类似讨论
https://stackoverflow.com/questions/43071337
复制相似问题