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:
165
docker/one-click-deploy.sh
Executable file
165
docker/one-click-deploy.sh
Executable 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 "操作完成!"
|
||||
Reference in New Issue
Block a user