草庐IT

php - 用于托管 PHP 网站的 Docker 架构

coder 2024-04-08 原文

我一直在研究 Docker 以及如何以“Docker 方式”在一台服务器上托管多个网站。据我所知,理想情况下,一切都应该运行自己的容器,并且不应共享这些容器。

我的问题是下面的概述是否是一个有效的容器设置,请求进入单个反向代理,该反向代理将请求中继到底层网络服务器以处理实际请求。

此外,在下面的三种情况下,我详细介绍了包含应用程序源文件的不同方法,并且想知道这三种情况中哪一种最常见/最好使用。

我的愿望是能够在 Docker 中的单个服务器上运行不同的网站。如图中不同的 PHP-FPM 版本所示,网站可能有不同的要求。网站本身的部署对我来说有点不清楚,因为我不确定我是应该将源文件包含在 nginx/PHP-FPM 中还是单独部署。

我目前的设置如下:

docker-compose.yml

version: '2'
services:
    nginx:
        image: nginx:alpine
        restart: always
        ports:
            - '80:80'
        links:
            - example_com
            - example_org
            - example_net
        volumes:
            - ./nginx/conf.d/default.conf:/etc/nginx/conf.d/default.conf:ro

    example_com:
        image: php:7.0-fpm-alpine
        restart: always
        volumes:
            - ./sites/example_com:/var/www/example_com:ro

    example_org:
        image: php:7.0-fpm-alpine
        restart: always
        volumes:
            - ./sites/example_org:/var/www/example_org:ro

    example_net:
        image: php:7.0-fpm-alpine
        restart: always
        volumes:
            - ./sites/example_net:/var/www/example_net

nginx/conf.d/default.conf

server {
    listen       80;
    server_name  www.example.com example.com;

    location ~ \.php$ {
        fastcgi_pass   example_com:9000;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  /var/www/example_com$fastcgi_script_name;
        include        fastcgi_params;
    }
}

server {
    listen       80;
    server_name  www.example.org example.org;

    location ~ \.php$ {
        fastcgi_pass   example_org:9000;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  /var/www/example_org$fastcgi_script_name;
        include        fastcgi_params;
    }
}

server {
    listen       80;
    server_name  www.example.net example.net;

    location ~ \.php$ {
        fastcgi_pass   example_net:9000;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  /var/www/example_net$fastcgi_script_name;
        include        fastcgi_params;
    }
}

这与上面的概述不同,但概述中的情况对我来说似乎是理想情况。

如何使用反向代理和不同的 PHP-FPM 容器进行设置,以及如何部署我的网站及其后续更新?

如有任何意见,我们将不胜感激!

最佳答案

我认为连接到主nginx服务器的三个nginx服务器是没有必要的。 php-fpm 进程监听套接字,因此您可以直接从主 nginx 服务器连接到每个 php-fpm 进程

关于php - 用于托管 PHP 网站的 Docker 架构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39966739/

