feat: 首次推送到Gitea - 完整项目代码 + 安全加固 + 知识库

This commit is contained in:
ZhuiGuangAI Dev
2026-10-02 18:52:49 +08:00
parent b44601bb66
commit 8205ae709c
1185 changed files with 49841 additions and 12802 deletions
+121
View File
@@ -0,0 +1,121 @@
#!/bin/bash
# =============================================================================
# 追光AI 部署验证脚本 (Docker 版)
# - 检查 Docker 容器状态
# - 验证 APP/API 端点响应
# - 检查 CRON 容器健康状态
# - 用法: bash scripts/verify-deploy-docker.sh
# =============================================================================
set -e
APP_PORT="${APP_PORT:-8301}"
APP_URL="http://127.0.0.1:${APP_PORT}"
PASS=0
FAIL=0
check() {
local label="$1"
shift
if "$@" >/dev/null 2>&1; then
echo " ✅ $label"
PASS=$((PASS + 1))
else
echo " ❌ $label"
FAIL=$((FAIL + 1))
fi
}
echo "========================================"
echo " 追光AI 部署验证 ($(date '+%Y-%m-%d %H:%M:%S'))"
echo "========================================"
echo ""
# ---- 1) Docker 容器状态 ----
echo "=== 1) Docker 容器状态 ==="
docker compose ps 2>/dev/null || docker ps --filter "name=zhuiguang" --format "table {{.Names}}\t{{.Status}}"
echo ""
check "APP 容器运行中" docker compose ps app 2>/dev/null | grep -q "Up" || docker ps --filter "name=zhuiguang.*app" --filter "status=running" | grep -q .
check "CRON 容器运行中" docker compose ps cron 2>/dev/null | grep -q "Up" || docker ps --filter "name=zhuiguang.*cron" --filter "status=running" | grep -q .
# ---- 2) APP 健康检查 ----
echo ""
echo "=== 2) APP 端点验证 ==="
# 主页
HTTP_MAIN=$(curl -s -o /dev/null -m 5 -w "%{http_code}" "${APP_URL}/" 2>/dev/null || echo "000")
if [ "$HTTP_MAIN" = "200" ]; then
echo " ✅ 主页 (/) HTTP=$HTTP_MAIN"
PASS=$((PASS + 1))
else
echo " ❌ 主页 (/) HTTP=$HTTP_MAIN"
FAIL=$((FAIL + 1))
fi
# 关键 API 端点
for endpoint in \
"api/forum/categories:论坛分类" \
"api/tools:工具列表" \
"api/skills:技能列表" \
"api/admin/overview:管理概览" \
"api/rss:订阅源"
do
path="${endpoint%%:*}"
label="${endpoint##*:}"
code=$(curl -s -o /dev/null -m 5 -w "%{http_code}" "${APP_URL}/${path}" 2>/dev/null || echo "000")
if [ "$code" = "200" ]; then
echo " ✅ ${label} (/${path}) HTTP=$code"
PASS=$((PASS + 1))
else
echo " ❌ ${label} (/${path}) HTTP=$code"
FAIL=$((FAIL + 1))
fi
done
# ---- 3) 管理后台 API (需认证) ----
echo ""
echo "=== 3) 管理后台 API 状态 ==="
for endpoint in \
"api/admin/bot-quality:Bot质量" \
"api/admin/bots/stats?days=7:Bot统计"
do
path="${endpoint%%:*}"
label="${endpoint##*:}"
code=$(curl -s -o /dev/null -m 5 -w "%{http_code}" "${APP_URL}/${path}" 2>/dev/null || echo "000")
if [ "$code" = "200" ] || [ "$code" = "401" ]; then
echo " ✅ ${label} (/${path}) HTTP=$code"
PASS=$((PASS + 1))
else
echo " ❌ ${label} (/${path}) HTTP=$code"
FAIL=$((FAIL + 1))
fi
done
# ---- 4) 备份状态 ----
echo ""
echo "=== 4) 备份状态 ==="
BACKUP_DIR="/home/ubuntu/zhuiguang-ai-backup/dockers"
if [ -d "$BACKUP_DIR" ]; then
LATEST=$(ls -t "$BACKUP_DIR" 2>/dev/null | head -1)
if [ -n "$LATEST" ]; then
echo " ✅ 最新备份: $LATEST"
PASS=$((PASS + 1))
else
echo " ⚠️ 备份目录为空"
fi
else
echo " ⚠️ 备份目录不存在: $BACKUP_DIR"
fi
# ---- 汇总 ----
echo ""
echo "========================================"
echo " 结果: ${PASS} 通过 / ${FAIL} 失败"
if [ "$FAIL" -eq 0 ]; then
echo " 🟢 全部通过"
else
echo " 🔴 存在 ${FAIL} 项异常,请检查"
fi
echo "========================================"
exit $FAIL