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

是的,一个服务器上运行两个容器化的 WordPress 网站是完全可行的,而且是现代部署中非常常见的做法。通过 Docker 容器化技术,你可以轻松地在同一台服务器上隔离并运行多个独立的 WordPress 实例。

以下是实现方案和关键步骤:


✅ 实现目标

在一台服务器上:

  • 运行两个独立的 WordPress 网站(例如:site1.comsite2.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 自动路由

⚠️ 注意事项

  1. 域名解析:确保 site1.comsite2.com 指向你的服务器公网 IP。
  2. 防火墙:开放 80 和 443 端口。
  3. 资源分配:根据服务器配置(如 2核4G)合理分配资源,避免过载。
  4. 备份:定期备份数据库卷(db_data1, db_data2)和 WordPress 文件卷。
  5. 安全性:更新镜像、使用强密码、限制数据库外部访问。

✅ 优点

  • 隔离性好,互不影响
  • 易于扩展和迁移
  • 快速部署和备份
  • 支持自动 HTTPS

如果你希望更轻量,也可以不用 nginx-proxy,而使用一个自定义 Nginx 配置手动反向两个容器(通过不同端口暴露 WordPress)。

需要我提供“无 nginx-proxy”的版本吗?或者帮你写一键部署脚本?

未经允许不得转载:云计算HECS » 一个服务器运行两个容器化wordpress网站,?