是的,一个服务器可以运行两个(甚至更多)容器化的 WordPress 网站。这是通过使用 Docker 或其他容器技术实现的常见做法。以下是具体实现方式和注意事项:
✅ 实现方法
1. 使用 Docker + Docker Compose
推荐使用 docker-compose.yml 文件来管理多个 WordPress 容器。
每个 WordPress 站点需要:
- 一个独立的 WordPress 容器(基于官方镜像)
- 一个独立的 MySQL/MariaDB 数据库容器(或共享数据库但不同数据库名)
- 映射不同的端口或使用反向X_X(如 Nginx Proxy)
? 示例:运行两个 WordPress 站点
方案一:不同端口访问(简单测试用)
# docker-compose.yml
version: '3.8'
services:
db1:
image: mysql:8.0
environment:
MYSQL_ROOT_PASSWORD: rootpass123
MYSQL_DATABASE: wordpress1
MYSQL_USER: wpuser1
MYSQL_PASSWORD: wppass1
volumes:
- db1_data:/var/lib/mysql
restart: always
wordpress1:
image: wordpress:latest
depends_on:
- db1
ports:
- "8080:80"
environment:
WORDPRESS_DB_HOST: db1:3306
WORDPRESS_DB_USER: wpuser1
WORDPRESS_DB_PASSWORD: wppass1
WORDPRESS_DB_NAME: wordpress1
volumes:
- wp1_data:/var/www/html
restart: always
db2:
image: mysql:8.0
environment:
MYSQL_ROOT_PASSWORD: rootpass123
MYSQL_DATABASE: wordpress2
MYSQL_USER: wpuser2
MYSQL_PASSWORD: wppass2
volumes:
- db2_data:/var/lib/mysql
restart: always
wordpress2:
image: wordpress:latest
depends_on:
- db2
ports:
- "8081:80"
environment:
WORDPRESS_DB_HOST: db2:3306
WORDPRESS_DB_USER: wpuser2
WORDPRESS_DB_PASSWORD: wppass2
WORDPRESS_DB_NAME: wordpress2
volumes:
- wp2_data:/var/www/html
restart: always
volumes:
db1_data:
db2_data:
wp1_data:
wp2_data:
访问方式:
- 站点1:
http://your-server-ip:8080- 站点2:
http://your-server-ip:8081
方案二:使用 Nginx 反向X_X + 域名(生产推荐)
使用 Nginx Proxy Manager 或自定义 Nginx 配置,实现:
site1.example.com→ WordPress 1site2.example.com→ WordPress 2
示例结构:
# docker-compose.yml(简化版,配合反向X_X)
version: '3.8'
services:
wordpress1:
image: wordpress:latest
environment:
WORDPRESS_DB_HOST: db1:3306
WORDPRESS_DB_USER: wpuser1
WORDPRESS_DB_PASSWORD: wppass1
WORDPRESS_DB_NAME: wordpress1
volumes:
- wp1_data:/var/www/html
restart: always
networks:
- web
db1:
image: mysql:8.0
environment:
MYSQL_ROOT_PASSWORD: rootpass123
MYSQL_DATABASE: wordpress1
MYSQL_USER: wpuser1
MYSQL_PASSWORD: wppass1
volumes:
- db1_data:/var/lib/mysql
restart: always
networks:
- default
wordpress2:
image: wordpress:latest
environment:
WORDPRESS_DB_HOST: db2:3306
WORDPRESS_DB_USER: wpuser2
WORDPRESS_DB_PASSWORD: wppass2
WORDPRESS_DB_NAME: wordpress2
volumes:
- wp2_data:/var/www/html
restart: always
networks:
- web
db2:
image: mysql:8.0
environment:
MYSQL_ROOT_PASSWORD: rootpass123
MYSQL_DATABASE: wordpress2
MYSQL_USER: wpuser2
MYSQL_PASSWORD: wppass2
volumes:
- db2_data:/var/lib/mysql
restart: always
networks:
- default
nginx-proxy:
image: nginxproxy/nginx-proxy
ports:
- "80:80"
- "443:443"
volumes:
- /var/run/docker.sock:/tmp/docker.sock:ro
- certs:/etc/nginx/certs
- vhost:/etc/nginx/vhost.d
- html:/usr/share/nginx/html
restart: always
networks:
- web
networks:
web:
external: true
volumes:
db1_data:
db2_data:
wp1_data:
wp2_data:
certs:
vhost:
html:
然后为每个 WordPress 设置环境变量:
VIRTUAL_HOST=site1.example.com
LETSENCRYPT_HOST=site1.example.com
配合 Let’s Encrypt 可自动启用 HTTPS。
⚠️ 注意事项
-
数据库隔离
每个 WordPress 应使用独立数据库(甚至独立数据库容器),避免冲突。 -
数据持久化
使用volumes持久化 WordPress 文件和数据库,防止容器重建后数据丢失。 -
资源占用
两个 WordPress + 两个 MySQL 容器可能占用较多内存(建议服务器至少 2GB RAM,推荐 4GB+)。 -
安全
- 不要暴露 MySQL 到公网。
- 使用强密码。
- 定期更新镜像。
-
备份策略
定期备份数据库卷和 WordPress 内容卷(wp-content)。
✅ 总结
✅ 完全可以在一台服务器上运行两个容器化 WordPress 网站。
? 推荐使用 Docker Compose + 反向X_X(Nginx)管理多站点。
? 生产环境建议使用域名 + HTTPS。
如果你提供具体需求(比如是否已有域名、是否需要 HTTPS、服务器配置等),我可以帮你生成完整的部署脚本。
CDNK博客