feat: 首次推送到Gitea - 完整项目代码 + 安全加固 + 知识库
This commit is contained in:
@@ -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
|
||||
Reference in New Issue
Block a user