Skip to content

Deploy na Vercel

Instruções completas para deployar o frontend (Next.js) e o backend (FastAPI) na Vercel.


Visão Geral

O projeto usa dois projetos Vercel independentes:

Projeto Diretório Runtime URL
fast-deliv-frontend frontend/ Next.js https://fast-deliv.vercel.app
fast-deliv-backend backend/ Python (Serverless) https://fast-deliv-backend.vercel.app

Backend (FastAPI)

Configuração (backend/vercel.json)

{
  "builds": [
    {
      "src": "app/main.py",
      "use": "@vercel/python",
      "config": { "maxLambdaSize": "15mb" }
    }
  ],
  "routes": [
    { "src": "/(.*)", "dest": "app/main.py" }
  ]
}

O runtime @vercel/python usa o pyproject.toml para instalar dependências automaticamente.

Deploy via CLI

# Instalar Vercel CLI
npm install -g vercel

# Na pasta backend/
cd backend
vercel

# Primeiro deploy (interativo — configuração inicial)
vercel --prod  # depois de configurar

# Deploy em produção
vercel --prod

Deploy via GitHub Actions (recomendado)

# .github/workflows/deploy-backend.yml
name: Deploy Backend

on:
  push:
    branches: [main]
    paths: ['backend/**']

jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-python@v5
        with:
          python-version: '3.12'
      - name: Deploy to Vercel
        run: |
          npm install -g vercel
          cd backend
          vercel --prod --token=${{ secrets.VERCEL_TOKEN }}
        env:
          VERCEL_ORG_ID: ${{ secrets.VERCEL_ORG_ID }}
          VERCEL_PROJECT_ID: ${{ secrets.VERCEL_BACKEND_PROJECT_ID }}

Variáveis de Ambiente no Backend

Configure via vercel env add ou pelo dashboard:

cd backend
vercel env add SUPABASE_URL production
vercel env add SUPABASE_SERVICE_ROLE_KEY production
vercel env add SUPABASE_JWT_SECRET production
vercel env add ASAAS_API_KEY production
vercel env add ASAAS_WEBHOOK_SECRET production
vercel env add ASAAS_BASE_URL production
vercel env add ORS_API_KEY production
vercel env add VAPID_PRIVATE_KEY production
vercel env add NEXT_PUBLIC_VAPID_PUBLIC_KEY production
vercel env add VAPID_SUBJECT production
vercel env add FRONTEND_URL production

Frontend (Next.js)

Configuração (frontend/vercel.json)

{
  "framework": "nextjs",
  "buildCommand": "npm run build",
  "installCommand": "npm install"
}

Deploy via CLI

cd frontend
vercel
vercel --prod  # produção

Deploy via GitHub Actions

# .github/workflows/deploy-frontend.yml
name: Deploy Frontend

on:
  push:
    branches: [main]
    paths: ['frontend/**']

jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-node@v4
        with:
          node-version: '20'
      - name: Deploy to Vercel
        run: |
          npm install -g vercel
          cd frontend
          vercel --prod --token=${{ secrets.VERCEL_TOKEN }}
        env:
          VERCEL_ORG_ID: ${{ secrets.VERCEL_ORG_ID }}
          VERCEL_PROJECT_ID: ${{ secrets.VERCEL_FRONTEND_PROJECT_ID }}

Variáveis de Ambiente no Frontend

cd frontend
vercel env add NEXT_PUBLIC_SUPABASE_URL production
vercel env add NEXT_PUBLIC_SUPABASE_ANON_KEY production
vercel env add NEXT_PUBLIC_API_URL production
vercel env add NEXT_PUBLIC_VAPID_PUBLIC_KEY production
vercel env add NEXT_PUBLIC_STADIA_API_KEY production

Configuração de Domínios

Adicionar domínio personalizado

vercel domains add fastdeliv.com.br

Ou via dashboard: Project > Settings > Domains > Add.

CORS entre frontend e backend

O backend lê FRONTEND_URL para configurar o CORS:

app.add_middleware(
    CORSMiddleware,
    allow_origins=[settings.frontend_url],  # https://fast-deliv.vercel.app
    ...
)

Em produção, defina FRONTEND_URL=https://fast-deliv.vercel.app (ou seu domínio personalizado).


Preview Deployments

A Vercel cria automaticamente um deploy de preview para cada Pull Request.

Para previews funcionarem corretamente, configure as variáveis também para o ambiente preview:

vercel env add ASAAS_BASE_URL preview  # → sandbox.asaas.com
vercel env add ASAAS_API_KEY preview   # → chave sandbox

Preview usa Sandbox ASAAS

Configure o ambiente preview para apontar ao sandbox do ASAAS, nunca à produção.


Limites do Runtime Python na Vercel

Parâmetro Valor
Timeout máximo 300s (Hobby: 60s)
Memória máxima 1024 MB
Tamanho da lambda 15 MB (configurado)
Região padrão iad1 (US East) — configurar sao1 (São Paulo) se disponível

Configurar região (São Paulo)

// backend/vercel.json
{
  "regions": ["gru1"],
  "builds": [...],
  "routes": [...]
}

Disponibilidade de regiões

Verifique quais regiões suportam Python em vercel.com/docs/edge-network/regions.


Troubleshooting de Deploy

Erro: Could not resolve dependency

O Vercel Python runtime usa pip para instalar deps do pyproject.toml. Se uma dependência falhar:

# Testar instalação localmente
pip install -r requirements.txt
# Se não existir requirements.txt, gere um:
uv export --format requirements-txt > requirements.txt

Erro: Function exceeded maximum size

Reduza dependências não utilizadas ou aumente o limite em vercel.json:

{"config": {"maxLambdaSize": "20mb"}}

Variável de ambiente não encontrada

# Listar env vars configuradas
vercel env ls

# Verificar em qual ambiente está configurada (production/preview/development)
vercel env ls production

Logs de deploy

vercel logs https://fast-deliv-backend.vercel.app
# Ou via dashboard: Project > Deployments > View logs