COMERCIALRS — PLANO COMPLETO DE MIGRAÇÃO Cloud → Self-Hosted (VPS)
Data do plano: 23/06/2026 | Execução: 27/06/2026 (sábado) | Status: PRONTO
📌 RESUMO EXECUTIVO
Migração do ComercialRS de Supabase Cloud (dauftiqcvgaydddoxqhh) para Supabase Self-Hosted no VPS 31.97.243.106.
Tempo estimado: 4-8 horas (com testes)
Risco: Alto se não seguir o plano exatamente
Janela de manutenção: Necessária (~2h de janela)
🔑 PALAVRA-CHAVE PARA ACIONAR ESTE PLANO
`
MIGRAR
`
> Fale "MIGRAR" no Discord que o Hermes puxa este plano completo e começa.
🔧 PRÉ-REQUISITOS (antes de começar)
- - [ ] Acesso ao Supabase Cloud Dashboard (conta com owner do projeto)
- - [ ] Acesso SSH ao VPS
31.97.243.106 - - [ ] Acesso ao Vault (este documento)
- - [ ] Backup completo já criado (
COMERCIALRS-COMPLETO-BACKUP-2026-06-23.md) - - [ ] Acesso ao Painel Agente SDR (opcional — só se precisar de leads)
- - Credenciais Cloud e Self-Hosted
- - Arquitetura completa
- - Lista de Edge Functions
- - Schema das tabelas
- - Scripts e conexões
- - Plano de rollback
- - [ ] Login funciona
- - [ ] Dashboard carrega dados
- - [ ] Criar/editar cliente
- - [ ] Criar/editar lead
- - [ ] Criar/editar tarefa
- - [ ] WhatsApp webhook recebe mensagens
- - [ ] Meta webhook processa botões
- - [ ] Task alerts disparando
- - [ ] Edge Functions respondendo
- - [ ] Storage upload/download funciona
- - [ ] Realtime atualizando (se usado)
📦 STACK ATUAL (origem — Cloud)
`
Supabase Cloud: ref=dauftiqcvgaydddoxqhh
├── PostgreSQL: db.dauftiqcvgaydddoxqhh.supabase.co:5432
├── Auth: auth.dauftiqcvgaydddoxqhh.supabase.co
├── REST API: db.dauftiqcvgaydddoxqhh.supabase.co/rest/v1
├── Storage: supabase.storage.dauftiqcvgaydddoxqhh.supabase.co
├── Edge Functions: db.dauftiqcvgaydddoxqhh.supabase.co/functions/v1
└── Realtime: db.dauftiqcvgaydddoxqhh.supabase.co/realtime/v1
`
📦 STACK DESTINO (self-hosted — VPS)
`
Supabase Self-Hosted (Docker): ref=rochasales
├── Kong Gateway: http://localhost:8000 (exposto na porta 8000)
├── PostgreSQL: container deploy-vps-db-1
├── Auth: container deploy-vps-auth-1
├── REST API: container deploy-vps-rest-1
├── Storage: container deploy-vps-storage-1
├── Edge Functions: container deploy-vps-functions-1
└── Meta: container deploy-vps-meta-1
`
🚦 FASES DA MIGRAÇÃO
FASE 0 — BACKUP TOTAL (hoje já feito ✅)
Arquivo: COMERCIALRS-COMPLETO-BACKUP-2026-06-23.md
Esta fase já foi executada. O backup contém:
Se algo der errado em qualquer momento → voltar a este backup.
FASE 1 — EXPORTAR DADOS DO CLOUD (27/06 — ~1h)
1.1 Exportar Schema e Dados do PostgreSQL
`bash
No VPS, conectar direto ao Cloud (precisa do IP liberado ou usar tunnel)
DB Host: db.dauftiqcvgaydddoxqhh.supabase.co
DB Password: tSm?p8n57f+TX5n
Instalar psql se não tiver
apt-get install -y postgresql-client
Exportar TUDO (schema + dados)
pg_dump -h db.dauftiqcvgaydddoxqhh.supabase.co \
-U postgres \
-d postgres \
--password \
-Fc \
-f /var/www/comercialrs/backup/cloud_backup_$(date +%Y%m%d).dump
Senha: tSm?p8n57f+TX5n
`
Se o Cloud estiver bloqueado (egress), usar acesso direto via Supabase Management API:
`bash
Management API via Supabase CLI
supabase db dump -p dauftiqcvgaydddoxqhh > backup.sql
`
1.2 Listar e Exportar Storage (arquivos)
`bash
Listar todos os buckets
curl -X GET 'https://supabase.storage.dauftiqcvgaydddoxqhh.supabase.co/storage/v1/bucket' \
-H 'Authorization: Bearer ANON_KEY_CLOUD' \
-H 'apikey: ANON_KEY_CLOUD'
ANON_KEY_CLOUD:
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZSIsInJlZiI6ImRhdWZ0aXFjdmdheWRkZG94cWhoIiwicm9sZSI6ImFub24iLCJpYXQiOjE3NzI0NTEzODUsImV4cCI6MjA4ODAyNzM4NX0.OtwMAcrs2L3iH60ppShVTrOuQYSolIwITUPVf1ckswk
`
Nota: Arquivos grandes podem causar egress. Priorizar dados críticos.
1.3 Exportar Edge Functions
`bash
Listar funções
curl -X GET 'https://db.dauftiqcvgaydddoxqhh.supabase.co/functions/v1/' \
-H 'Authorization: Bearer SERVICE_ROLE_KEY_CLOUD'
Cada função precisa ser exportada manualmente via Supabase Dashboard
Dashboard → Database → Edge Functions → cada função → Download
`
1.4 Exportar Auth Users
`sql
-- Query direta no Cloud (via psql ou Supabase Dashboard SQL Editor)
SELECT id, email, created_at, last_sign_in_at, raw_user_meta_data
FROM auth.users
ORDER BY created_at;
`
FASE 2 — PREPARAR SELF-HOSTED (27/06 — ~1h)
2.1 Verificar que Self-Hosted está rodando
`bash
No VPS
ssh root@31.97.243.106
Ver containers Docker
docker ps --format "table {{.Names}}\t{{.Status}}\t{{.Ports}}"
Deve mostrar TODOS rodando:
deploy-vps-kong-1 Up
deploy-vps-rest-1 Up
deploy-vps-auth-1 Up
deploy-vps-db-1 Up
deploy-vps-storage-1 Up
deploy-vps-functions-1 Up
deploy-vps-meta-1 Up
`
2.2 Verificar que nginx aponta pro Self-Hosted (TROCADO)
`bash
Ver config nginx atual
cat /etc/nginx/sites-enabled/comercialrs.rochasalesseguros.com.br
O config atual aponta pro Cloud:
proxy_pass https://db.dauftiqcvgaydddoxqhh.supabase.co;
PRECISA ser mudado para:
proxy_pass http://localhost:8000; (Kong do self-hosted)
NÃO FAZER ESSA MUDANÇA AINDA — fazer só na FASE 4
`
2.3 Verificar JWT Secrets do Self-Hosted
`bash
No VPS — pegar JWT secrets dos containers
docker exec deploy-vps-auth-1 env | grep JWT
docker exec deploy-vps-kong-1 env | grep JWT
Comparar com o .env atual do ComercialRS app (/var/www/comercialrs/.env)
Se diferente → anotar para trocar depois
`
2.4 Testar Self-Hosted Kong localmente
`bash
No VPS — testar se Kong responde
curl -I http://localhost:8000/rest/v1/
Deve retornar 200 ou 401 (não 502/503)
`
FASE 3 — IMPORTAR DADOS NO SELF-HOSTED (27/06 — ~2h)
3.1 Importar dump PostgreSQL
`bash
No VPS — restaurar dump no container db
docker exec -i deploy-vps-db-1 pg_restore \
-U postgres \
-d postgres \
--clean \
--if-exists \
/tmp/cloud_backup.dump
Se o dump for .sql plain:
docker exec -i deploy-vps-db-1 psql -U postgres -d postgres < /tmp/backup.sql
`
3.2 Verificar tables restauradas
`bash
No VPS — checar se dados chegaram
docker exec deploy-vps-db-1 psql -U postgres -d postgres -c "\dt"
Comparar com lista no backup:
- broker_links
- crm_leads
- crm_meetings
- crm_notes
- crm_tasks
- crm_activities
- crm_clients
- follow_sequences
- meta_webhook_events
- perfilcorretor
- task_alerts
- user_profiles (local)
- authentications (local)
`
3.3 Importar Storage (arquivos)
`bash
No VPS — usar Supabase Storage CLI ou API local
Listar buckets no self-hosted
curl -X GET 'http://localhost:8000/storage/v1/bucket' \
-H 'Authorization: Bearer ANON_KEY_LOCAL' \
-H 'apikey: ANON_KEY_LOCAL'
ANON_KEY_LOCAL:
eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJzdXBhYmFzZSIsInJlZiI6InJvY2hhc2FsZXMiLCJyb2xlIjoiYW5vbiIsImlhdCI6MTc4MjE0MDAxMiwiZXhwIjoxODEzNjc2MDEyfQ.zSTyXFB2i9xsPJQ0rTCEhEL0JnMTj0brfExdqa85VWU
Upload dos arquivos exportados do Cloud
(processo manual via Dashboard do Storage local)
`
3.4 Deploy Edge Functions no Self-Hosted
`bash
No VPS — listar Edge Functions existentes
supabase functions list
Deploy cada função:
supabase functions deploy NOME_DA_FUNCAO --project-ref rochasales
Funções críticas para migrate (do backup):
- sdr-meta-leads-onboarding
- meta-whatsapp-template-sync
(ver lista completa no backup)
`
FASE 4 — SWITCH (27/06 — ~30 min, janela de manutenção)
⚠️ AQUI É ONDE PODE QUEBRAR — seguir EXATAMENTE
4.1 backup do .env atual
`bash
No VPS — app ComercialRS
cp /var/www/comercialrs/.env /var/www/comercialrs/.env.backup.$(date +%Y%m%d)
cp /var/www/comercialrs/.env.cloud /var/www/comercialrs/.env.cloud.backup.$(date +%Y%m%d)
`
4.2 trocar .env para self-hosted
Arquivo: /var/www/comercialrs/.env
`
MUDAR ESTES (de Cloud → Self-Hosted):
SUPABASE_URL=http://localhost:8000
SUPABASE_ANON_KEY=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJzdXBhYmFzZSIsInJlZiI6InJvY2hhc2FsZXMiLCJyb2xlIjoiYW5vbiIsImlhdCI6MTc4MjE0MDAxMiwiZXhwIjoxODEzNjc2MDEyfQ.zSTyXFB2i9xsPJQ0rTCEhEL0JnMTj0brfExdqa85VWU
SUPABASE_SERVICE_ROLE_KEY=PEGA_DO_CONTAINER_kong_OU_auth
Manter estes (não mudar):
APP_URL=https://comercialrs.rochasalesseguros.com.br
PORT=3010
`
4.3 Trocar nginx proxy_pass
`bash
No VPS — editar config nginx
nano /etc/nginx/sites-enabled/comercialrs.rochasalesseguros.com.br
Mudar TODOS os:
proxy_pass https://db.dauftiqcvgaydddoxqhh.supabase.co;
Para:
proxy_pass http://localhost:8000;
Mudanças específicas:
/auth/v1/ → http://localhost:8000/auth/v1/
/rest/v1/ → http://localhost:8000/rest/v1/
/storage/v1/ → http://localhost:8000/storage/v1/
/functions/v1/ → http://localhost:8000/functions/v1/
/realtime/v1/ → http://localhost:8000/realtime/v1/
Testar config
nginx -t
Recarregar nginx
nginx -s reload
`
4.4 restart app ComercialRS
`bash
No VPS
cd /var/www/comercialrs
pm2 restart comercialrs
ou
systemctl restart comercialrs
ou
node .output/server/index.mjs # se usar start script
`
FASE 5 — VALIDAÇÃO (27/06 — ~1h)
5.1 Testar Login
`
1. Abrir https://comercialrs.rochasalesseguros.com.br
2. Tentar login com conta de teste
3. Verificar se redireciona para dashboard
`
5.2 Testar API REST
`bash
No terminal — testar endpoint
curl -X GET 'https://comercialrs.rochasalesseguros.com.br/rest/v1/crm_clients' \
-H 'apikey: ANON_KEY_LOCAL' \
-H 'Authorization: Bearer ANON_KEY_LOCAL'
Deve retornar JSON com dados (não 401/402/500)
`
5.3 Testar WhatsApp Webhook
`bash
Enviar mensagem de teste via WhatsApp
Verificar se chega no MetaWebhook
No VPS — checar logs
tail -f /var/www/comercialrs/data/meta_webhook_vps_service.py.log
ou
docker logs -f deploy-vps-functions-1
`
5.4 Testar Task Alerts
`bash
No VPS — checar se task_alerts.py conecta no DB local
python3 /var/www/comercialrs/data/task_alerts.py
Deve conectar sem erro de credenciais
`
5.5 Comparar contadores (Cloud vs Local)
| Tabela | Cloud (backup) | Local (agora) | Status |
| --- | --- | --- | --- |
| crm_clients | [do backup] | [agora] | ✅/❌ |
| crm_leads | [do backup] | [agora] | ✅/❌ |
| crm_tasks | [do backup] | [agora] | ✅/❌ |
| crm_meetings | [do backup] | [agora] | ✅/❌ |
| Recurso | Acesso | Onde | |
| --- | --- | --- | |
| Supabase Cloud Dashboard | https://supabase.com/dashboard | Owner da conta | |
| VPS SSH | ssh root@31.97.243.106 | Raiz VPS | |
| ComercialRS App | /var/www/comercialrs | VPS | |
| Nginx config | /etc/nginx/sites-enabled/comercialrs.rochasalesseguros.com.br | VPS | |
| Meta webhook script | /var/www/comercialrs/data/meta_webhook_vps_service.py | VPS | |
| Task alerts script | /var/www/comercialrs/data/task_alerts.py | VPS | |
| Vault (este plano) | /var/www/obsidian-vault/04-PROJECTS/COMERCIALRS-MIGRACAO-PLANO-COMPLETO.md | VPS | |
| Backup completo | /var/www/obsidian-vault/04-PROJECTS/COMERCIALRS-COMPLETO-BACKUP-2026-06-23.md | VPS | |
| Horário | Atividade | ||
| --- | --- | ||
| 08:00 | Iniciar — backup final do Cloud | ||
| 09:00 | Exportar dados | ||
| 10:00 | Preparar Self-Hosted | ||
| 11:00 | Importar dados | ||
| 13:00 | Switch nginx + .env | ||
| 14:00 | Validação | ||
| 16:00 | Se OK → liberar uso | ||
| 16:00 | Se ERRO → rollback e reagendar |
Plano criado em 23/06/2026 — Hermes Agent (Rocha Sales)
Para acionar: diga "MIGRAR" no Discord