diff --git a/deploy.sh b/deploy.sh index 951e914..5610cfc 100644 --- a/deploy.sh +++ b/deploy.sh @@ -151,12 +151,12 @@ generate_target_version() { } get_current_version() { - local version_file="${DEPLOY_DIR}/version.ini" + local version_file="${DEPLOY_DIR}/data/version.ini" if [ -f "$version_file" ]; then grep -v "^[;#]" "$version_file" | head -1 | tr -d '\n' else if [ "$CONTAINER_EXISTS" = true ]; then - docker exec frpc-console cat /app/version.ini 2>/dev/null | grep -v "^[;#]" | head -1 | tr -d '\n' || echo "" + docker exec frpc-console cat /app/data/version.ini 2>/dev/null | grep -v "^[;#]" | head -1 | tr -d '\n' || echo "" else echo "" fi @@ -325,7 +325,6 @@ do_deploy() { # ----- 事务前钩子:备份数据库(仅降级时) ----- BACKUP_DIR="" if [ -n "$CURRENT_VERSION" ] && [ -n "$TARGET_VERSION" ]; then - # 提取语义版本比较 CUR_SEMVER=$(echo "$CURRENT_VERSION" | sed -E 's/^([0-9]+\.[0-9]+).*$/\1/') TGT_SEMVER=$(echo "$TARGET_VERSION" | sed -E 's/^([0-9]+\.[0-9]+).*$/\1/') if [ "$TGT_SEMVER" \< "$CUR_SEMVER" ] 2>/dev/null; then @@ -396,55 +395,52 @@ do_deploy() { fi # ----- 准备部署目录 ----- -print_step "准备部署目录..." -mkdir -p "$DEPLOY_DIR" -mkdir -p "$DATA_DIR" + print_step "准备部署目录..." + mkdir -p "$DEPLOY_DIR" + mkdir -p "$DATA_DIR" -# ----- 检测并迁移旧版本文件(从根目录迁移到 data/)----- -print_step "检测旧版本文件..." + # ----- 检测并迁移旧版本文件(从根目录迁移到 data/)----- + print_step "检测旧版本文件..." -OLD_DB="${DEPLOY_DIR}/frpc-console.db" -OLD_TOML="${DEPLOY_DIR}/frpc.toml" -OLD_LOG="${DEPLOY_DIR}/frpc.log" -OLD_PID="${DEPLOY_DIR}/frpc.pid" -OLD_VERSION="${DEPLOY_DIR}/version.ini" -NEW_DB="${DATA_DIR}/frpc-console.db" + OLD_DB="${DEPLOY_DIR}/frpc-console.db" + OLD_TOML="${DEPLOY_DIR}/frpc.toml" + OLD_LOG="${DEPLOY_DIR}/frpc.log" + OLD_PID="${DEPLOY_DIR}/frpc.pid" + OLD_VERSION="${DEPLOY_DIR}/version.ini" + NEW_DB="${DATA_DIR}/frpc-console.db" -# 如果根目录有旧数据库文件,但 data/ 目录没有,执行迁移 -if [ -f "$OLD_DB" ] && [ ! -f "$NEW_DB" ]; then - print_warn "检测到旧版本数据库文件在根目录,将迁移到 data/ 子目录" + if [ -f "$OLD_DB" ] && [ ! -f "$NEW_DB" ]; then + print_warn "检测到旧版本数据库文件在根目录,将迁移到 data/ 子目录" - # 备份旧文件 - BACKUP_OLD_DIR="${DEPLOY_DIR}/.old_backup_$(date +%Y%m%d_%H%M%S)" - mkdir -p "$BACKUP_OLD_DIR" + BACKUP_OLD_DIR="${DEPLOY_DIR}/.old_backup_$(date +%Y%m%d_%H%M%S)" + mkdir -p "$BACKUP_OLD_DIR" - for file in frpc-console.db frpc.toml frpc.log frpc.pid version.ini; do - if [ -f "${DEPLOY_DIR}/${file}" ]; then - cp "${DEPLOY_DIR}/${file}" "${BACKUP_OLD_DIR}/" 2>/dev/null || true - print_info " 已备份: ${file}" - fi - done + for file in frpc-console.db frpc.toml frpc.log frpc.pid version.ini; do + if [ -f "${DEPLOY_DIR}/${file}" ]; then + cp "${DEPLOY_DIR}/${file}" "${BACKUP_OLD_DIR}/" 2>/dev/null || true + print_info " 已备份: ${file}" + fi + done - # 复制文件到 data/ 目录 - for file in frpc-console.db frpc.toml frpc.log frpc.pid version.ini; do - if [ -f "${DEPLOY_DIR}/${file}" ]; then - cp "${DEPLOY_DIR}/${file}" "${DATA_DIR}/" 2>/dev/null || true - print_info " 已迁移: ${file} → data/" - fi - done + for file in frpc-console.db frpc.toml frpc.log frpc.pid version.ini; do + if [ -f "${DEPLOY_DIR}/${file}" ]; then + cp "${DEPLOY_DIR}/${file}" "${DATA_DIR}/" 2>/dev/null || true + print_info " 已迁移: ${file} → data/" + fi + done - print_success "旧文件已迁移到 data/ 目录" - print_info "旧文件备份位置: ${BACKUP_OLD_DIR}" - print_info "确认服务正常后,可手动删除备份目录" -else - print_info "未检测到需要迁移的旧文件" -fi + print_success "旧文件已迁移到 data/ 目录" + print_info "旧文件备份位置: ${BACKUP_OLD_DIR}" + print_info "确认服务正常后,可手动删除备份目录" + else + print_info "未检测到需要迁移的旧文件" + fi -# ----- 构建 Docker 镜像 ----- -print_step "构建 Docker 镜像..." -docker build --no-cache \ - -t "${IMAGE_NAME}:${IMAGE_TAG}" \ - . + # ----- 构建 Docker 镜像 ----- + print_step "构建 Docker 镜像..." + docker build --no-cache \ + -t "${IMAGE_NAME}:${IMAGE_TAG}" \ + . if [ $? -ne 0 ]; then print_error "Docker 构建失败" exit 1 @@ -471,7 +467,6 @@ docker build --no-cache \ # ----- 启动新容器 ----- print_step "启动 frpc-console 容器..." -# 启动容器(只挂载数据目录) docker run -d \ --name frpc-console \ --restart=always \ @@ -509,20 +504,24 @@ docker build --no-cache \ print_warn "frpc 进程未运行(PID 文件不存在,请导入 TOML 后重试)" fi - # ----- 验证数据库 ----- + # ----- 事务后钩子:检测数据库 ----- print_step "验证数据库状态..." - if docker exec frpc-console sqlite3 /app/frpc-console.db "SELECT COUNT(*) FROM users;" 2>/dev/null | grep -q "^[0-9]"; then + if docker exec frpc-console sqlite3 /app/data/frpc-console.db "SELECT COUNT(*) FROM users;" 2>/dev/null | grep -q "^[0-9]"; then print_success "数据库可用" else print_warn "数据库为空或不可用,请通过 WebUI 注册管理员账户" fi # ----- 验证版本 ----- - CONTAINER_VERSION=$(docker exec frpc-console cat /app/version.ini 2>/dev/null | tr -d '\n' || echo "") + print_step "验证版本..." + sleep 1 + CONTAINER_VERSION=$(docker exec frpc-console cat /app/data/version.ini 2>/dev/null | grep -v "^[;#]" | head -1 | tr -d '\n' || echo "unknown") + echo -e " 容器版本: ${CONTAINER_VERSION}" + echo -e " 目标版本: ${TARGET_VERSION}" if [ "$CONTAINER_VERSION" = "$TARGET_VERSION" ]; then - print_success "容器版本验证通过: ${CONTAINER_VERSION}" + print_success "版本写入成功" else - print_warn "容器版本: ${CONTAINER_VERSION}, 目标版本: ${TARGET_VERSION}" + print_warn "版本不匹配,请检查" fi # ----- 清理旧镜像 ----- @@ -576,7 +575,7 @@ docker build --no-cache \ echo -e " ${CYAN}常用命令:${NC}" echo " docker logs frpc-console # 查看日志" echo " docker restart frpc-console # 重启服务" - echo " cat ${DEPLOY_DIR}/version.ini # 查看当前版本" + echo " cat ${DEPLOY_DIR}/data/version.ini # 查看当前版本" echo "" echo -e " ${YELLOW}首次访问需要注册管理员账户${NC}" echo ""