在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或云平台服务
这种方法确保了:
- ✅ 站点完全隔离
- ✅ 独立的数据库安全
- ✅ 易于维护和扩展
- ✅ 故障不会相互影响
云小栈