#!/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 "=========================================="