- 添加 Dockerfile 与多套 docker-compose 配置(开发/生产环境) - 集成 Laravel Octane (Swoole) 提升性能 - 新增健康检查、监控脚本及部署文档 - 新增 Docker 镜像离线导入包(MySQL/Redis/Meilisearch) - 优化文档转换、预览服务及队列任务 - 添加 CreateAdminUser 命令与路由健康检查接口 - 新增 Swoole 队列兼容性测试套件 Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
5.9 KiB
5.9 KiB
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用户
- 存储目录适当权限设置
故障排除
常见问题
-
容器启动失败
# 查看详细日志 docker-compose logs [service_name] # 检查配置 docker-compose config -
数据库连接失败
# 检查MySQL状态 docker-compose exec mysql mysqladmin ping # 检查环境变量 docker-compose exec app env | grep DB_ -
权限问题
# 修复存储权限 docker-compose exec app chown -R www-data:www-data /var/www/html/storage -
内存不足
# 检查资源使用 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
支持
如遇到问题,请检查:
- Docker和Docker Compose版本
- 系统资源使用情况
- 环境变量配置
- 网络连接状态
- 日志文件内容