我一直在研究 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/
大约一年前,我决定确保每个包含非唯一文本的Flash通知都将从模块中的方法中获取文本。我这样做的最初原因是为了避免一遍又一遍地输入相同的字符串。如果我想更改措辞,我可以在一个地方轻松完成,而且一遍又一遍地重复同一件事而出现拼写错误的可能性也会降低。我最终得到的是这样的:moduleMessagesdefformat_error_messages(errors)errors.map{|attribute,message|"Error:#{attribute.to_s.titleize}#{message}."}enddeferror_message_could_not_find(obje
我已经在Sinatra上创建了应用程序,它代表了一个简单的API。我想在生产和开发上进行部署。我想在部署时选择,是开发还是生产,一些方法的逻辑应该改变,这取决于部署类型。是否有任何想法,如何完成以及解决此问题的一些示例。例子:我有代码get'/api/test'doreturn"Itisdev"end但是在部署到生产环境之后我想在运行/api/test之后看到ItisPROD如何实现? 最佳答案 根据SinatraDocumentation:EnvironmentscanbesetthroughtheRACK_ENVenvironm
在Ruby中可以使用哪些替代方法来ping一个ip地址?标准库“ping”库的功能似乎非常有限。我对在这里滚动我自己的代码不感兴趣。有没有好的gem?我应该接受它并忍受它吗?(我在Linux上使用Ruby1.8.6编写代码) 最佳答案 net-ping值得一看。它允许TCPping(如标准rubyping),但也允许UDP、HTTP和ICMPping。ICMPping需要root权限,但其他则不需要。 关于ruby-Pingruby网站?,我们在StackOverflow上找到一个类
当我使用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
1.错误信息:Errorresponsefromdaemon:Gethttps://registry-1.docker.io/v2/:net/http:requestcanceledwhilewaitingforconnection(Client.Timeoutexceededwhileawaitingheaders)或者:Errorresponsefromdaemon:Gethttps://registry-1.docker.io/v2/:net/http:TLShandshaketimeout2.报错原因:docker使用的镜像网址默认为国外,下载容易超时,需要修改成国内镜像地址(首先阿里
我正在使用带有Rails的Devise,我想添加一个方法“getAllComments”,所以我这样写:classUser在我的Controller中:defdashboard@user=current_user@comments=@user.getAllComments();end当我访问我的url时,我得到了undefinedmethod`getAllComments'for#我做错了什么?谢谢 最佳答案 因为getAllComments是一个类方法,而您正试图将其作为实例方法访问。您要么需要访问它:User.getAllCom
我正在使用Rails3.2.3和Ruby1.9.3p0。我发现我经常需要确定某个字符串是否出现在选项列表中。看来我可以使用Ruby数组.includemethod:或正则表达式equals-tildematchshorthand用竖线分隔选项:就性能而言,一个比另一个好吗?还有更好的方法吗? 最佳答案 总结:Array#include?包含String元素,在接受和拒绝输入时均胜出,对于您的示例只有三个可接受的值。对于要检查的更大的集合,看起来Set#include?和String元素可能会获胜。如何测试我们应该根据经验对此进行测试
我是一名决定学习Ruby和RubyonRails的ASP.NETMVC开发人员。我已经有所了解并在RoR上创建了一个网站。在ASP.NETMVC上开发,我一直使用三层架构:数据层、业务层和UI(或表示)层。尝试在RubyonRails应用程序中使用这种方法,我发现没有关于它的信息(或者也许我只是找不到它?)。也许有人可以建议我如何在RubyonRails上创建或使用三层架构?附言我使用ruby1.9.3和RubyonRails3.2.3。 最佳答案 我建议在制作RoR应用程序时遵循RubyonRails(RoR)风格。Rails
Ruby初学者努力简单地将这个@@people散列的值打印到控制台classPerson#haveafirst_nameandlast_nameattributewithpublicaccessorsattr_accessor:first_nameattr_accessor:last_name#haveaclassattributecalled`people`thatholdsanarrayofobjects@@people=[]#havean`initialize`methodtoinitializeeachinstancedefinitialize(first_name,last_
这个问题在这里已经有了答案:关闭10年前。PossibleDuplicate:AmazonAPIlibraryforPython?我正在寻找一个AmazonAPI,它可以让我:按书名或作者查找书籍显示书籍封面获取有关每本书的信息(价格、评级、评论数、格式、页数等)Python或Ruby库都可以(我只想要最容易使用的库)。有什么建议么?我知道在SO上还有其他一些关于此的帖子,但这些API似乎很快就过时了。[几个月前我尝试了几个建议的Ruby库,但无法让它们中的任何一个工作。]