← Voltar a studyAI — Documentação do Projeto

🚀 Deployment

studyAI — Documentação do Projeto

Apresentação

Deployment — studyAI

Estratégia de deploy, ambientes, e infraestrutura.


Índice

  1. Ambientes
  2. Arquitetura de deploy
  3. Docker
  4. Variáveis de ambiente
  5. CI/CD
  6. Monitorização
  7. Escalabilidade

Ambientes

AmbienteUsoURL
LocalDesenvolvimentolocalhost:3000, localhost:8000
StagingTestes, previewstaging.studyai.example
ProductionUtilizadores finaisapp.studyai.example, api.studyai.example

Arquitetura de deploy

Diagrama (produção)

A carregar diagrama…

Opções de hosting

ComponenteOpção AOpção B
FrontendVercelVM (Docker)
APIRailway, RenderVM (Docker)
DBSupabase, NeonVM (Postgres)
RedisUpstash, Redis CloudVM (Redis)
StorageR2, S3MinIO (self-hosted)
WorkersCelery + RedisInline (API) para MVP

Docker

docker-compose.yml (dev)

version: '3.8'

services:
  api:
    build: ./api
    ports: ["8000:8000"]
    env_file: .env
    depends_on: [db, redis]
    volumes: [./api:/app]

  web:
    build: ./web
    ports: ["3000:3000"]
    env_file: .env
    depends_on: [api]
    volumes: [./web:/app]

  db:
    image: pgvector/pgvector:pg16
    environment:
      POSTGRES_USER: studyai
      POSTGRES_PASSWORD: dev
      POSTGRES_DB: studyai
    ports: ["5432:5432"]
    volumes: [pgdata:/var/lib/postgresql/data]

  redis:
    image: redis:7-alpine
    ports: ["6379:6379"]

  minio:
    image: minio/minio
    command: server /data
    ports: ["9000:9000"]
    volumes: [miniodata:/data]

volumes:
  pgdata:
  miniodata:

Dockerfile (API)

FROM python:3.11-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY . .
CMD ["uvicorn", "app.main:app", "--host", "0.0.0.0", "--port", "8000"]

Dockerfile (Web)

FROM node:20-alpine
WORKDIR /app
COPY package*.json .
RUN npm ci
COPY . .
RUN npm run build
CMD ["npm", "start"]

Variáveis de ambiente

API

VariávelDescriçãoExemplo
DATABASE_URLConnection string Postgrespostgresql://user:pass@host:5432/db
REDIS_URLConnection Redisredis://localhost:6379
STORAGE_ENDPOINTS3 endpointhttp://minio:9000 (dev)
STORAGE_BUCKETBucket namestudyai-files
OPENAI_API_KEYChave OpenAIsk-...
LANGCHAIN_TRACING_V2Ativar LangSmithtrue
LANGCHAIN_API_KEYAPI key LangSmithlsv2_...
LANGCHAIN_PROJECTNome do projetostudyai-dev
JWT_SECRETSecret para JWTrandom 32+ chars
CORS_ORIGINSOrigens permitidashttps://app.studyai.example
ENVAmbientedevelopment | staging | production

Web

VariávelDescriçãoExemplo
NEXT_PUBLIC_API_URLURL da APIhttp://localhost:8000/v1
NEXT_PUBLIC_APP_URLURL do frontendhttp://localhost:3000

CI/CD

Pipeline (exemplo: GitHub Actions)

# .github/workflows/ci.yml
on: [push, pull_request]
jobs:
  test:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - name: Run API tests
        run: |
          cd api && pip install -r requirements.txt
          pytest
      - name: Run Web tests
        run: |
          cd web && npm ci
          npm run build

Deploy

  • Vercel: Auto-deploy do web/ em push para main.
  • API: Deploy manual ou CI que faz build + push para registry + deploy em VM/Railway.
  • Migrations: Correr antes do deploy da API (alembic upgrade head).

Monitorização

Health checks

  • GET /health — API está up
  • GET /health/db — Postgres conecta
  • GET /health/redis — Redis conecta

Métricas (futuro)

  • Latência por endpoint
  • Taxa de erro
  • Uso de tokens (LLM)
  • Custo por user/projeto

Alertas

  • API down
  • DB connection failures
  • Rate limit 429 spike
  • Erros 5xx

Ferramentas

  • LLM tracing: LangSmith (recomendado) ou Langfuse — traces, token usage, evals
  • Logs: Datadog, Axiom, ou self-hosted (Loki)
  • APM: Datadog, Sentry
  • Uptime: UptimeRobot, Better Uptime

Escalabilidade

Fase inicial

  • 1 instância API
  • 1 worker para jobs
  • Postgres single instance
  • Redis single instance

Crescimento

  • API: Múltiplas instâncias atrás de load balancer (stateless)
  • Workers: Escalar Celery workers conforme fila
  • DB: Read replicas se necessário
  • Vector DB: pgvector escala até ~1M chunks; depois considerar Qdrant/Pinecone

Custos

  • LLM: Maior custo variável. Cache de respostas, rate limit.
  • Storage: R2/S3 barato. Limitar tamanho por user.
  • Compute: API e workers. Escalar sob demanda.

Zona de prática

Sem perguntas. Clica em Editar para adicionar.