加油
努力

在Linux服务器上安装多个WordPress实例的最佳方法是什么?

在Linux服务器上安装多个WordPress实例,推荐使用 虚拟主机(Virtual Hosts) 配合 独立数据库和目录结构 的方式。以下是最佳实践方法:

1. 环境准备

# 更新系统
sudo apt update && sudo apt upgrade -y

# 安装必要组件
sudo apt install apache2 mysql-server php php-mysql php-curl php-gd php-mbstring php-xml php-zip -y

2. 创建独立的目录结构

# 创建主网站目录
sudo mkdir -p /var/www/sites/{site1.com,site2.com,blog.example.com}

# 设置权限
sudo chown -R www-data:www-data /var/www/sites/
sudo chmod -R 755 /var/www/sites/

3. 为每个站点创建独立数据库

sudo mysql -u root -p
-- 为第一个站点创建数据库和用户
CREATE DATABASE wp_site1;
CREATE USER 'wp_user1'@'localhost' IDENTIFIED BY '强密码';
GRANT ALL PRIVILEGES ON wp_site1.* TO 'wp_user1'@'localhost';
FLUSH PRIVILEGES;

-- 为第二个站点创建
CREATE DATABASE wp_site2;
CREATE USER 'wp_user2'@'localhost' IDENTIFIED BY '另一个强密码';
GRANT ALL PRIVILEGES ON wp_site2.* TO 'wp_user2'@'localhost';
FLUSH PRIVILEGES;

EXIT;

4. 下载并配置WordPress

# 下载WordPress到临时目录
cd /tmp
wget https://wordpress.org/latest.tar.gz
tar -xzf latest.tar.gz

# 为每个站点复制WordPress文件
sudo cp -r /tmp/wordpress/* /var/www/sites/site1.com/
sudo cp -r /tmp/wordpress/* /var/www/sites/site2.com/

# 设置正确的权限
sudo chown -R www-data:www-data /var/www/sites/*

5. 配置虚拟主机

为 site1.com 创建配置文件

sudo nano /etc/apache2/sites-available/site1.com.conf
<VirtualHost *:80>
    ServerName site1.com
    ServerAlias www.site1.com
    DocumentRoot /var/www/sites/site1.com

    <Directory /var/www/sites/site1.com>
        AllowOverride All
        Require all granted
    </Directory>

    ErrorLog ${APACHE_LOG_DIR}/site1_error.log
    CustomLog ${APACHE_LOG_DIR}/site1_access.log combined
</VirtualHost>

为 site2.com 创建配置文件

sudo nano /etc/apache2/sites-available/site2.com.conf
<VirtualHost *:80>
    ServerName site2.com
    ServerAlias www.site2.com
    DocumentRoot /var/www/sites/site2.com

    <Directory /var/www/sites/site2.com>
        AllowOverride All
        Require all granted
    </Directory>

    ErrorLog ${APACHE_LOG_DIR}/site2_error.log
    CustomLog ${APACHE_LOG_DIR}/site2_access.log combined
</VirtualHost>

6. 启用站点并重启服务

# 启用站点配置
sudo a2ensite site1.com.conf
sudo a2ensite site2.com.conf

# 启用重写模块(WordPress需要)
sudo a2enmod rewrite

# 检查配置
sudo apache2ctl configtest

# 重启Apache
sudo systemctl restart apache2

7. 使用Docker的现代化方案

对于更复杂的多站点部署,推荐使用Docker:

# docker-compose.yml
version: '3.8'
services:
  db-site1:
    image: mysql:8.0
    environment:
      MYSQL_ROOT_PASSWORD: rootpass
      MYSQL_DATABASE: wp_site1
      MYSQL_USER: wp_user1
      MYSQL_PASSWORD: site1pass
    volumes:
      - db-site1-data:/var/lib/mysql

  wordpress-site1:
    image: wordpress:latest
    depends_on:
      - db-site1
    environment:
      WORDPRESS_DB_HOST: db-site1:3306
      WORDPRESS_DB_USER: wp_user1
      WORDPRESS_DB_PASSWORD: site1pass
      WORDPRESS_DB_NAME: wp_site1
    volumes:
      - site1-content:/var/www/html/wp-content
    ports:
      - "8081:80"
    restart: always

  db-site2:
    image: mysql:8.0
    environment:
      MYSQL_ROOT_PASSWORD: rootpass
      MYSQL_DATABASE: wp_site2
      MYSQL_USER: wp_user2
      MYSQL_PASSWORD: site2pass
    volumes:
      - db-site2-data:/var/lib/mysql

  wordpress-site2:
    image: wordpress:latest
    depends_on:
      - db-site2
    environment:
      WORDPRESS_DB_HOST: db-site2:3306
      WORDPRESS_DB_USER: wp_user2
      WORDPRESS_DB_PASSWORD: site2pass
      WORDPRESS_DB_NAME: wp_site2
    volumes:
      - site2-content:/var/www/html/wp-content
    ports:
      - "8082:80"
    restart: always

volumes:
  db-site1-data:
  db-site2-data:
  site1-content:
  site2-content:

8. 安全最佳实践

# 为每个站点设置独立的PHP配置
sudo mkdir /etc/php/8.1/apache2/sites/
sudo cp /etc/php/8.1/apache2/php.ini /etc/php/8.1/apache2/sites/site1.ini

# 在虚拟主机中指定PHP配置
<FilesMatch .php$>
    SetHandler application/x-httpd-php
    php_admin_value engine On
    php_admin_value open_basedir "/var/www/sites/site1.com:/tmp"
</FilesMatch>

9. 维护脚本示例

#!/bin/bash
# backup-wordpress.sh
BACKUP_DIR="/backup/wordpress"
DATE=$(date +%Y%m%d)

mkdir -p $BACKUP_DIR/$DATE

# 备份所有站点文件和数据库
for site in /var/www/sites/*; do
    sitename=$(basename $site)
    mysqldump -u root -p密码 ${sitename} > $BACKUP_DIR/$DATE/${sitename}.sql
    tar -czf $BACKUP_DIR/$DATE/${sitename}.tar.gz $site
done

推荐方案选择

  • 简单场景:使用虚拟主机 + 独立目录
  • 复杂环境:使用Docker容器化
  • 高可用性:考虑使用Kubernetes或云平台服务

这种方法确保了:

  • ✅ 站点完全隔离
  • ✅ 独立的数据库安全
  • ✅ 易于维护和扩展
  • ✅ 故障不会相互影响
云服务器