当前位置: 首页 > news >正文

docker架构

架构


2. 创建项目结构

# 创建项目目录mkdirwordpress-distributed&&cdwordpress-distributedmkdirnginx-config redis-config

3. 创建 docker-compose.yml

# docker-compose.ymlversion:'3.8'services:# Nginx 负载均衡 + 反向代理nginx:image:nginx:stable-alpine-perlports:-"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/htmldepends_on:-wordpress1-wordpress2networks:-wordpress-network# WordPress 实例 1(可水平扩展)wordpress1:image:wordpress:php8.4-fpm-alpinevolumes:-wordpress-data:/var/www/html-./php-config/uploads.ini:/usr/local/etc/php/conf.d/uploads.inienvironment:WORDPRESS_DB_HOST:mysqlWORDPRESS_DB_USER:wpuserWORDPRESS_DB_PASSWORD:${DB_PASSWORD}WORDPRESS_DB_NAME:wordpressWORDPRESS_TABLE_PREFIX:wp_REDIS_HOST:redisnetworks:-wordpress-networkdeploy:resources:limits:memory:512Mcpus:'0.5'# WordPress 实例 2(负载均衡)wordpress2:image:wordpress:php8.4-fpm-alpinevolumes:-wordpress-data:/var/www/html-./php-config/uploads.ini:/usr/local/etc/php/conf.d/uploads.inienvironment:WORDPRESS_DB_HOST:mysqlWORDPRESS_DB_USER:wpuserWORDPRESS_DB_PASSWORD:${DB_PASSWORD}WORDPRESS_DB_NAME:wordpressWORDPRESS_TABLE_PREFIX:wp_REDIS_HOST:redisnetworks:-wordpress-networkdeploy:resources:limits:memory:512Mcpus:'0.5'# MySQL 数据库(共享)mysql:image:mysql:8.0-debianenvironment:MYSQL_ROOT_PASSWORD:${DB_ROOT_PASSWORD}MYSQL_DATABASE:wordpressMYSQL_USER:wpuserMYSQL_PASSWORD:${DB_PASSWORD}volumes:-mysql-data:/var/lib/mysql-./mysql-config/my.cnf:/etc/mysql/my.cnfcommand:---default-authentication-plugin=mysql_native_password---innodb_buffer_pool_size=512Mnetworks:-wordpress-network# Redis 缓存(共享)redis:image:redis:alpinecommand:-redis-server---appendonly yes---requirepass ${REDIS_PASSWORD}---maxmemory 256mb---maxmemory-policy allkeys-lruvolumes:-redis-data:/data-./redis-config/redis.conf:/etc/redis/redis.confnetworks:-wordpress-networkvolumes:wordpress-data:mysql-data:redis-data:networks:wordpress-network:driver:bridge

4. 创建 Nginx 负载均衡配置

# 创建 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
http://www.jsqmd.com/news/883601/

相关文章:

  • 2026广州搬家公司推荐:5家高口碑正规搬家机构深度测评 - 生活服务
  • 告别手动抢茅台!智能预约系统让你轻松实现茅台自由
  • 如何用ImageGlass实现专业图像管理:90+格式支持的完整解决方案
  • 从原理到防御:手把手教你用Python模拟ZipCrypto加密,理解密码为何能被‘撞开’
  • CAJ转PDF终极指南:免费开源工具帮你轻松打破知网格式壁垒
  • ZonyLrcToolsX:你的智能歌词管家,一键下载四大平台歌词
  • 别再手动调相机了!用Cinemachine插件5分钟搞定Unity第三人称跟随镜头(含FreeLook Camera配置)
  • 【国家级等保2.0合规红线】:DeepSeek代码审计必须覆盖的11个AI特有攻击面(附GPT-4o交叉验证报告)
  • 告别Houdini!用UE5.2原生PCG框架,像搭积木一样复用你的关卡设计
  • 猫抓浏览器资源嗅探扩展:你的网页视频下载终极解决方案
  • 告别UE5 3DUI模糊:除了r.Tonemapper.Sharpen,这些项目设置也别忘了调
  • UE5过场动画利器:手把手教你用Sequence序列录制蓝图驱动的摄影机飞行路径
  • 从电影运镜到游戏过场:手把手教你用Cinemachine Timeline制作Unity剧情动画(Dolly Track实战)
  • B站视频缓存转换终极指南:5秒完成m4s到MP4的无损转换
  • HandheldCompanion终极指南:如何在Windows掌机上实现完美游戏控制
  • 3分钟学会文件完整性校验:HashCalculator哈希值批量计算器终极免费指南
  • MTCNN真的过时了吗?深入对比它在PyTorch轻量化部署与最新SOTA模型的实战表现
  • 【2026-05-22】企业总结
  • 别再乱调了!深度解析URP相机Culling Mask与Occlusion Culling,让你的游戏性能提升一个档次
  • Zotero-Style插件完整指南:高效文献管理的终极解决方案
  • 解放学术资源:caj2pdf——打破CAJ格式壁垒的开源解决方案
  • FModel终极指南:5个步骤轻松掌握虚幻引擎游戏资源提取
  • 告别网盘限速的烦恼:LinkSwift网盘直链下载助手全面评测与使用指南
  • Mac Mouse Fix终极指南:让你的普通鼠标秒变苹果级体验
  • 机器学习势开发:数据剪枝与主动学习提升模型泛化能力
  • 污水管网在线监测系统,精准定位污水偷排源头
  • Vue2-Verify:一站式解决Vue.js验证码需求的终极指南
  • UE5里3D Widget播放动态UI总“拖影”?一个材质参数就能搞定
  • 5步轻松上手:用yuzu模拟器在电脑畅玩Switch游戏
  • 终极指南:如何在Windows上直接访问Linux RAID阵列数据