🔧 chore: Ajustando configuração de deploy, inicialização automática e dependências para execução no Cloud Run.

main
parent e68b32a177
commit cc02d04097

2
.gitignore vendored

@ -53,6 +53,7 @@ htmlcov/
# Google Cloud # Google Cloud
google_credentials.json google_credentials.json
service-account-key.json service-account-key.json
optimum-tensor-*.json
*.p12 *.p12
*.pem *.pem
@ -99,4 +100,3 @@ temp/
# Arquivos do sistema # Arquivos do sistema
.DS_Store .DS_Store
Thumbs.db Thumbs.db
optimum-tensor-*.json

@ -38,7 +38,7 @@ ENV PATH=/root/.local/bin:$PATH
EXPOSE 8080 EXPOSE 8080
HEALTHCHECK --interval=30s --timeout=5s --start-period=10s --retries=3 \ #HEALTHCHECK --interval=30s --timeout=5s --start-period=10s --retries=3 \
CMD python -c "import httpx; httpx.get('http://localhost:8080/docs', timeout=5)" || exit 1 # CMD python -c "import httpx; httpx.get('http://localhost:8080/docs', timeout=5)" || exit 1
CMD ["sh", "-c", "uvicorn app.main:app --host 0.0.0.0 --port ${PORT:-8080}"] CMD ["sh", "-c", "uvicorn app.main:app --host 0.0.0.0 --port ${PORT:-8080}"]

@ -3,29 +3,23 @@ from sqlalchemy.orm import sessionmaker, declarative_base
from app.core.settings import settings from app.core.settings import settings
if settings.cloud_sql_connection_name: if settings.cloud_sql_connection_name:
# Cloud Run # Cloud Run - Formato para PostgreSQL
# Note que usamos 'host' dentro da query string para apontar o socket
DATABASE_URL = ( DATABASE_URL = (
f"postgresql+psycopg2://{settings.db_user}:" f"postgresql+psycopg2://{settings.db_user}:{settings.db_password}@/{settings.db_name}"
f"{settings.db_password}@/"
f"{settings.db_name}"
f"?host=/cloudsql/{settings.cloud_sql_connection_name}" f"?host=/cloudsql/{settings.cloud_sql_connection_name}"
) )
else: else:
# Ambiente local # Ambiente local (via Cloud SQL Proxy)
DATABASE_URL = ( DATABASE_URL = (
f"postgresql+psycopg2://{settings.db_user}:" f"postgresql+psycopg2://{settings.db_user}:{settings.db_password}@"
f"{settings.db_password}@" f"127.0.0.1:5432/{settings.db_name}"
f"{settings.db_host}:"
f"{settings.db_port}/"
f"{settings.db_name}"
) )
engine = create_engine( engine = create_engine(
DATABASE_URL, DATABASE_URL,
echo=True,
pool_pre_ping=True, pool_pre_ping=True,
pool_recycle=3600, connect_args={"connect_timeout": 5} # Evita travar o startup por muito tempo
connect_args={"connect_timeout": 10}
) )
SessionLocal = sessionmaker( SessionLocal = sessionmaker(

@ -12,20 +12,25 @@ app.include_router(tool_router)
@app.on_event("startup") @app.on_event("startup")
def startup_event(): async def startup_event():
""" """
Inicializa o banco de dados e executa seeds se necessário. Inicializa o banco de dados e executa seeds automaticamente.
""" """
try: try:
print("🚀 Inicializando banco de dados...") print("🚀 [Auto-Seed] Iniciando configuração do banco...")
# 1. Cria as tabelas se não existirem
# O engine deve estar configurado para usar o Unix Socket no Cloud Run
Base.metadata.create_all(bind=engine) Base.metadata.create_all(bind=engine)
# 2. Executa a seed das ferramentas
from app.db.tool_seed import seed_tools from app.db.tool_seed import seed_tools
seed_tools() seed_tools()
print("Banco inicializado com sucesso.") print("[Auto-Seed] Tabelas e ferramentas configuradas com sucesso.")
except Exception as e: except Exception as e:
print(f"❌ Erro ao inicializar banco: {e}") # IMPORTANTE: Logamos o erro mas NÃO damos 'raise e'
raise e # Isso permite que o Uvicorn abra a porta 8080 e o deploy complete
print(f"⚠️ [Auto-Seed] Aviso: Falha na inicialização automática: {e}")
print("A aplicação tentará operar, verifique a conexão com o Cloud SQL.")

Binary file not shown.
Loading…
Cancel
Save