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>
This commit is contained in:
2026-02-28 15:51:19 +08:00
parent acf549c43c
commit 3c206e9e06
90 changed files with 12731 additions and 1255 deletions

116
docker/start-production.sh Executable file
View File

@@ -0,0 +1,116 @@
#!/bin/bash
# Laravel知识库系统 - 生产环境启动脚本
set -e
echo "🚀 启动Laravel知识库系统生产环境..."
# 检查必要文件
if [ ! -f ".env" ]; then
echo "❌ 错误: .env文件不存在"
echo "请复制.env.production为.env并配置相应参数"
exit 1
fi
if [ ! -f "docker-compose.yml" ]; then
echo "❌ 错误: docker-compose.yml文件不存在"
exit 1
fi
# 创建必要的目录
echo "📁 创建存储目录..."
mkdir -p storage/mysql
mkdir -p storage/redis
mkdir -p storage/meilisearch
mkdir -p storage/logs/app
mkdir -p storage/logs/queue
mkdir -p storage/app/public
mkdir -p storage/app/documents
mkdir -p storage/app/markdown
# 设置目录权限
echo "🔐 设置目录权限..."
chmod -R 755 storage/
chmod -R 755 bootstrap/cache/
# 构建应用镜像
echo "🏗️ 构建Docker镜像..."
docker-compose build --no-cache app
# 启动服务
echo "🔄 启动服务..."
docker-compose up -d
# 等待服务启动
echo "⏳ 等待服务启动..."
sleep 30
# 检查服务状态
echo "🔍 检查服务状态..."
docker-compose ps
# 运行Laravel初始化命令
echo "🔧 运行Laravel初始化..."
docker-compose exec app php artisan key:generate --force
docker-compose exec app php artisan migrate --force
docker-compose exec app php artisan config:cache
docker-compose exec app php artisan route:cache
docker-compose exec app php artisan view:cache
docker-compose exec app php artisan storage:link
# 设置文件权限
echo "📝 设置应用权限..."
docker-compose exec app chown -R www-data:www-data /var/www/html/storage
docker-compose exec app chown -R www-data:www-data /var/www/html/bootstrap/cache
# 健康检查
echo "🏥 执行健康检查..."
sleep 10
# 检查Web应用 (Swoole)
if curl -f http://localhost:8000/health > /dev/null 2>&1; then
echo "✅ Web应用健康检查通过"
else
# 如果没有专门的健康检查路由,尝试访问根路径
if curl -f http://localhost:8000/ > /dev/null 2>&1; then
echo "✅ Web应用健康检查通过"
else
echo "❌ Web应用健康检查失败"
fi
fi
# 检查MySQL
if docker-compose exec mysql mysqladmin ping -h localhost --silent; then
echo "✅ MySQL健康检查通过"
else
echo "❌ MySQL健康检查失败"
fi
# 检查Redis
if docker-compose exec redis redis-cli ping > /dev/null 2>&1; then
echo "✅ Redis健康检查通过"
else
echo "❌ Redis健康检查失败"
fi
# 检查Meilisearch
if curl -f http://localhost:7700/health > /dev/null 2>&1; then
echo "✅ Meilisearch健康检查通过"
else
echo "❌ Meilisearch健康检查失败"
fi
echo ""
echo "🎉 生产环境启动完成!"
echo ""
echo "📊 服务访问地址:"
echo " Web应用: http://localhost:8000"
echo " Meilisearch: http://localhost:7700"
echo ""
echo "🔧 管理命令:"
echo " 查看日志: docker-compose logs -f"
echo " 停止服务: docker-compose down"
echo " 重启服务: docker-compose restart"
echo " 查看状态: docker-compose ps"
echo ""