Guia completo de deploy da infraestrutura Croko Labs no Render.com
Antes de fazer deploy, certifique-se de ter:
- Conta no Render.com
- Repositório GitHub conectado
- Projeto Supabase configurado
- Cloudinary configurado
- UAZapi (WhatsApp) configurado
- API keys das IAs (Anthropic, Google AI, Mistral)
- Apify API token
- Google Drive Service Account (para export)
# Fazer commit das mudanças locais
git add .
git commit -m "chore: preparar deploy Render.com"
git push origin main- Acesse Render Dashboard
- Clique em "New +" → "Web Service"
- Conecte seu repositório GitHub
- Selecione o repositório
postexpress2 - Configure:
- Name:
postexpress-app - Region: Oregon (US West)
- Branch:
main - Root Directory: (deixe vazio)
- Runtime: Docker
- Dockerfile Path:
./Dockerfile - Docker Context:
.
- Name:
No Render Dashboard → Environment → Adicione as seguintes variáveis:
NODE_ENV=production
PORT=3000
HOSTNAME=0.0.0.0
NEXT_TELEMETRY_DISABLED=1NEXT_PUBLIC_SUPABASE_URL=https://seu-projeto.supabase.co
NEXT_PUBLIC_SUPABASE_ANON_KEY=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...
SUPABASE_URL=https://seu-projeto.supabase.co
SUPABASE_ANON_KEY=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...
SUPABASE_SERVICE_ROLE_KEY=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...🔍 Onde encontrar:
- Supabase Dashboard → Settings → API
- URL está em "Project URL"
- Anon key está em "anon public"
- Service role key está em "service_role" (
⚠️ NUNCA exponha essa key!)
CLOUDINARY_CLOUD_NAME=seu-cloud-name
CLOUDINARY_API_KEY=123456789012345
CLOUDINARY_API_SECRET=abc123xyz456🔍 Onde encontrar:
- Cloudinary Dashboard → Settings → Access Keys
UAZAPI_INSTANCE_ID=sua-instancia
UAZAPI_TOKEN=seu-token
UAZAPI_WEBHOOK_URL=https://postexpress-app.onrender.com/api/whatsapp/webhook🔍 Onde encontrar:
- UAZapi Dashboard → Instâncias
- Webhook URL será gerado DEPOIS do deploy (atualize depois)
ANTHROPIC_API_KEY=sk-ant-api03-...
GOOGLE_AI_API_KEY=AIzaSy...
MISTRAL_API_KEY=...🔍 Onde encontrar:
- Anthropic: https://console.anthropic.com/settings/keys
- Google AI: https://aistudio.google.com/app/apikey
- Mistral: https://console.mistral.ai/api-keys/
APIFY_API_TOKEN=apify_api_...🔍 Onde encontrar:
- Apify Console → Settings → Integrations
GOOGLE_DRIVE_CLIENT_EMAIL=seu-service-account@projeto.iam.gserviceaccount.com
GOOGLE_DRIVE_PRIVATE_KEY=-----BEGIN PRIVATE KEY-----\nMII...
GOOGLE_DRIVE_FOLDER_ID=1abc...xyz🔍 Onde encontrar:
- Google Cloud Console → IAM → Service Accounts
- Criar Service Account → Keys → Create JSON key
- Extrair
client_emaileprivate_keydo JSON
PUPPETEER_SKIP_CHROMIUM_DOWNLOAD=true
PUPPETEER_EXECUTABLE_PATH=/usr/bin/chromium
CHROME_BIN=/usr/bin/chromium
REMOTION_BROWSER_EXECUTABLE=/usr/bin/chromium- Criar endpoint de health check (se não existir):
// app/api/health/route.ts
import { NextResponse } from 'next/server';
export async function GET() {
return NextResponse.json({
status: 'ok',
timestamp: new Date().toISOString(),
service: 'Post Express',
version: '1.0.0'
});
}- No Render Dashboard → Settings:
- Health Check Path:
/api/health - Health Check Timeout: 30 seconds
- Health Check Path:
- Clique em "Create Web Service"
- Aguarde o build (primeira vez pode levar 10-15 minutos)
- Acompanhe os logs em "Logs" tab
curl https://postexpress-app.onrender.com/api/healthResposta esperada:
{
"status": "ok",
"timestamp": "2026-03-01T...",
"service": "Post Express",
"version": "1.0.0"
}curl https://postexpress-app.onrender.com/api/profilesResposta esperada: Lista de perfis ou []
- Copie a URL do serviço:
https://postexpress-app.onrender.com - Atualize UAZapi Webhook URL:
https://postexpress-app.onrender.com/api/whatsapp/webhook - Envie mensagem de teste via WhatsApp
curl -X POST https://postexpress-app.onrender.com/api/content/1/preview-carousel \
-H "Content-Type: application/json" \
-d '{"slideIndex": 0}'Resposta esperada: Imagem PNG em base64
Solução: Verificar se as env vars do Puppeteer estão corretas:
PUPPETEER_EXECUTABLE_PATH=/usr/bin/chromium
CHROME_BIN=/usr/bin/chromiumSolução: Verificar se as 5 variáveis do Supabase estão configuradas:
NEXT_PUBLIC_SUPABASE_URLNEXT_PUBLIC_SUPABASE_ANON_KEYSUPABASE_URLSUPABASE_ANON_KEYSUPABASE_SERVICE_ROLE_KEY
Solução: Atualizar plano no Render.com (Starter tem 512MB RAM, recomendado: 2GB)
Solução:
- Verificar se webhook está configurado no UAZapi
- Testar manualmente:
curl -X POST https://postexpress-app.onrender.com/api/whatsapp/webhook
Solução: Verificar credenciais do Cloudinary (cloud_name, api_key, api_secret)
# Via Render Dashboard
Dashboard → Logs → Enable Auto-scrollRender.com fornece:
- CPU usage
- Memory usage
- Request count
- Response time
Acesso: Dashboard → Metrics
Configure alertas no Render Dashboard:
- Health check failures
- High memory usage
- High CPU usage
- Error rate threshold
O render.yaml já está configurado para:
- ✅ Deploy automático a cada push na branch
main - ✅ Build via Docker
- ✅ Health check em
/api/health
Se precisar fazer deploy manual:
# Render Dashboard
→ Manual Deploy → Deploy latest commitSe algo der errado:
# Render Dashboard
→ Events → Select previous deploy → Redeploy| Plano | RAM | CPU | Custo/mês |
|---|---|---|---|
| Starter | 512MB | 0.5 | $7 |
| Standard | 2GB | 1 | $25 |
| Pro | 4GB | 2 | $85 |
Recomendado: Standard (2GB) devido ao Puppeteer + Remotion
- ✅ Nunca commitar
.envcom valores reais - ✅ Usar Environment Variables do Render.com
- ✅ Service role key do Supabase NUNCA deve ser exposta no client
- ✅ Usar
NEXT_PUBLIC_*apenas para variáveis públicas
- ✅ Render.com fornece SSL/TLS automático
- ✅ Certificado gerenciado automaticamente
- ✅ Força HTTPS por padrão
Implementar rate limiting nas APIs críticas:
/api/whatsapp/webhook/api/content/*/generate-slides-v3
Antes de marcar o deploy como completo:
- Web service rodando sem erros
- Health check retornando 200 OK
- Conexão Supabase funcionando
- Upload Cloudinary funcionando
- Webhook WhatsApp recebendo mensagens
- Renderização de slides (Puppeteer) funcionando
- Export Google Drive funcionando (se configurado)
- SSL/HTTPS ativo
- Monitoramento configurado
- Alertas configurados
- Documentação atualizada
Deploy realizado em: [DATA]
URL de produção: https://postexpress-app.onrender.com
Status: 🟢 Operacional
Croko Labs - Motor de Conteúdo Autônomo™ Versão 1.0 - Deploy Render.com