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)
Deploy via CLI
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
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)
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:
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