要在 Docker 中部署多个网站,你可以通过配置多个 Nginx 虚拟主机(server blocks)来实现。每个虚拟主机可以指向不同的 PHP-FPM 容器,并具有自己的网站配置。以下是一个修改后的 Docker Compose 文件的示例,支持多个网站:

  1. 修改 Docker Compose 文件

修改 docker-compose.yml 文件:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
version: '3'

services:
php-site1:
image: php:7.4-fpm
volumes:
- ./site1:/var/www/html

php-site2:
image: php:7.4-fpm
volumes:
- ./site2:/var/www/html

nginx:
image: nginx:latest
ports:
- "80:80"
volumes:
- ./nginx-conf:/etc/nginx/conf.d
- ./site1:/var/www/site1
- ./site2:/var/www/site2
depends_on:
- php-site1
- php-site2

上述配置中,我们添加了 php-site1php-site2 两个 PHP-FPM 服务,每个服务对应一个网站。同时,我们创建了两个目录 site1site2 分别用于存放两个网站的 PHP 代码。

  1. 修改 Nginx 配置

nginx-conf 目录中创建两个 Nginx 配置文件,例如 site1.confsite2.conf

site1.conf:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
server {
listen 80;
server_name site1.local;
root /var/www/site1;

location / {
index index.php index.html;
try_files $uri $uri/ /index.php?$query_string;
}

location ~ \.php$ {
fastcgi_pass php-site1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}

site2.conf:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
server {
listen 80;
server_name site2.local;
root /var/www/site2;

location / {
index index.php index.html;
try_files $uri $uri/ /index.php?$query_string;
}

location ~ \.php$ {
fastcgi_pass php-site2:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}

这两个配置文件分别定义了两个虚拟主机,分别对应 site1.localsite2.local,并将请求传递给对应的 PHP-FPM 容器。

  1. 构建和运行 Docker 容器

运行以下命令启动 Docker 容器:

1
docker-compose up -d

这将启动两个 PHP-FPM 容器和一个 Nginx 容器,用于同时支持两个网站。确保你在本地 hosts 文件中添加了以下条目:

1
2
127.0.0.1 site1.local
127.0.0.1 site2.local

现在,你可以通过访问 http://site1.localhttp://site2.local 来访问两个不同的网站。根据实际需求,你可以继续添加更多的 PHP-FPM 服务和对应的 Nginx 配置,以支持更多的网站。