- 添加 Dockerfile 与多套 docker-compose 配置(开发/生产环境) - 集成 Laravel Octane (Swoole) 提升性能 - 新增健康检查、监控脚本及部署文档 - 新增 Docker 镜像离线导入包(MySQL/Redis/Meilisearch) - 优化文档转换、预览服务及队列任务 - 添加 CreateAdminUser 命令与路由健康检查接口 - 新增 Swoole 队列兼容性测试套件 Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
165 lines
3.4 KiB
Bash
Executable File
165 lines
3.4 KiB
Bash
Executable File
#!/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 "操作完成!" |