【问题标题】:Docker architecture for hosting a PHP website用于托管 PHP 网站的 Docker 架构
【发布时间】:2023-03-19 00:40:01
【问题描述】:

我一直在研究 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 容器进行设置,以及如何部署我的网站及其后续更新?

对此的任何意见将不胜感激!

【问题讨论】:

  • 我认为“小艇”是可能对此有用的反向代理

标签: php nginx docker proxy architecture


【解决方案1】:

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

【讨论】:

  • 所以我会让反向代理直接与不同的 PHP-FPM 容器通信,我将源文件放在哪里?
  • 您可以将它们放在一个单独的卷中,并提供您想要访问的任何容器。
  • @ChrisTanner 那么这会如情况 1 中所述吗?
  • 我不会使用单独的数据卷容器,我只是将它们全部挂载到主机上的同一位置。
【解决方案2】:

我有一个几乎类似的场景,只运行一个网络服务器。首先,我认为您的设置很好,使用单个容器作为反向代理,每个网络服务器使用另一个容器。

我不确定是否有必要在自己的容器中运行 PHP。我使用 Apache 而不是 nginx(讨厌的人会讨厌)并创建了一个自己的图像,让我跟随 docker-compose.yml

version: '2'

services:
  webproxy:
    image: myown/webproxy:x.y
    [...]

  webserver:
    image: myown/webserver:x.y
    [...]

关于您的第二个问题:我自己也遇到过这个问题,但我从未见过使用数据容器的意义。数据使用相同的磁盘空间,但您不知道它的存储位置。在我看来,备份有点棘手。这就是我使用您的第一种方法将数据卷安装到主机磁盘的原因。

【讨论】:

    猜你喜欢
    • 2014-12-18
    • 1970-01-01
    • 1970-01-01
    • 2023-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-05
    相关资源
    最近更新 更多