docker架构

架构


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 安装和配置

  1. 访问 http://你的服务器IP完成 WordPress 安装

  2. 安装 Redis 缓存插件(如 "Redis Object Cache")

  3. 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
相关推荐
IT新视界7 小时前
星环科技ArgoDB:基于一体化架构构建数据全生命周期安全底座
数据库·科技·安全·架构
Java面试题总结8 小时前
多区域架构:边缘节点、核心节点与跨区域写冲突
架构
源图客8 小时前
【AI向量数据库】Weaviate介绍与部署
运维·docker·容器
2301_780789668 小时前
零信任架构中,身份感知防火墙(IAFW)的部署要点与最佳实践
linux·运维·服务器·人工智能·tcp/ip·架构
lulu12165440789 小时前
OpenRouter Fusion 多模型融合架构深度拆解:预算级模型组团打平 Fable 5,多模型协作才是 AGI 的正确打开方式?
java·人工智能·架构·ai编程·agi
极光技术熊9 小时前
全栈项目部署实战指南:Java / Python / Vue / React 一站式搞定
程序员·架构
Solis9 小时前
Raft:分布式系统的定海神针
后端·架构
沪漂阿龙9 小时前
《LangChain 系列》Human-in-the-loop:什么时候必须让人工介入?
人工智能·架构·langchain
makise-9 小时前
破译大数据底层密码:从 HDFS 存储基石到现代分布式计算引擎的架构演进
大数据·hdfs·架构