如何在一台服务器上部署两个独立的WordPress实例?

在一台服务器上部署两个独立的 WordPress 实例,核心思路是“资源隔离”“路径/域名区分”

作为在云计算和运维领域深耕多年的技术人员,我推荐两种主流且稳定的方案。选择哪种取决于你的业务场景、技术栈偏好以及是否希望利用云厂商的负载均衡能力。


方案一:Nginx 反向X_X + 多站点(Subdirectory/Subdomain)

适用场景:两个网站内容关联性强,或希望统一管理 SSL 证书,节省 IP 资源。
优点:配置集中,易于维护;无需额外购买独立服务器资源。
缺点:数据库共享(需不同前缀),插件冲突风险略高,单点故障影响所有站点。

步骤详解:

  1. 准备环境

    • 安装 Nginx、PHP-FPM、MySQL/MariaDB。
    • 确保 PHP-FPM 支持多个池(pool),或者使用同一个 pool 但通过 fastcgi_pass 区分。
  2. 创建数据库和用户

    CREATE DATABASE wp_site1_db;
    CREATE USER 'wp_user1'@'localhost' IDENTIFIED BY 'password1';
    GRANT ALL PRIVILEGES ON wp_site1_db.* TO 'wp_user1'@'localhost';
    
    CREATE DATABASE wp_site2_db;
    CREATE USER 'wp_user2'@'localhost' IDENTIFIED BY 'password2';
    GRANT ALL PRIVILEGES ON wp_site2_db.* TO 'wp_user2'@'localhost';
    FLUSH PRIVILEGES;
  3. 下载并解压 WordPress

    cd /var/www/html
    wget https://wordpress.org/latest.tar.gz
    tar xzvf latest.tar.gz
    mv wordpress site1
    cp -r site1 site2
    chown -R www-data:www-data /var/www/html/site1 /var/www/html/site2
  4. 配置 Nginx 虚拟主机
    假设你使用子目录方式:example.com/site1example.com/site2

    创建 /etc/nginx/sites-available/site1.conf

    server {
       listen 80;
       server_name example.com;
    
       root /var/www/html/site1;
       index index.php index.html;
    
       location /site1 {
           try_files $uri $uri/ /site1/index.php?$args;
       }
    
       location ~ .php$ {
           include snippets/fastcgi-php.conf;
           fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
       }
    
       location ~ /.ht {
           deny all;
       }
    }

    ⚠️ 注意:上述配置为简化版。实际生产中,建议为每个站点创建独立的 Nginx 配置文件,并通过 server_name 绑定不同域名,或使用子目录时正确设置 location 块。更常见的做法是使用子域名

    • site1.example.com/var/www/html/site1
    • site2.example.com/var/www/html/site2
  5. 完成 WordPress 安装

    • 访问 http://site1.example.com,按提示输入 wp_site1_db 的用户名密码。
    • 访问 http://site2.example.com,按提示输入 wp_site2_db 的用户名密码。
  6. SSL 证书配置

    • 使用 Certbot 自动申请 Let’s Encrypt 证书。
    • 若共用域名,可使用 SNI 支持;若子域名,可为每个子域名单独申请证书。

方案二:Docker 容器化部署(推荐)

适用场景:需要高度隔离、快速迁移、避免依赖冲突,适合现代 DevOps 流程。
优点:完全隔离(进程、文件系统、网络),便于备份和恢复,可轻松扩展。
缺点:学习曲线稍高,需掌握 Docker 基础。

步骤详解:

  1. 安装 Docker 和 Docker Compose

    curl -fsSL https://get.docker.com | sh
    sudo usermod -aG docker $USER
    # 安装 docker-compose(v2 已集成进 docker 命令)
  2. 项目结构

    /opt/wordpress-multi/
    ├── site1/
    │   ├── docker-compose.yml
    │   └── data/          # 存放 wp-content 等数据
    ├── site2/
    │   ├── docker-compose.yml
    │   └── data/
    └── nginx-proxy/       # 可选:统一反向X_X
       ├── docker-compose.yml
       └── conf.d/
  3. Site1 的 docker-compose.yml

    version: '3.8'
    services:
     db:
       image: mysql:5.7
       volumes:
         - ./data/db:/var/lib/mysql
       environment:
         MYSQL_ROOT_PASSWORD: rootpass1
         MYSQL_DATABASE: wp_site1
         MYSQL_USER: wp_user1
         MYSQL_PASSWORD: pass1
    
     wordpress:
       depends_on:
         - db
       image: wordpress:latest
       ports:
         - "8081:80"
       volumes:
         - ./data/wp-content:/var/www/html/wp-content
       environment:
         WORDPRESS_DB_HOST: db
         WORDPRESS_DB_USER: wp_user1
         WORDPRESS_DB_PASSWORD: pass1
         WORDPRESS_DB_NAME: wp_site1
  4. Site2 的 docker-compose.yml
    类似 Site1,但修改端口为 8082,数据库密码、用户名、卷路径等。

  5. 启动服务

    cd /opt/wordpress-multi/site1 && docker compose up -d
    cd /opt/wordpress-multi/site2 && docker compose up -d
  6. 反向X_X(可选但推荐)
    使用 Nginx Proxy Manager 或 Caddy 实现域名解析到 localhost:8081localhost:8082,并自动管理 HTTPS。


关键注意事项(避坑指南)

  1. 性能瓶颈

    • 单台服务器同时运行两个 WP 实例,CPU 和内存会成为瓶颈。
    • 优化建议
      • 启用 OPcache(PHP)。
      • 使用 Redis 或 Memcached 作为对象缓存。
      • 限制 PHP-FPM 的最大子进程数(pm.max_children)。
      • 考虑使用云厂商的 CDN 提速静态资源。
  2. 安全隔离

    • 即使在同一服务器,也要确保两个 WP 实例的 wp-config.php 权限严格(chmod 600)。
    • 防火墙仅开放必要端口(80/443)。
    • 定期更新 WordPress 核心、主题和插件。
  3. 备份策略

    • 数据库:使用 mysqldump 定时备份,或 MySQL 主从复制。
    • 文件:将 wp-content/uploads 目录单独备份。
    • 容器化方案:直接备份 Docker Volume 中的数据目录即可。
  4. 云厂商特定建议

    • 如果使用阿里云 ECS 或腾讯云 CVM,建议开启快照功能,在重大操作前创建系统盘和数据盘快照。
    • 若流量增长,可考虑将数据库迁移至云数据库 RDS,Web 层继续使用当前服务器或横向扩展。

总结

方案 复杂度 隔离性 资源利用率 推荐指数
Nginx 多站点 低(共享 DB) ⭐⭐⭐
Docker 容器化 中高 高(完全隔离) ⭐⭐⭐⭐⭐

最终建议
如果你是初学者或追求简单,选 Nginx 多站点
如果你注重稳定性、安全性和未来扩展性,强烈建议使用 Docker 容器化部署。这是目前业界最佳实践,尤其适合云计算环境。

未经允许不得转载:CLOUD云枢 » 如何在一台服务器上部署两个独立的WordPress实例?