更新部署逻辑
This commit is contained in:
@@ -359,6 +359,33 @@ do_deploy() {
|
|||||||
print_subtitle "开始部署"
|
print_subtitle "开始部署"
|
||||||
echo ""
|
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
|
if [ "$NEED_INSTALL_GIT" = true ] || [ "$NEED_INSTALL_CURL" = true ] || [ "$NEED_INSTALL_WGET" = true ]; then
|
||||||
print_step "安装必要工具..."
|
print_step "安装必要工具..."
|
||||||
@@ -487,14 +514,10 @@ do_deploy() {
|
|||||||
mkdir -p "$DEPLOY_DIR"
|
mkdir -p "$DEPLOY_DIR"
|
||||||
mkdir -p "$DATA_DIR"
|
mkdir -p "$DATA_DIR"
|
||||||
|
|
||||||
DB_FILE="$DATA_DIR/frpc-console.db"
|
if [ -f "$DB_FILE" ]; then
|
||||||
if [ "$CONTAINER_EXISTS" = true ] && [ -f "$DB_FILE" ] && [ -s "$DB_FILE" ]; then
|
print_info "数据库文件存在,将保留"
|
||||||
print_info "已有有效数据库文件,保留现有数据"
|
|
||||||
elif [ -f "$DB_FILE" ] && [ -s "$DB_FILE" ]; then
|
|
||||||
print_info "检测到有效数据库文件,保留现有数据"
|
|
||||||
else
|
else
|
||||||
touch "$DB_FILE"
|
print_info "数据库文件不存在,容器启动时将自动创建"
|
||||||
print_info "新数据目录已创建"
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
cp frpc-console "$DEPLOY_DIR/"
|
cp frpc-console "$DEPLOY_DIR/"
|
||||||
@@ -533,13 +556,29 @@ do_deploy() {
|
|||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# ----- 检查 frpc 子进程 -----
|
# ----- 检查 frpc 子进程(增强版) -----
|
||||||
print_step "检查 frpc 状态..."
|
print_step "检查 frpc 状态..."
|
||||||
sleep 3
|
sleep 3
|
||||||
if docker exec frpc-console ps aux 2>/dev/null | grep -q "[f]rpc -c"; then
|
|
||||||
print_success "frpc 进程运行正常"
|
# 先确认容器在运行
|
||||||
|
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
|
else
|
||||||
print_warn "frpc 进程未运行(可能配置为空,请在 WebUI 中导入 TOML)"
|
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
|
fi
|
||||||
|
|
||||||
# ----- 清理临时文件 -----
|
# ----- 清理临时文件 -----
|
||||||
@@ -555,6 +594,7 @@ do_deploy() {
|
|||||||
echo ""
|
echo ""
|
||||||
echo -e " ${CYAN}📍 访问地址:${NC} http://$(hostname -I | awk '{print $1}'):${PORT}"
|
echo -e " ${CYAN}📍 访问地址:${NC} http://$(hostname -I | awk '{print $1}'):${PORT}"
|
||||||
echo -e " ${CYAN}📂 数据目录:${NC} ${DATA_DIR}"
|
echo -e " ${CYAN}📂 数据目录:${NC} ${DATA_DIR}"
|
||||||
|
echo -e " ${CYAN}📦 备份目录:${NC} ${BACKUP_DIR}"
|
||||||
echo -e " ${CYAN}🐳 容器名称:${NC} frpc-console"
|
echo -e " ${CYAN}🐳 容器名称:${NC} frpc-console"
|
||||||
echo ""
|
echo ""
|
||||||
echo -e " ${CYAN}常用命令:${NC}"
|
echo -e " ${CYAN}常用命令:${NC}"
|
||||||
|
|||||||
Reference in New Issue
Block a user