架构
2. 创建项目结构
shell
# 创建项目目录
mkdir wordpress-distributed && cd wordpress-distributed
mkdir nginx-config redis-config
3. 创建 docker-compose.yml
yaml
# docker-compose.yml
version: '3.8'
services:
# Nginx 负载均衡 + 反向代理
nginx:
image: nginx:stable-alpine-perl
ports:
- "80:80"
- "443:443"
volumes:
- ./nginx-config/default.conf:/etc/nginx/conf.d/default.conf
- ./nginx-config/nginx.conf:/etc/nginx/nginx.conf
- wordpress-data:/var/www/html
depends_on:
- wordpress1
- wordpress2
networks:
- wordpress-network
# WordPress 实例 1(可水平扩展)
wordpress1:
image: wordpress:php8.4-fpm-alpine
volumes:
- wordpress-data:/var/www/html
- ./php-config/uploads.ini:/usr/local/etc/php/conf.d/uploads.ini
environment:
WORDPRESS_DB_HOST: mysql
WORDPRESS_DB_USER: wpuser
WORDPRESS_DB_PASSWORD: ${DB_PASSWORD}
WORDPRESS_DB_NAME: wordpress
WORDPRESS_TABLE_PREFIX: wp_
REDIS_HOST: redis
networks:
- wordpress-network
deploy:
resources:
limits:
memory: 512M
cpus: '0.5'
# WordPress 实例 2(负载均衡)
wordpress2:
image: wordpress:php8.4-fpm-alpine
volumes:
- wordpress-data:/var/www/html
- ./php-config/uploads.ini:/usr/local/etc/php/conf.d/uploads.ini
environment:
WORDPRESS_DB_HOST: mysql
WORDPRESS_DB_USER: wpuser
WORDPRESS_DB_PASSWORD: ${DB_PASSWORD}
WORDPRESS_DB_NAME: wordpress
WORDPRESS_TABLE_PREFIX: wp_
REDIS_HOST: redis
networks:
- wordpress-network
deploy:
resources:
limits:
memory: 512M
cpus: '0.5'
# MySQL 数据库(共享)
mysql:
image: mysql:8.0-debian
environment:
MYSQL_ROOT_PASSWORD: ${DB_ROOT_PASSWORD}
MYSQL_DATABASE: wordpress
MYSQL_USER: wpuser
MYSQL_PASSWORD: ${DB_PASSWORD}
volumes:
- mysql-data:/var/lib/mysql
- ./mysql-config/my.cnf:/etc/mysql/my.cnf
command:
- --default-authentication-plugin=mysql_native_password
- --innodb_buffer_pool_size=512M
networks:
- wordpress-network
# Redis 缓存(共享)
redis:
image: redis:alpine
command:
- redis-server
- --appendonly yes
- --requirepass ${REDIS_PASSWORD}
- --maxmemory 256mb
- --maxmemory-policy allkeys-lru
volumes:
- redis-data:/data
- ./redis-config/redis.conf:/etc/redis/redis.conf
networks:
- wordpress-network
volumes:
wordpress-data:
mysql-data:
redis-data:
networks:
wordpress-network:
driver: bridge
4. 创建 Nginx 负载均衡配置
shell
# 创建 Nginx 主配置
cat > nginx-config/nginx.conf << 'EOF'
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log notice;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
# 上游 WordPress 服务器组
upstream wordpress_backend {
least_conn; # 最少连接负载均衡
server wordpress1:9000 weight=3;
server wordpress2:9000 weight=2;
keepalive 32;
}
include /etc/nginx/conf.d/*.conf;
}
EOF
# 创建站点配置
cat > nginx-config/default.conf << 'EOF'
server {
listen 80;
server_name _;
root /var/www/html;
index index.php;
# 静态文件缓存
location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg|woff|woff2)$ {
expires 365d;
access_log off;
add_header Cache-Control "public, immutable";
try_files $uri =404;
}
# WordPress 路由
location / {
try_files $uri $uri/ /index.php?$args;
}
# PHP 负载均衡
location ~ \.php$ {
fastcgi_pass wordpress_backend;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_keep_conn on;
fastcgi_intercept_errors on;
}
# 安全设置
location ~ /\.ht {
deny all;
}
location ~* (\.env|wp-config\.php|composer\.json)$ {
deny all;
}
}
EOF
5. 创建配置文件
# 创建环境变量文件
cat > .env << 'EOF'
DB_ROOT_PASSWORD=your_mysql_root_password_123
DB_PASSWORD=your_mysql_wp_password_456
REDIS_PASSWORD=your_redis_password_789
EOF
# PHP 配置
mkdir php-config
cat > php-config/uploads.ini << 'EOF'
file_uploads = On
upload_max_filesize = 64M
post_max_size = 128M
max_execution_time = 300
memory_limit = 256M
EOF
# MySQL 配置
mkdir mysql-config
cat > mysql-config/my.cnf << 'EOF'
[mysqld]
innodb_buffer_pool_size = 512M
innodb_log_file_size = 256M
max_connections = 100
query_cache_type = 1
query_cache_size = 64M
slow_query_log = 1
EOF
# Redis 配置
mkdir redis-config
cat > redis-config/redis.conf << 'EOF'
bind 0.0.0.0
port 6379
requirepass your_redis_password_789
maxmemory 256mb
maxmemory-policy allkeys-lru
appendonly yes
appendfsync everysec
EOF
6. 启动分布式架构
# 启动所有服务
docker-compose up -d
# 查看服务状态
docker-compose ps
# 查看负载均衡状态
docker-compose logs nginx | grep -i "upstream"
7. 验证分布式架构
# 检查所有容器运行状态
docker-compose ps
# 测试负载均衡
curl -I http://localhost
# 检查 Redis 连接
docker-compose exec redis redis-cli -a your_redis_password_789 ping
# 检查 MySQL 连接
docker-compose exec mysql mysql -u wpuser -pyour_mysql_wp_password_456 -e "SELECT @@version;"
8. WordPress 安装和配置
-
访问
http://你的服务器IP完成 WordPress 安装 -
安装 Redis 缓存插件(如 "Redis Object Cache")
-
在
wp-config.php中添加 Redis 配置:// Redis 分布式缓存配置 define('WP_REDIS_HOST', 'redis'); define('WP_REDIS_PORT', 6379); define('WP_REDIS_PASSWORD', 'your_redis_password_789'); define('WP_REDIS_TIMEOUT', 1); define('WP_REDIS_READ_TIMEOUT', 1); define('WP_REDIS_SELECTIVE_FLUSH', true);
9. 扩展和管理命令
# 扩展更多 WordPress 实例
docker-compose up -d --scale wordpress=4
# 查看各实例资源使用
docker stats $(docker ps -q --filter name=wordpress)
# 重启特定服务
docker-compose restart wordpress1
# 更新配置后重载 Nginx
docker-compose exec nginx nginx -s reload
# 备份数据库
docker-compose exec mysql mysqldump -u root -p$DB_ROOT_PASSWORD wordpress > backup.sql
10. 监控和优化
# 监控 Nginx 访问日志
docker-compose logs -f nginx | grep "wordpress"
# 检查 PHP-FPM 状态
docker-compose exec wordpress1 curl http://localhost/status
性能测试
# 使用 ab 进行压力测试
ab -n 1000 -c 10 http://你的服务器IP/
11.项目最终结构
wordpress-distributed/
├── docker-compose.yml
├── .env
├── nginx-config/
│ ├── nginx.conf
│ └── default.conf
├── php-config/
│ └── uploads.ini
├── mysql-config/
│ └── my.cnf
├── redis-config/
│ └── redis.conf
└── README.md