有关php - 用于托管 PHP 网站的 Docker 架构的更多相关文章

  1. ruby-on-rails - Rails 常用字符串(用于通知和错误信息等) - 2

    大约一年前,我决定确保每个包含非唯一文本的Flash通知都将从模块中的方法中获取文本。我这样做的最初原因是为了避免一遍又一遍地输入相同的字符串。如果我想更改措辞,我可以在一个地方轻松完成,而且一遍又一遍地重复同一件事而出现拼写错误的可能性也会降低。我最终得到的是这样的:moduleMessagesdefformat_error_messages(errors)errors.map{|attribute,message|"Error:#{attribute.to_s.titleize}#{message}."}enddeferror_message_could_not_find(obje

  2. Ruby Sinatra 配置用于生产和开发 - 2

    我已经在Sinatra上创建了应用程序,它代表了一个简单的API。我想在生产和开发上进行部署。我想在部署时选择,是开发还是生产,一些方法的逻辑应该改变,这取决于部署类型。是否有任何想法,如何完成以及解决此问题的一些示例。例子:我有代码get'/api/test'doreturn"Itisdev"end但是在部署到生产环境之后我想在运行/api/test之后看到ItisPROD如何实现? 最佳答案 根据SinatraDocumentation:EnvironmentscanbesetthroughtheRACK_ENVenvironm

  3. ruby - Ping ruby 网站? - 2

    在Ruby中可以使用哪些替代方法来ping一个ip地址?标准库“ping”库的功能似乎非常有限。我对在这里滚动我自己的代码不感兴趣。有没有好的gem?我应该接受它并忍受它吗?(我在Linux上使用Ruby1.8.6编写代码) 最佳答案 net-ping值得一看。它允许TCPping(如标准ruby​​ping),但也允许UDP、HTTP和ICMPping。ICMPping需要root权限,但其他则不需要。 关于ruby-Pingruby网站?,我们在StackOverflow上找到一个类

  4. ruby - inverse_of 是否适用于 has_many? - 2

    当我使用has_one时,它​​工作得很好,但在has_many上却不行。在这里您可以看到object_id不同,因为它运行了另一个SQL来再次获取它。ruby-1.9.2-p290:001>e=Employee.create(name:'rafael',active:false)ruby-1.9.2-p290:002>b=Badge.create(number:1,employee:e)ruby-1.9.2-p290:003>a=Address.create(street:"123MarketSt",city:"SanDiego",employee:e)ruby-1.9.2-p290

  5. Get https://registry-1.docker.io/v2/: net/http: request canceled while waiting - 2

    1.错误信息:Errorresponsefromdaemon:Gethttps://registry-1.docker.io/v2/:net/http:requestcanceledwhilewaitingforconnection(Client.Timeoutexceededwhileawaitingheaders)或者:Errorresponsefromdaemon:Gethttps://registry-1.docker.io/v2/:net/http:TLShandshaketimeout2.报错原因:docker使用的镜像网址默认为国外,下载容易超时,需要修改成国内镜像地址(首先阿里

  6. ruby - "undefined method"用于 rails 模型 - 2

    我正在使用带有Rails的Devise,我想添加一个方法“getAllComments”,所以我这样写:classUser在我的Controller中:defdashboard@user=current_user@comments=@user.getAllComments();end当我访问我的url时,我得到了undefinedmethod`getAllComments'for#我做错了什么?谢谢 最佳答案 因为getAllComments是一个类方法,而您正试图将其作为实例方法访问。您要么需要访问它:User.getAllCom

  7. Ruby on Rails regexp equals-tilde 与 array include 用于检查选项列表 - 2

    我正在使用Rails3.2.3和Ruby1.9.3p0。我发现我经常需要确定某个字符串是否出现在选项列表中。看来我可以使用Ruby数组.includemethod:或正则表达式equals-tildematchshorthand用竖线分隔选项:就性能而言,一个比另一个好吗?还有更好的方法吗? 最佳答案 总结:Array#include?包含String元素,在接受和拒绝输入时均胜出,对于您的示例只有三个可接受的值。对于要检查的更大的集合,看起来Set#include?和String元素可能会获胜。如何测试我们应该根据经验对此进行测试

  8. ruby - Ruby 和 Ruby on Rails 中的三层架构 - 2

    我是一名决定学习Ruby和RubyonRails的ASP.NETMVC开发人员。我已经有所了解并在RoR上创建了一个网站。在ASP.NETMVC上开发,我一直使用三层架构:数据层、业务层和UI(或表示)层。尝试在RubyonRails应用程序中使用这种方法,我发现没有关于它的信息(或者也许我只是找不到它?)。也许有人可以建议我如何在RubyonRails上创建或使用三层架构?附言我使用ruby​​1.9.3和RubyonRails3.2.3。 最佳答案 我建议在制作RoR应用程序时遵循RubyonRails(RoR)风格。Rails

  9. ruby-on-rails - Ruby "Undefined Method"用于类方法 - 2

    Ruby初学者努力简单地将这个@@people散列的值打印到控制台classPerson#haveafirst_nameandlast_nameattributewithpublicaccessorsattr_accessor:first_nameattr_accessor:last_name#haveaclassattributecalled`people`thatholdsanarrayofobjects@@people=[]#havean`initialize`methodtoinitializeeachinstancedefinitialize(first_name,last_

  10. python - 用于 Python 或 Ruby 的 Amazon Book API? - 2

    这个问题在这里已经有了答案:关闭10年前。PossibleDuplicate:AmazonAPIlibraryforPython?我正在寻找一个AmazonAPI,它可以让我:按书名或作者查找书籍显示书籍封面获取有关每本书的信息(价格、评级、评论数、格式、页数等)Python或Ruby库都可以(我只想要最容易使用的库)。有什么建议么?我知道在SO上还有其他一些关于此的帖子,但这些API似乎很快就过时了。[几个月前我尝试了几个建议的Ruby库,但无法让它们中的任何一个工作。]

随机推荐