是的,一个服务器上运行两个容器化的 WordPress 网站是完全可行的,而且是现代部署中非常常见的做法。通过 Docker 容器化技术,你可以轻松地在同一台服务器上隔离并运行多个独立的 WordPress 实例。
以下是实现方案和关键步骤:
✅ 实现目标
在一台服务器上:
- 运行两个独立的 WordPress 网站(例如:
site1.com和site2.com) - 每个网站拥有独立的数据库和文件
- 使用 Docker 和 Docker Compose 管理容器
- 通过 Nginx 反向处理域名路由(可选 HTTPS)
🛠️ 技术栈
- Docker + Docker Compose
- WordPress 镜像(
wordpress:latest) - MySQL 或 MariaDB 数据库
- Nginx 反向(推荐:
nginx-proxy或自定义 Nginx) - 可选:Let’s Encrypt 自动 HTTPS(通过
nginx-proxy + letsencrypt-nginx-proxy-companion)
📁 目录结构示例
/srv/wordpress/
├── site1/
│ ├── docker-compose.yml
│ └── .env
├── site2/
│ ├── docker-compose.yml
│ └── .env
└── nginx-proxy/
├── docker-compose.yml
1️⃣ 配置 Nginx 反向(推荐集中管理)
/srv/wordpress/nginx-proxy/docker-compose.yml
version: '3.8'
services:
nginx-proxy:
image: jwilder/nginx-proxy
container_name: 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
letsencrypt:
image: jrcs/letsencrypt-nginx-proxy-companion
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
- certs:/etc/nginx/certs
- html:/usr/share/nginx/html
depends_on:
- nginx-proxy
volumes:
certs:
vhost:
html:
启动:
cd /srv/wordpress/nginx-proxy
docker-compose up -d
2️⃣ 部署第一个 WordPress 网站(site1.com)
/srv/wordpress/site1/.env
WORDPRESS_DB_HOST=db-site1
WORDPRESS_DB_USER=wpuser1
WORDPRESS_DB_PASSWORD=wppass123
WORDPRESS_DB_NAME=wpdb1
VIRTUAL_HOST=site1.com
LETSENCRYPT_HOST=site1.com
LETSENCRYPT_EMAIL=admin@site1.com
/srv/wordpress/site1/docker-compose.yml
version: '3.8'
services:
db:
image: mysql:8.0
container_name: db-site1
environment:
MYSQL_ROOT_PASSWORD: rootpass123
MYSQL_DATABASE: ${WORDPRESS_DB_NAME}
MYSQL_USER: ${WORDPRESS_DB_USER}
MYSQL_PASSWORD: ${WORDPRESS_DB_PASSWORD}
volumes:
- db_data1:/var/lib/mysql
restart: always
wordpress:
image: wordpress:latest
container_name: wp-site1
depends_on:
- db
environment:
WORDPRESS_DB_HOST: ${WORDPRESS_DB_HOST}
WORDPRESS_DB_USER: ${WORDPRESS_DB_USER}
WORDPRESS_DB_PASSWORD: ${WORDPRESS_DB_PASSWORD}
WORDPRESS_DB_NAME: ${WORDPRESS_DB_NAME}
VIRTUAL_HOST: ${VIRTUAL_HOST}
LETSENCRYPT_HOST: ${LETSENCRYPT_HOST}
LETSENCRYPT_EMAIL: ${LETSENCRYPT_EMAIL}
volumes:
- wp_data1:/var/www/html
restart: always
volumes:
db_data1:
wp_data1:
部署:
cd /srv/wordpress/site1
docker-compose up -d
3️⃣ 部署第二个 WordPress 网站(site2.com)
/srv/wordpress/site2/.env
WORDPRESS_DB_HOST=db-site2
WORDPRESS_DB_USER=wpuser2
WORDPRESS_DB_PASSWORD=wppass456
WORDPRESS_DB_NAME=wpdb2
VIRTUAL_HOST=site2.com
LETSENCRYPT_HOST=site2.com
LETSENCRYPT_EMAIL=admin@site2.com
/srv/wordpress/site2/docker-compose.yml(结构同上,改名和环境变量)
部署:
cd /srv/wordpress/site2
docker-compose up -d
✅ 最终效果
- 访问
https://site1.com→ 第一个 WordPress - 访问
https://site2.com→ 第二个 WordPress - 每个站点独立数据库、独立文件、独立容器
- HTTPS 自动配置(通过 Let’s Encrypt)
- 域名通过 Nginx Proxy 自动路由
⚠️ 注意事项
- 域名解析:确保
site1.com和site2.com指向你的服务器公网 IP。 - 防火墙:开放 80 和 443 端口。
- 资源分配:根据服务器配置(如 2核4G)合理分配资源,避免过载。
- 备份:定期备份数据库卷(
db_data1,db_data2)和 WordPress 文件卷。 - 安全性:更新镜像、使用强密码、限制数据库外部访问。
✅ 优点
- 隔离性好,互不影响
- 易于扩展和迁移
- 快速部署和备份
- 支持自动 HTTPS
如果你希望更轻量,也可以不用 nginx-proxy,而使用一个自定义 Nginx 配置手动反向两个容器(通过不同端口暴露 WordPress)。
需要我提供“无 nginx-proxy”的版本吗?或者帮你写一键部署脚本?
云计算HECS