Files
scoreodonto.com/documentação/CHECKLIST-DEPLOY-PRODUCAO.md
T
VPS 4 Builder 37cc818f4c docs: centraliza e reescreve a documentação em documentação/
- reúne todos os .md de ScoreOdonto numa pasta única (fonte única, dentro do repo versionado pelo Gitea)
- arquitetura.md: reescrito p/ o estado REAL (3 VPS, banco compartilhado dev/prod, sem staging/listener/registry fantasmas)
- deploy.md: reescrito p/ o estado-ALVO (Gitea CI/CD: push->build->registry->deploy por tag)
- DEPLOY-PRODUCAO.md: runbook operacional executável (fluxo manual real de hoje)
- VERDADE-HOJE.md: auditoria (codigo/banco/containers/deploy/versao/rollback)

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-16 06:45:51 +02:00

5.9 KiB
Raw Blame History

Checklist de Deploy para Produção — Pacote Financeiro + Salas (jun/2026)

Consolida a rodada: Financeiro V1 (Épicos 14), V2 Comissão/Repasse, Glosas, GTO→Financeiro, modelo de contrato p/ convênio e o redesenho de Salas (perfil Dono de Sala, sala como workspace, financeiro de locação, painel/relatório/agenda). O procedimento canônico de deploy é o DEPLOY-PRODUCAO.md — este arquivo é só o checklist desta entrega.

0. Arquitetura (sem ambiente isolado)

  • VPS4 = desenvolvimento + builder. O ambiente de teste é dev.scoreodonto.com (servido pela VPS4 via Traefik da VPS1) e é onde se buildam as imagens que vão pra produção.
  • VPS1 = produção (scoreodonto.com) — só recebe a imagem pronta e sobe.
  • VPS3 = dados (Postgres scoreodonto, Dragonfly, Gitea). Dev e prod apontam para o MESMO banco scoreodonto.
  • ⚠️ Consequência (confirmada): dev e prod compartilham o banco → as migrações desta entrega já foram aplicadas ao banco real durante o desenvolvimento (rodam no boot do backend de dev). Promover é, na prática, levar o CÓDIGO para a VPS1 — o schema já está migrado. Não há ambiente nem banco isolado entre dev e produção.

1. Fluxo de promoção (resumo do DEPLOY-PRODUCAO.md §2)

  1. git push origin main (na VPS4) — já feito (commit 3e64514).
  2. Bump de versão (update-version.jsfrontend/constants.ts).
  3. Build da imagem Docker na VPS4 (npm install + vite build dentro do Dockerfile) — peso fora da produção.
  4. Envia a imagem pronta para a VPS1 (registry privado pela WireGuard — recomendado — ou docker save | ssh | docker load).
  5. VPS1: docker compose up -d (troca o container pela imagem nova). Backend leva ~1030s no boot (reconecta Postgres/Dragonfly + roda migrações).
  • (Os scripts deploy-prod-builder.sh e deploy-to-prod.sh estão DEPRECADOS — ver seção "Fluxo ANTIGO" do DEPLOY-PRODUCAO.md. Não usar.)

2. Pré-requisitos

  • Backup do banco VPS3 (pg_dump scoreodonto — custom format -Fc). Como dev/prod compartilham o banco, esse backup é a única rede de segurança.
  • Código em origin/main (Gitea) — 3e64514.
  • node --check backend/server.js OK; build do frontend OK.
  • Validado em dev.scoreodonto.com.

3. Mudanças de banco (migrações idempotentes no boot — todas ADITIVAS)

Já aplicadas no banco (dev=prod). Listadas para auditoria/rollback. Nenhuma destrutiva.

  • Novas tabelas: procedimentos_realizados, procedimento_realizado_foto, comissao_regras, repasses, glosas.
  • ALTER financeiro: paciente_id, profissional_id, procedimento_id, agendamento_id, contrato_id, realizado_id, origem, sem_comissao, pago_em, deleted_at, fornecedor, centro_custo, recorrente, convenio_id, valor_glosa, data_competencia, competencia.
  • ALTER orcamentos: financeiro_gerado. ALTER contratos: cobranca_automatica, valor_recorrente, periodicidade, dia_cobranca. ALTER gto_builders: financeiro_id. ALTER sala_reservas: financeiro_id.
  • CHECK usuarios_role_check / vinculos_role_check ganham donosala (DROP+ADD no boot — superset, seguro).
  • Índices: troca uq_comissao_regrauq_comissao_regra2; novos idx_financeiro_contrato_comp, idx_financeiro_convenio, idx_glosas_*, idx_gto_builders_financeiro.
  • Seed (boot): cmod_odo_14 "Atendimento a Convênios / Repasse" (ON CONFLICT DO NOTHING).

4. Backend — env / infra (VPS1)

  • DATABASE_URL…@10.99.0.3/scoreodonto. JWT_SECRET estável (login + URLs assinadas de fotos/comprovantes).
  • Volume de mídia persistente (MEDIA_PATH): grava em …/procedimentos/<id>/ e …/repasses/<id>/.
  • Cron processarVigenciasContratos (boot + 6h): Atrasado, vigência, renovação automática, cobrança recorrente — conferir nos logs.

5. Frontend

  • Imagem rebuildada com as views novas (ComissoesView, GlosasView, ProcedimentosProntuario, SalaHomeView) e alterações (FinanceiroView, ReportsView, OrcamentoModal, ContratosView, LancarGTO, SalasPlugin, OnboardingChat, Sidebar, App.tsx, PluginsView, pluginRegistry, services/backend.ts).
  • Conferir: locação sempre ativa (MINHAS/ALUGAR SALAS aparecem) e seletor de workspace lista Clínicas × Salas.

6. Verificação pós-deploy (VPS1)

# versão no ar
curl -s https://scoreodonto.com | grep -o 'V[0-9]*\.[0-9]*\.[0-9]*' | head -1
# logs do backend (Docker ROOTLESS na VPS1) — espere "[MIGRATION] all migrations OK"
ssh deploy@10.99.0.1 "DOCKER_HOST=unix:///run/user/1000/docker.sock docker logs scoreodontocom-scoreodonto-backend-1 --tail 40"

Smoke tests: criar lançamento financeiro (valida normalizeFinanceiro — antes nenhum salvava pela UI); GTO → recebível; comissão/repasse/comprovante; glosa; contrato de convênio; orçamento→parcelas; fluxo de salas (Dono de Sala, reserva→recebível, painel); isolamento cross-tenant 403.

7. Rollback

  • Migrações só adicionam → reverter o código (imagem anterior na VPS1) é seguro; colunas/tabelas extras ficam inertes. Restaurar o dump da §2 só se necessário (pg_restore -d "<url>" --clean <arquivo>).

8. Riscos específicos desta entrega

  • normalizeFinanceiro (crítico): corrige o bug em que enforceUppercase mandava PAGO/PIX violando o CHECK capitalizado — antes a tabela financeiro ficava vazia. Garantir que entrou na imagem.
  • Banco único dev/prod: dado de teste de desenvolvimento pode aparecer; os E2E desta rodada sempre limparam, mas conferir contagens de financeiro, salas, repasses, glosas.
  • Contratos de convênio: textos seguem padrão de mercado — recomendar revisão por advogado.
  • Locação sempre ativa: todos os papéis (menos superadmin) passam a ver MINHAS/ALUGAR SALAS.