gpt4 book ai didi

php - 使用 docker 的多个 nginx/php 应用程序的体系结构

转载 作者:搜寻专家 更新时间:2023-10-31 21:53:17 25 4
gpt4 key购买 nike

我一直在直接在 vps 上的单个 nginx/php-fpm 安装上运行我的大部分应用程序。我决定试用 docker,并且已经玩了一个星期了。我已经阅读了所有可能的内容,并且相信我理解它的概念。

但我无法理解有这么多 nginx、php 和 db 实例。

我解决的一件事是我想要 1 db,所以这很容易:

mariadb:
image: mariadb:latest
container_name: mariadb
ports:
- "127.0.0.1:3306:3306"
restart: always
environment:
MYSQL_ROOT_PASSWORD: xxxxx
volumes:
- /srv/mysql:/var/lib/mysql

我还发现 nginx-proxy 和 nginx-certs 一起工作很有魅力:

nginx-proxy:
image: jwilder/nginx-proxy
container_name: nginx-proxy
ports:
- "80:80"
- "443:443"
restart: always
volumes:
- /srv/certs:/etc/nginx/certs:ro
- /var/run/docker.sock:/tmp/docker.sock:ro
- ./vhost.d:/etc/nginx/vhost.d
- /usr/share/nginx/html


nginx-certs:
image: jrcs/letsencrypt-nginx-proxy-companion
container_name: nginx-certs
volumes:
- /srv/certs:/etc/nginx/certs:rw
- /var/run/docker.sock:/var/run/docker.sock:ro
volumes_from:
- nginx-proxy

这都是花花公子。但是我该如何处理实际的应用程序容器呢?

我想将 ram 使用量保持在最低限度,因此建议:

  1. 1 个 php-fpm 容器,内部有多个卷和多个 nginx 服务器
  2. 1 个 nginx 服务器和多个 php-fpm 容器?
  3. 每个项目有 1 个容器,并将 nginx/php-fpm 放在该容器内
  4. X 个 nginx 容器 + X 个 php-fpm 容器。 X 数量的应用。

有什么想法吗?

最佳答案

您应该只需要每个主机 1 个 nginx 容器,并使用它在您的 php 容器之间进行负载平衡。如果你在 nginx 容器上正确设置了重启策略,它应该一直在运行,而且 nginx 可以处理很多负载,所以只有一个应该没问题。

当您拥有多个 nginx 时,管理起来也会变得更加困难,因为一次只能有一个容器绑定(bind)到端口 80 和 443,并且您需要在两个 nginx 容器之前放置一些东西来在它们之间进行负载平衡那种情况。如果您想要冗余,您可以添加另一台具有完全相同设置的主机,即主机之间的负载平衡。

1 db 容器和数据卷是好的。

至少 1 个 php 容器,最好不止一个,但取决于您的负载。如果您计划在运行时更改容器中的数据(php 文件)(不推荐),请确保使用卷,并在所有 php 容器之间共享。

在 php 容器之间进行 nginx 负载平衡,并确保正确设置 php 容器的重启策略。

如果您需要更新 php 容器镜像,如果您有多个容器镜像,那么您可以更轻松地进行滚动升级,而无需停机。

  1. 下拉新图片
  2. 停止 php1 容器,从新镜像开始
  3. 停止 php2 容器,从新镜像开始

完成,滚动升级,无需停机。

此设置适用于一个或多个站点。唯一的区别是 nginx 将根据主机名处理对正确 php 容器的代理。

所以你总是有 1 个 nginx,但 php 容器会根据你托管的网站数量增长。

关于php - 使用 docker 的多个 nginx/php 应用程序的体系结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36954555/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com