在一个服务器上运行两个容器化的 WordPress 网站是完全可行的,可以通过 Docker 来实现。每个 WordPress 站点需要自己的 WordPress 容器 + MySQL/MariaDB 容器(或共享数据库),并且需要配置不同的端口、域名和数据卷以避免冲突。
下面是一个详细的步骤说明:
✅ 目标
在一台服务器上使用 Docker 同时运行两个独立的 WordPress 站点:
- 站点 A:
site1.example.com - 站点 B:
site2.example.com
🐳 使用的技术栈
- Docker
- Docker Compose(推荐)
- Nginx 反向X_X(可选但推荐)
- 每个站点独立的 MySQL 数据库
📁 目录结构示例
wordpress-docker/
├── site1/
│ ├── docker-compose.yml
│ └── wordpress-data/ # 站点A的文件挂载
├── site2/
│ ├── docker-compose.yml
│ └── wordpress-data/ # 站点B的文件挂载
└── nginx/
├── docker-compose.yml
├── nginx.conf
└── sites-available/
├── site1.conf
└── site2.conf
1️⃣ 配置第一个 WordPress 站点(site1)
site1/docker-compose.yml
version: '3.8'
services:
db-site1:
image: mysql:8.0
container_name: site1-db
restart: always
environment:
MYSQL_ROOT_PASSWORD: rootpass
MYSQL_DATABASE: wordpress
MYSQL_USER: wordpress
MYSQL_PASSWORD: wordpress
volumes:
- site1_db_data:/var/lib/mysql
networks:
- site1-network
wordpress-site1:
depends_on:
- db-site1
image: wordpress:latest
container_name: site1-wp
restart: always
ports:
- "8001:80" # 访问端口为 http://server_ip:8001
environment:
WORDPRESS_DB_HOST: db-site1:3306
WORDPRESS_DB_USER: wordpress
WORDPRESS_DB_PASSWORD: wordpress
WORDPRESS_DB_NAME: wordpress
volumes:
- ./wordpress-data:/var/www/html
networks:
- site1-network
volumes:
site1_db_data:
networks:
site1-network:
2️⃣ 配置第二个 WordPress 站点(site2)
site2/docker-compose.yml
version: '3.8'
services:
db-site2:
image: mysql:8.0
container_name: site2-db
restart: always
environment:
MYSQL_ROOT_PASSWORD: rootpass
MYSQL_DATABASE: wordpress
MYSQL_USER: wordpress
MYSQL_PASSWORD: wordpress
volumes:
- site2_db_data:/var/lib/mysql
networks:
- site2-network
wordpress-site2:
depends_on:
- db-site2
image: wordpress:latest
container_name: site2-wp
restart: always
ports:
- "8002:80" # 访问端口为 http://server_ip:8002
environment:
WORDPRESS_DB_HOST: db-site2:3306
WORDPRESS_DB_USER: wordpress
WORDPRESS_DB_PASSWORD: wordpress
WORDPRESS_DB_NAME: wordpress
volumes:
- ./wordpress-data:/var/www/html
networks:
- site2-network
volumes:
site2_db_data:
networks:
site2-network:
3️⃣ 使用 Nginx 反向X_X(可选)
这样你可以通过域名访问网站而不是 IP+端口。
nginx/sites-available/site1.conf
server {
listen 80;
server_name site1.example.com;
location / {
proxy_pass http://localhost:8001;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
nginx/sites-available/site2.conf
server {
listen 80;
server_name site2.example.com;
location / {
proxy_pass http://localhost:8002;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
nginx/docker-compose.yml
version: '3'
services:
nginx:
image: nginx:latest
container_name: nginx-proxy
ports:
- "80:80"
volumes:
- ./sites-available:/etc/nginx/conf.d
restart: always
networks:
- site1-network
- site2-network
networks:
default:
external:
name: nginx-network
⚠️ 注意:你可能需要创建一个共用网络,或者将多个服务加入到不同网络中。
🧪 启动命令
分别进入每个目录并启动:
cd site1 && docker-compose up -d
cd ../site2 && docker-compose up -d
cd ../nginx && docker-compose up -d
🌐 域名解析
你需要确保你的 DNS 解析了:
site1.example.com -> 服务器公网IP
site2.example.com -> 服务器公网IP
如果你本地测试,可以修改 hosts 文件:
127.0.0.1 site1.example.com
127.0.0.1 site2.example.com
🔐 SSL 支持(进阶)
你可以使用 Let’s Encrypt + Certbot 或 Traefik 自动添加 HTTPS。
✅ 总结
| 内容 | 描述 |
|---|---|
| 服务器数量 | 1 |
| WordPress 数量 | 2 |
| 数据库数量 | 2(建议) |
| 是否共享资源 | 不共享(独立容器和数据卷) |
| 推荐工具 | Docker + Docker Compose + Nginx |
如需更高级的部署方案(例如负载均衡、HTTPS自动证书、多主机部署),也可以继续扩展。
需要我帮你生成完整的项目结构模板吗?
CLOUD技术博