78 lines
3.3 KiB
Bash
78 lines
3.3 KiB
Bash
|
|
#!/bin/bash
|
||
|
|
# =============================================================================
|
||
|
|
# 部署后健康检查脚本 — 跑 deploy.sh 后调用
|
||
|
|
# =============================================================================
|
||
|
|
# 用法:bash backend/scripts/post-deploy-healthcheck.sh
|
||
|
|
# 关联:memory/v070-alpha-env-override-bug.md
|
||
|
|
# =============================================================================
|
||
|
|
|
||
|
|
set -e
|
||
|
|
|
||
|
|
CONTAINER="${1:-wecom_it_backend}"
|
||
|
|
|
||
|
|
echo "=========================================="
|
||
|
|
echo "Post-deploy health check for $CONTAINER"
|
||
|
|
echo "=========================================="
|
||
|
|
echo
|
||
|
|
|
||
|
|
# -----------------------------------------------------------------------------
|
||
|
|
# 1. 容器状态
|
||
|
|
# -----------------------------------------------------------------------------
|
||
|
|
echo "--- 1. 容器状态 ---"
|
||
|
|
STATUS=$(sudo docker inspect -f '{{.State.Status}}' "$CONTAINER" 2>&1 || echo "NOT_FOUND")
|
||
|
|
RESTARTING=$(sudo docker inspect -f '{{.State.Restarting}}' "$CONTAINER" 2>&1 || echo "?")
|
||
|
|
echo " status=$STATUS restarting=$RESTARTING"
|
||
|
|
echo
|
||
|
|
|
||
|
|
# -----------------------------------------------------------------------------
|
||
|
|
# 2. 启动日志(最近 30 行,看有没有错误)
|
||
|
|
# -----------------------------------------------------------------------------
|
||
|
|
echo "--- 2. 最近 30 行日志 ---"
|
||
|
|
sudo docker logs --tail 30 "$CONTAINER" 2>&1
|
||
|
|
echo
|
||
|
|
|
||
|
|
# -----------------------------------------------------------------------------
|
||
|
|
# 3. 关键检查:DATABASE_URL 不能含 sqlite
|
||
|
|
# -----------------------------------------------------------------------------
|
||
|
|
echo "--- 3. 容器内 DATABASE_URL 检查(不能含 sqlite) ---"
|
||
|
|
DB_URL=$(sudo docker exec "$CONTAINER" printenv DATABASE_URL 2>&1 || echo "EXEC_FAILED")
|
||
|
|
if echo "$DB_URL" | grep -qi "sqlite"; then
|
||
|
|
echo " ❌ 检测到 sqlite!DATABASE_URL=$DB_URL"
|
||
|
|
echo " 这会导致 backend 启动失败,需要修 .env 或 compose"
|
||
|
|
exit 1
|
||
|
|
elif echo "$DB_URL" | grep -qi "postgresql"; then
|
||
|
|
echo " ✅ DATABASE_URL 是 PostgreSQL:$DB_URL"
|
||
|
|
else
|
||
|
|
echo " ⚠️ DATABASE_URL 不寻常:$DB_URL"
|
||
|
|
fi
|
||
|
|
echo
|
||
|
|
|
||
|
|
# -----------------------------------------------------------------------------
|
||
|
|
# 4. /health 端点
|
||
|
|
# -----------------------------------------------------------------------------
|
||
|
|
echo "--- 4. /health 端点 ---"
|
||
|
|
HEALTH=$(curl -s -w "HTTP %{http_code}" http://127.0.0.1:8000/health 2>&1 || echo "CURL_FAILED")
|
||
|
|
echo " $HEALTH"
|
||
|
|
echo
|
||
|
|
|
||
|
|
# -----------------------------------------------------------------------------
|
||
|
|
# 5. alembic 版本号
|
||
|
|
# -----------------------------------------------------------------------------
|
||
|
|
echo "--- 5. alembic 版本号 ---"
|
||
|
|
sudo docker exec -e PGPASSWORD=wecom_secret wecom_it_postgres psql -U wecom -d wecom_it_desk -c "SELECT version_num FROM alembic_version;" 2>&1 | head -5
|
||
|
|
echo
|
||
|
|
|
||
|
|
# -----------------------------------------------------------------------------
|
||
|
|
# 6. /version 端点
|
||
|
|
# -----------------------------------------------------------------------------
|
||
|
|
echo "--- 6. /version 端点 ---"
|
||
|
|
curl -s http://127.0.0.1:8000/version 2>&1
|
||
|
|
echo
|
||
|
|
|
||
|
|
echo "=========================================="
|
||
|
|
if [ "$STATUS" = "running" ] && ! echo "$HEALTH" | grep -q "CURL_FAILED"; then
|
||
|
|
echo "✅ 所有检查通过,backend 健康"
|
||
|
|
else
|
||
|
|
echo "❌ 有问题,看上面输出定位"
|
||
|
|
fi
|
||
|
|
echo "=========================================="
|