更新部署逻辑

This commit is contained in:
2026-07-28 21:22:31 +08:00
parent ef6c75aef9
commit c340e3934c
+48 -8
View File
@@ -359,6 +359,33 @@ do_deploy() {
print_subtitle "开始部署"
echo ""
# ----- 事务前钩子:备份数据库 -----
print_step "备份数据库..."
BACKUP_DIR="${DEPLOY_DIR}/backups"
mkdir -p "$BACKUP_DIR"
DB_FILE="$DATA_DIR/frpc-console.db"
if [ -f "$DB_FILE" ]; then
TIMESTAMP=$(date +%Y%m%d_%H%M%S)
BACKUP_FILE="$BACKUP_DIR/frpc-console.db.$TIMESTAMP"
cp "$DB_FILE" "$BACKUP_FILE"
print_info "已备份: $BACKUP_FILE"
# 检查数据库是否有效(存在 users 表)
if command -v sqlite3 &> /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
# ----- 安装必要工具 -----
if [ "$NEED_INSTALL_GIT" = true ] || [ "$NEED_INSTALL_CURL" = true ] || [ "$NEED_INSTALL_WGET" = true ]; then
print_step "安装必要工具..."
@@ -487,14 +514,10 @@ do_deploy() {
mkdir -p "$DEPLOY_DIR"
mkdir -p "$DATA_DIR"
DB_FILE="$DATA_DIR/frpc-console.db"
if [ "$CONTAINER_EXISTS" = true ] && [ -f "$DB_FILE" ] && [ -s "$DB_FILE" ]; then
print_info "已有有效数据库文件,保留现有数据"
elif [ -f "$DB_FILE" ] && [ -s "$DB_FILE" ]; then
print_info "检测到有效数据库文件,保留现有数据"
if [ -f "$DB_FILE" ]; then
print_info "数据库文件存在,将保留"
else
touch "$DB_FILE"
print_info "新数据目录已创建"
print_info "数据库文件不存在,容器启动时将自动创建"
fi
cp frpc-console "$DEPLOY_DIR/"
@@ -533,14 +556,30 @@ do_deploy() {
exit 1
fi
# ----- 检查 frpc 子进程 -----
# ----- 检查 frpc 子进程(增强版) -----
print_step "检查 frpc 状态..."
sleep 3
# 先确认容器在运行
if docker ps --format '{{.Names}}' | grep -q "^frpc-console$"; then
# 再检查 frpc 进程
if docker exec frpc-console ps aux 2>/dev/null | grep -q "[f]rpc -c"; then
print_success "frpc 进程运行正常"
else
print_warn "frpc 进程未运行(可能配置为空,请在 WebUI 中导入 TOML"
fi
else
print_error "frpc-console 容器未运行,请检查日志"
exit 1
fi
# ----- 事务后钩子:检测数据库是否可用 -----
print_step "验证数据库状态..."
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
# ----- 清理临时文件 -----
print_step "清理临时文件..."
@@ -555,6 +594,7 @@ do_deploy() {
echo ""
echo -e " ${CYAN}📍 访问地址:${NC} http://$(hostname -I | awk '{print $1}'):${PORT}"
echo -e " ${CYAN}📂 数据目录:${NC} ${DATA_DIR}"
echo -e " ${CYAN}📦 备份目录:${NC} ${BACKUP_DIR}"
echo -e " ${CYAN}🐳 容器名称:${NC} frpc-console"
echo ""
echo -e " ${CYAN}常用命令:${NC}"