diff --git a/deploy.sh b/deploy.sh index 4511836..b34e82c 100644 --- a/deploy.sh +++ b/deploy.sh @@ -74,15 +74,9 @@ print_subtitle() { echo -e "${MAGENTA} $1${NC}"; } parse_args() { for arg in "$@"; do case $arg in - --yes|-y) - SKIP_CONFIRM=true - ;; - --check) - CHECK_ONLY=true - ;; - --dry-run) - DRY_RUN=true - ;; + --yes|-y) SKIP_CONFIRM=true ;; + --check) CHECK_ONLY=true ;; + --dry-run) DRY_RUN=true ;; --help|-h) echo "用法: ./deploy.sh [选项]" echo "" @@ -165,11 +159,9 @@ print_environment_summary() { print_title print_subtitle "环境检测结果" echo "" - echo -e " ${CYAN}操作系统:${NC} $OS $OS_VERSION" echo -e " ${CYAN}CPU 架构:${NC} $ARCH" echo "" - echo " ${CYAN}必要工具:${NC}" if [ "$HAS_GIT" = true ]; then echo -e " git ✅ 已安装 ($(git --version | awk '{print $3}'))" @@ -186,7 +178,6 @@ print_environment_summary() { else echo " wget ❌ 未安装 (将自动安装)" fi - echo "" echo " ${CYAN}Docker 环境:${NC}" if [ "$HAS_DOCKER" = true ]; then @@ -212,7 +203,6 @@ print_environment_summary() { fi echo -e " ${YELLOW}数据目录中的数据库文件将被保留${NC}" fi - echo "" } @@ -239,10 +229,8 @@ print_deployment_plan() { print_title print_subtitle "部署计划" echo "" - echo -e " ${CYAN}将执行以下操作:${NC}" echo -e "$(echo -e "$PLAN")" - echo "" echo -e " ${CYAN}配置信息:${NC}" echo -e " ────────────────────────────────────" @@ -261,7 +249,6 @@ print_deployment_plan() { fi echo -e " ${YELLOW}数据目录中的数据库文件将被保留${NC}" fi - echo "" } @@ -271,10 +258,8 @@ confirm_deploy() { echo -e "${GREEN}▶ 已启用 --yes,自动确认${NC}" return 0 fi - echo -e -n "${CYAN}确认执行? 输入 Y 继续,输入 n 自定义配置 [Y/n]: ${NC}" read -r CONFIRM /dev/null; then + if ! sqlite3 "$DB_FILE" "SELECT COUNT(*) FROM sqlite_master WHERE type='table' AND name='users';" 2>/dev/null | grep -q "^1$"; then + print_warn "数据库文件无效,将删除,由容器全新初始化" + rm -f "$DB_FILE" + else + print_info "数据库有效,保留" + fi + else + print_warn "sqlite3 未安装,无法检查数据库有效性,保留原文件" + fi + else + print_info "数据库文件不存在,跳过备份" + fi - # ----- 拉取代码(必须在停止容器之前)----- + # ----- 拉取代码 ----- print_step "拉取代码..." rm -rf "$WORK_DIR" git clone --depth 1 --branch "$BRANCH" "$REPO_URL" "$WORK_DIR" @@ -322,13 +324,6 @@ do_deploy() { mkdir -p bin static print_success "代码拉取完成" - # ----- 修复 go.mod(Docker 构建时使用)----- - print_step "检查 go.mod..." - if grep -q "go 1.2[6-9]" go.mod 2>/dev/null; then - print_warn "检测到 go.mod 版本过高,自动降级到 go 1.21" - sed -i 's/go 1.2[6-9].*/go 1.21/' go.mod - fi - # ----- 停止旧容器(拉取代码之后)----- if [ "$CONTAINER_EXISTS" = true ]; then print_step "停止旧容器..." @@ -339,19 +334,17 @@ do_deploy() { print_success "旧容器已清理" fi - # ----- 准备数据目录 ----- + # ----- 准备部署目录 ----- print_step "准备部署目录..." mkdir -p "$DEPLOY_DIR" mkdir -p "$DATA_DIR" - - DB_FILE="${DEPLOY_DIR}/frpc-console.db" if [ -f "$DB_FILE" ]; then print_info "数据库文件存在,将保留" else print_info "数据库文件不存在,容器启动时将自动创建" fi - # ----- 构建 Docker 镜像(内部自动编译)----- + # ----- 构建 Docker 镜像(内部自动处理 go.mod 降级)----- print_step "构建 Docker 镜像..." docker build -t "${IMAGE_NAME}:latest" . print_success "Docker 镜像构建完成: ${IMAGE_NAME}:latest" @@ -377,7 +370,6 @@ do_deploy() { # ----- 检查 frpc 子进程 ----- print_step "检查 frpc 状态..." sleep 3 - if docker ps --format '{{.Names}}' | grep -q "^frpc-console$"; then if docker exec frpc-console ps aux 2>/dev/null | grep -q "[f]rpc -c"; then print_success "frpc 进程运行正常" @@ -406,7 +398,6 @@ do_deploy() { print_title print_success "frpc-console 部署完成!" print_title - echo "" echo -e " ${CYAN}📍 访问地址:${NC} http://$(hostname -I | awk '{print $1}'):${PORT}" echo -e " ${CYAN}📂 数据目录:${NC} ${DEPLOY_DIR}"