Files
KnowledgeBase/docker/README-production.md
lizhuoran 3c206e9e06 feat: 新增 Docker 部署支持、Swoole/Octane 集成及相关优化
- 添加 Dockerfile 与多套 docker-compose 配置(开发/生产环境)
- 集成 Laravel Octane (Swoole) 提升性能
- 新增健康检查、监控脚本及部署文档
- 新增 Docker 镜像离线导入包(MySQL/Redis/Meilisearch)
- 优化文档转换、预览服务及队列任务
- 添加 CreateAdminUser 命令与路由健康检查接口
- 新增 Swoole 队列兼容性测试套件

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-28 15:51:19 +08:00

5.9 KiB
Raw Blame History

Laravel知识库系统 - 生产环境Docker部署指南

概述

本指南介绍如何使用Docker在生产环境中部署Laravel知识库系统。系统包含以下组件

  • Web应用: Laravel应用 + Swoole (端口8000)
  • 数据库: MySQL 8.0 (端口3306)
  • 缓存: Redis 7 (端口6379)
  • 搜索: Meilisearch v1.5 (端口7700)
  • 队列: Laravel队列处理器

系统要求

  • Docker Engine 20.10+
  • Docker Compose 2.0+
  • 至少4GB可用内存
  • 至少10GB可用磁盘空间

快速开始

1. 环境配置

# 复制环境配置文件
cp .env.production .env

# 编辑环境配置(重要!)
nano .env

必须修改的配置项:

  • APP_KEY: 运行 php artisan key:generate 生成
  • DB_PASSWORD: 设置强密码
  • MEILISEARCH_KEY: 设置搜索引擎主密钥
  • APP_URL: 设置实际域名

2. 启动服务

# 使用启动脚本(推荐)
./docker/start-production.sh

# 或手动启动
docker-compose up -d

3. 验证部署

# 检查服务状态
./docker/check-services.sh

# 访问应用
curl http://localhost/health

服务配置详情

MySQL数据库

  • 镜像: mysql:8.0
  • 端口: 3306
  • 数据持久化: ./storage/mysql
  • 配置文件: ./docker/mysql/my.cnf
  • 字符集: utf8mb4

Redis缓存

  • 镜像: redis:7-alpine
  • 端口: 6379
  • 数据持久化: ./storage/redis
  • 配置文件: ./docker/redis/redis.conf
  • 内存限制: 512MB

Meilisearch搜索

  • 镜像: getmeili/meilisearch:v1.5
  • 端口: 7700
  • 数据持久化: ./storage/meilisearch
  • 内存限制: 1GB

Laravel应用

  • 基础镜像: php:8.2-cli-alpine
  • Web服务器: Swoole (通过 Laravel Octane)
  • 端口: 8000
  • PHP扩展: pdo_mysql, redis, gd, zip, intl等
  • 文档转换: Pandoc

队列处理器

  • 功能: 处理文档转换等后台任务
  • 命令: php artisan queue:work
  • 重试次数: 3次
  • 超时时间: 90秒

数据持久化

所有重要数据都持久化到宿主机:

storage/
├── mysql/          # MySQL数据文件
├── redis/          # Redis数据文件
├── meilisearch/    # 搜索引擎数据
├── app/            # 应用上传文件
└── logs/           # 应用日志
    ├── app/        # Web应用日志
    └── queue/      # 队列处理日志

健康检查

系统包含完整的健康检查机制:

  • Web应用: HTTP检查 /health 端点
  • MySQL: 数据库连接检查
  • Redis: Redis ping检查
  • Meilisearch: API健康检查

管理命令

启动和停止

# 启动所有服务
./docker/start-production.sh

# 停止所有服务
./docker/stop-production.sh

# 重启特定服务
docker-compose restart app

监控和调试

# 检查服务状态
./docker/check-services.sh

# 查看日志
docker-compose logs -f app
docker-compose logs -f mysql
docker-compose logs -f queue

# 进入容器
docker-compose exec app bash
docker-compose exec mysql mysql -u root -p

Laravel管理

# 运行Artisan命令
docker-compose exec app php artisan migrate
docker-compose exec app php artisan queue:work
docker-compose exec app php artisan cache:clear

# 查看队列状态
docker-compose exec app php artisan queue:monitor

性能优化

资源限制

  • 应用容器: 1GB内存限制
  • 队列容器: 512MB内存限制
  • Redis: 512MB内存限制
  • Meilisearch: 1GB内存限制

缓存配置

  • OPcache: 已启用PHP操作码缓存
  • Laravel缓存: 使用Redis存储
  • 配置缓存: 生产环境已启用

安全配置

网络安全

  • 使用专用Docker网络
  • 仅暴露必要端口
  • 容器间通信使用内部网络

数据安全

  • 数据库密码保护
  • Redis可选密码保护
  • Meilisearch主密钥保护

文件权限

  • 应用文件使用www-data用户
  • 存储目录适当权限设置

故障排除

常见问题

  1. 容器启动失败

    # 查看详细日志
    docker-compose logs [service_name]
    
    # 检查配置
    docker-compose config
    
  2. 数据库连接失败

    # 检查MySQL状态
    docker-compose exec mysql mysqladmin ping
    
    # 检查环境变量
    docker-compose exec app env | grep DB_
    
  3. 权限问题

    # 修复存储权限
    docker-compose exec app chown -R www-data:www-data /var/www/html/storage
    
  4. 内存不足

    # 检查资源使用
    docker stats
    
    # 调整内存限制docker-compose.yml
    

日志位置

  • 应用日志: storage/logs/app/
  • 队列日志: storage/logs/queue/
  • MySQL日志: 容器内 /var/log/mysql/
  • Swoole日志: 容器内 /var/log/supervisor/

备份和恢复

数据备份

# 备份MySQL数据
docker-compose exec mysql mysqldump -u root -p knowledge_base > backup.sql

# 备份上传文件
tar -czf storage-backup.tar.gz storage/app/

# 备份搜索数据
tar -czf meilisearch-backup.tar.gz storage/meilisearch/

数据恢复

# 恢复MySQL数据
docker-compose exec -T mysql mysql -u root -p knowledge_base < backup.sql

# 恢复上传文件
tar -xzf storage-backup.tar.gz

更新和维护

应用更新

# 拉取最新代码
git pull

# 重新构建镜像
docker-compose build --no-cache app

# 重启服务
docker-compose up -d

# 运行迁移
docker-compose exec app php artisan migrate

系统维护

# 清理日志
docker-compose exec app php artisan log:clear

# 清理缓存
docker-compose exec app php artisan cache:clear
docker-compose exec app php artisan config:cache

# 优化数据库
docker-compose exec mysql mysqlcheck -u root -p --optimize --all-databases

支持

如遇到问题,请检查:

  1. Docker和Docker Compose版本
  2. 系统资源使用情况
  3. 环境变量配置
  4. 网络连接状态
  5. 日志文件内容