54 lines
1.2 KiB
Bash
54 lines
1.2 KiB
Bash
#!/bin/bash
|
|
set -e
|
|
|
|
echo "🚀 DeepAudit 后端启动中..."
|
|
|
|
# 等待 PostgreSQL 就绪
|
|
echo "⏳ 等待数据库连接..."
|
|
max_retries=30
|
|
retry_count=0
|
|
|
|
while [ $retry_count -lt $max_retries ]; do
|
|
if .venv/bin/python -c "
|
|
import asyncio
|
|
from sqlalchemy.ext.asyncio import create_async_engine
|
|
import os
|
|
|
|
async def check_db():
|
|
engine = create_async_engine(os.environ.get('DATABASE_URL', ''))
|
|
try:
|
|
async with engine.connect() as conn:
|
|
await conn.execute(text('SELECT 1'))
|
|
return True
|
|
except Exception:
|
|
return False
|
|
finally:
|
|
await engine.dispose()
|
|
|
|
from sqlalchemy import text
|
|
exit(0 if asyncio.run(check_db()) else 1)
|
|
" 2>/dev/null; then
|
|
echo "✅ 数据库连接成功"
|
|
break
|
|
fi
|
|
|
|
retry_count=$((retry_count + 1))
|
|
echo " 重试 $retry_count/$max_retries..."
|
|
sleep 2
|
|
done
|
|
|
|
if [ $retry_count -eq $max_retries ]; then
|
|
echo "❌ 无法连接到数据库,请检查 DATABASE_URL 配置"
|
|
exit 1
|
|
fi
|
|
|
|
# 运行数据库迁移
|
|
echo "📦 执行数据库迁移..."
|
|
.venv/bin/alembic upgrade head
|
|
|
|
echo "✅ 数据库迁移完成"
|
|
|
|
# 启动 uvicorn
|
|
echo "🌐 启动 API 服务..."
|
|
exec .venv/bin/uvicorn app.main:app --host 0.0.0.0 --port 8000
|