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
相关推荐
heimeiyingwang14 分钟前
【架构实战】系统稳定性保障:降级、兜底与容灾设计
架构
张忠琳3 小时前
【NVIDIA】NVIDIA Container Toolkit v1.19.1--07-NVCDI模块:CDI Spec生成引擎深度分析之七
云原生·容器·架构·kubernetes·nvidia
卫子miao5 小时前
如何评价当前大语言模型的记忆机制?
后端·架构
沉迷学习 日益消瘦5 小时前
01-Kubernetes 入门:概念与安装
云原生·容器·kubernetes
ARM+FPGA+AI工业主板定制专家5 小时前
国产化RK3576+FPGA架构|晶圆传输机器人高速定位+AI瑕疵检测一体化方案
fpga开发·架构·机器人·嵌入式·fpga·工控·机器人运控
weixin_419658316 小时前
Docker 搭建 Jenkins 服务
java·docker·jenkins
星栈6 小时前
MCP 从 stdio 迁到 SSE,踩了 5 个传输层坑
人工智能·后端·架构
写代码的强哥6 小时前
云原生数据库与传统数据库相比“新”在哪里
数据库·云原生·架构
想你依然心痛6 小时前
系统存储机制深度剖析:从Win11临时文件夹设计看微软存储架构演进
microsoft·架构
还有你Y7 小时前
读懂微服务
微服务·云原生·架构