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

165
docker/one-click-deploy.sh Executable file
View File

@@ -0,0 +1,165 @@
#!/bin/bash
# 一键部署脚本 - Laravel知识库系统
# 整合镜像导出、压缩、传输和部署功能
set -e
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
PROJECT_ROOT="$(dirname "$SCRIPT_DIR")"
# 颜色输出
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m'
log() {
echo -e "${BLUE}[$(date +'%Y-%m-%d %H:%M:%S')]${NC} $1"
}
log_success() {
echo -e "${GREEN}[$(date +'%Y-%m-%d %H:%M:%S')] ✓${NC} $1"
}
log_error() {
echo -e "${RED}[$(date +'%Y-%m-%d %H:%M:%S')] ✗${NC} $1"
}
show_help() {
cat << EOF
一键部署脚本 - Laravel知识库系统
用法: $0 [模式] [选项]
模式:
export 导出Docker镜像
deploy 部署到OpenEuler服务器
full 完整流程 (导出+部署)
选项:
-h, --help 显示帮助信息
-c, --compress 启用压缩
-v, --verify 验证完整性
--server HOST 目标服务器地址
--user USER SSH用户名
--deploy-dir DIR 部署目录
示例:
$0 export -c -v # 导出并压缩镜像
$0 deploy --server 192.168.1.100 # 部署到服务器
$0 full -c --server 192.168.1.100 # 完整流程
EOF
}
# 默认配置
MODE=""
COMPRESS=false
VERIFY=false
SERVER=""
USER="deploy"
DEPLOY_DIR="/opt/knowledge-base"
# 解析参数
while [[ $# -gt 0 ]]; do
case $1 in
export|deploy|full)
MODE="$1"
shift
;;
-h|--help)
show_help
exit 0
;;
-c|--compress)
COMPRESS=true
shift
;;
-v|--verify)
VERIFY=true
shift
;;
--server)
SERVER="$2"
shift 2
;;
--user)
USER="$2"
shift 2
;;
--deploy-dir)
DEPLOY_DIR="$2"
shift 2
;;
*)
log_error "未知参数: $1"
show_help
exit 1
;;
esac
done
if [[ -z "$MODE" ]]; then
log_error "请指定模式: export, deploy, 或 full"
show_help
exit 1
fi
# 导出镜像
export_images() {
log "开始导出Docker镜像..."
local export_args=""
if [[ "$COMPRESS" == true ]]; then
export_args="$export_args -c"
fi
if [[ "$VERIFY" == true ]]; then
export_args="$export_args -v"
fi
if "$SCRIPT_DIR/export-images.sh" $export_args; then
log_success "镜像导出完成"
else
log_error "镜像导出失败"
exit 1
fi
}
# 部署到服务器
deploy_to_server() {
if [[ -z "$SERVER" ]]; then
log_error "请指定服务器地址 --server"
exit 1
fi
log "开始部署到服务器: $SERVER"
# 传输文件
log "传输部署文件..."
scp -r "${PROJECT_ROOT}/docker-images" "${USER}@${SERVER}:/tmp/"
scp "${SCRIPT_DIR}/deploy-to-openeuler.sh" "${USER}@${SERVER}:/tmp/"
# 远程部署
log "执行远程部署..."
ssh "${USER}@${SERVER}" "sudo /tmp/deploy-to-openeuler.sh -d $DEPLOY_DIR /tmp/docker-images"
log_success "部署完成"
}
# 主流程
case "$MODE" in
export)
export_images
;;
deploy)
deploy_to_server
;;
full)
export_images
deploy_to_server
;;
esac
log_success "操作完成!"