122 lines
3.4 KiB
Bash
122 lines
3.4 KiB
Bash
#!/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
|