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

210
docker/stop-monitoring.sh Executable file
View File

@@ -0,0 +1,210 @@
#!/bin/bash
# 停止Docker服务监控脚本
set -e
# 颜色定义
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color
# 日志函数
log_info() {
echo -e "${BLUE}[INFO]${NC} $1"
}
log_success() {
echo -e "${GREEN}[SUCCESS]${NC} $1"
}
log_warning() {
echo -e "${YELLOW}[WARNING]${NC} $1"
}
log_error() {
echo -e "${RED}[ERROR]${NC} $1"
}
# 停止监控进程
stop_monitoring() {
log_info "停止监控进程..."
local monitor_pid_file="./storage/logs/monitor.pid"
local stopped=false
# 通过PID文件停止
if [ -f "$monitor_pid_file" ]; then
local monitor_pid=$(cat "$monitor_pid_file")
if kill -0 $monitor_pid 2>/dev/null; then
log_info "通过PID文件停止监控进程 (PID: $monitor_pid)"
kill $monitor_pid
sleep 2
# 确认进程已停止
if ! kill -0 $monitor_pid 2>/dev/null; then
log_success "监控进程已停止"
stopped=true
else
log_warning "监控进程未响应TERM信号尝试强制停止..."
kill -9 $monitor_pid 2>/dev/null || true
sleep 1
if ! kill -0 $monitor_pid 2>/dev/null; then
log_success "监控进程已强制停止"
stopped=true
fi
fi
else
log_warning "PID文件中的进程不存在"
fi
rm -f "$monitor_pid_file"
fi
# 通过进程名停止(备用方法)
if [ "$stopped" = false ]; then
log_info "通过进程名查找并停止监控进程..."
local pids=$(pgrep -f "monitor-services.sh" || true)
if [ -n "$pids" ]; then
for pid in $pids; do
log_info "停止监控进程 (PID: $pid)"
kill $pid 2>/dev/null || true
done
sleep 2
# 检查是否还有进程运行
local remaining_pids=$(pgrep -f "monitor-services.sh" || true)
if [ -n "$remaining_pids" ]; then
log_warning "强制停止剩余的监控进程..."
for pid in $remaining_pids; do
kill -9 $pid 2>/dev/null || true
done
fi
log_success "所有监控进程已停止"
stopped=true
else
log_info "未找到运行中的监控进程"
stopped=true
fi
fi
return 0
}
# 停止Docker服务
stop_services() {
log_info "停止Docker服务..."
if docker-compose ps -q | grep -q .; then
docker-compose down
log_success "Docker服务已停止"
else
log_info "没有运行中的Docker服务"
fi
}
# 清理日志文件
cleanup_logs() {
local cleanup_logs=$1
if [ "$cleanup_logs" = true ]; then
log_info "清理监控日志文件..."
local log_files=(
"./storage/logs/monitor.log"
"./storage/logs/monitor-output.log"
"./storage/logs/restart_counters"
)
for item in "${log_files[@]}"; do
if [ -f "$item" ]; then
rm -f "$item"
log_info "删除文件: $item"
elif [ -d "$item" ]; then
rm -rf "$item"
log_info "删除目录: $item"
fi
done
log_success "日志文件清理完成"
fi
}
# 显示使用帮助
show_help() {
echo "停止Docker服务监控脚本"
echo ""
echo "用法: $0 [选项]"
echo ""
echo "选项:"
echo " --stop-services 同时停止Docker服务"
echo " --cleanup-logs 清理监控日志文件"
echo " --all 停止监控、服务并清理日志"
echo " -h, --help 显示此帮助信息"
echo ""
echo "默认情况下此脚本只停止监控进程不影响Docker服务。"
}
# 主函数
main() {
local stop_services_flag=false
local cleanup_logs_flag=false
# 解析命令行参数
while [[ $# -gt 0 ]]; do
case $1 in
--stop-services)
stop_services_flag=true
shift
;;
--cleanup-logs)
cleanup_logs_flag=true
shift
;;
--all)
stop_services_flag=true
cleanup_logs_flag=true
shift
;;
-h|--help)
show_help
exit 0
;;
*)
echo "未知选项: $1"
show_help
exit 1
;;
esac
done
echo "========================================"
echo "停止Docker服务监控"
echo "时间: $(date)"
echo "========================================"
# 执行停止操作
stop_monitoring
if [ "$stop_services_flag" = true ]; then
stop_services
fi
cleanup_logs "$cleanup_logs_flag"
echo ""
log_success "操作完成"
if [ "$stop_services_flag" = false ]; then
log_info "Docker服务仍在运行使用 'docker-compose down' 停止服务"
fi
}
# 如果脚本被直接执行
if [[ "${BASH_SOURCE[0]}" == "${0}" ]]; then
main "$@"
fi