一个服务器运行两个容器化wordpress网站,?

在一个服务器上运行两个容器化的 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技术博 » 一个服务器运行两个容器化wordpress网站,?