fix: tratar tokens de maquinas e alinhar stack/docs
All checks were successful
All checks were successful
This commit is contained in:
parent
b7e2c4cc98
commit
c030a3ac09
21 changed files with 309 additions and 36 deletions
|
|
@ -1,11 +1,11 @@
|
|||
# Deploy Manual via VPS
|
||||
|
||||
## Acesso rápido
|
||||
- Host: 31.220.78.20
|
||||
- Host: 154.12.253.40
|
||||
- Usuário: root
|
||||
- Caminho do projeto: /srv/apps/sistema
|
||||
- Chave SSH (local): ./codex_ed25519 (chmod 600)
|
||||
- Login: `ssh -i ./codex_ed25519 root@31.220.78.20`
|
||||
- Login: `ssh -i ./codex_ed25519 root@154.12.253.40`
|
||||
|
||||
## Passo a passo resumido
|
||||
1. Conectar na VPS usando o comando acima.
|
||||
|
|
|
|||
10
docs/DEV.md
10
docs/DEV.md
|
|
@ -1,4 +1,4 @@
|
|||
# Guia de Desenvolvimento — 18/10/2025
|
||||
# Guia de Desenvolvimento — 18/12/2025
|
||||
|
||||
Este documento consolida o estado atual do ambiente de desenvolvimento, descreve como rodar lint/test/build localmente (e no CI) e registra erros recorrentes com as respectivas soluções.
|
||||
|
||||
|
|
@ -6,7 +6,7 @@ Este documento consolida o estado atual do ambiente de desenvolvimento, descreve
|
|||
|
||||
- **Bun (runtime padrão)**: 1.3+ já instalado no runner e VPS (`bun --version`). Após instalar localmente, exporte `PATH="$HOME/.bun/bin:$PATH"` para tornar o binário disponível. Use `bun install`, `bun run dev:bun`, `bun run convex:dev:bun`, `bun run build:bun` e `bun test` como fluxo principal (scripts Node continuam disponíveis como fallback).
|
||||
- **Node.js**: mantenha a versão 20.9+ instalada para ferramentas auxiliares (Prisma CLI, scripts legados em Node) quando não estiver usando o runtime do Bun.
|
||||
- **Next.js 16**: Projeto roda em `next@16.0.8` com Turbopack como bundler padrão (dev e build); webpack continua disponível como fallback.
|
||||
- **Next.js 16**: Projeto roda em `next@16.0.10` com Turbopack como bundler padrão (dev e build); webpack continua disponível como fallback.
|
||||
- **Lint/Test/Build**: `bun run lint`, `bun test`, `bun run build:bun`. O test runner do Bun já roda em modo não interativo; utilize `bunx vitest --watch` apenas quando precisar do modo watch manualmente.
|
||||
- **Banco DEV**: PostgreSQL local (Docker recomendado). Defina `DATABASE_URL` apontando para seu PostgreSQL.
|
||||
- **Desktop (Tauri)**: fonte em `apps/desktop`. Usa Radix tabs + componentes shadcn-like, integra com os endpoints `/api/machines/*` e suporta atualização automática via GitHub Releases.
|
||||
|
|
@ -47,7 +47,7 @@ Este documento consolida o estado atual do ambiente de desenvolvimento, descreve
|
|||
|
||||
## Next.js 16 (estável)
|
||||
|
||||
- Mantemos o projeto em `next@16.0.8`, com React 19 e o App Router completo.
|
||||
- Mantemos o projeto em `next@16.0.10`, com React 19 e o App Router completo.
|
||||
- **Bundlers**: Turbopack permanece habilitado no `next dev`/`bun run dev:bun` e agora também no `next build --turbopack`. Use `next build --webpack` somente para reproduzir bugs ou comparar saídas.
|
||||
- **Whitelist de hosts**: o release estável continua sem aceitar `server.allowedHosts` (vide [`invalid-next-config`](https://nextjs.org/docs/messages/invalid-next-config)), portanto bloqueamos domínios exclusivamente via `middleware.ts`.
|
||||
|
||||
|
|
@ -200,8 +200,8 @@ PY
|
|||
|
||||
## Referências úteis
|
||||
|
||||
- **Deploy (Swarm)**: veja `docs/DEPLOY-RUNBOOK.md`.
|
||||
- **Plano do agente desktop / heartbeat**: `docs/plano-app-desktop-maquinas.md`.
|
||||
- **Deploy (Swarm)**: veja `docs/OPERATIONS.md`.
|
||||
- **Plano do agente desktop / heartbeat**: `docs/archive/plano-app-desktop-dispositivos.md`.
|
||||
- **Histórico de incidentes**: `docs/historico-agente-desktop-2025-10-10.md`.
|
||||
|
||||
> Última revisão: 18/10/2025. Atualize este guia sempre que o fluxo de DEV ou automações mudarem.
|
||||
|
|
|
|||
|
|
@ -18,7 +18,7 @@ Estrategia: nenhuma limpeza automatica ligada. Usamos apenas monitoramento e, se
|
|||
- Export/backup local de tickets: endpoint `POST /api/admin/tickets/archive-local` (staff) grava tickets resolvidos mais antigos que N dias em JSONL dentro de `ARCHIVE_DIR` (padrão `./archives`). Usa `exportResolvedTicketsToDisk` com segredo interno (`INTERNAL_HEALTH_TOKEN`/`REPORTS_CRON_SECRET`).
|
||||
|
||||
## Como acessar tickets antigos sem perda
|
||||
- Base quente: Prisma (SQLite) guarda todos os tickets; nenhuma rotina remove ou trunca tickets.
|
||||
- Base quente: Prisma (PostgreSQL) guarda todos os tickets; nenhuma rotina remove ou trunca tickets.
|
||||
- Se um dia for preciso offload (ex.: >50k tickets):
|
||||
- Exportar em lotes (ex.: JSONL mensais) para storage frio (S3/compat).
|
||||
- Gravar um marcador de offload no DB quente (ex.: `ticket_archived_at`, `archive_key`).
|
||||
|
|
@ -33,7 +33,7 @@ Estrategia: nenhuma limpeza automatica ligada. Usamos apenas monitoramento e, se
|
|||
## Checks operacionais sugeridos (manuais)
|
||||
- Tamanho do banco do Convex: `ssh -i ~/.ssh/codex_ed25519 root@154.12.253.40 "ls -lh /var/lib/docker/volumes/sistema_convex_data/_data/db.sqlite3"`
|
||||
- Memoria do Convex: `ssh -i ~/.ssh/codex_ed25519 root@154.12.253.40 "docker stats --no-stream | grep convex"`
|
||||
- Alvos: <100-200 MB para o SQLite e <5 GB de RAM. Acima disso, abrir janela curta, fazer backup e avaliar limpeza ou arquivamento pontual.
|
||||
- Alvos: <100-200 MB para o SQLite do Convex e <5 GB de RAM. Acima disso, abrir janela curta, fazer backup e avaliar limpeza ou arquivamento pontual.
|
||||
|
||||
## Estado atual e proximos passos
|
||||
- Cron de limpeza segue desativado. Prioridade: monitorar 2-4 semanas para validar estabilidade pos-correcoes.
|
||||
|
|
|
|||
|
|
@ -121,7 +121,7 @@ docker run -d \
|
|||
-p 5432:5432 \
|
||||
-e POSTGRES_PASSWORD=dev \
|
||||
-e POSTGRES_DB=sistema_chamados \
|
||||
postgres:16
|
||||
postgres:18
|
||||
|
||||
# Criar arquivo .env
|
||||
cp .env.example .env
|
||||
|
|
@ -230,7 +230,7 @@ docker start postgres-dev
|
|||
|
||||
# Ou recriar
|
||||
docker rm -f postgres-dev
|
||||
docker run -d --name postgres-dev -p 5432:5432 -e POSTGRES_PASSWORD=dev -e POSTGRES_DB=sistema_chamados postgres:16
|
||||
docker run -d --name postgres-dev -p 5432:5432 -e POSTGRES_PASSWORD=dev -e POSTGRES_DB=sistema_chamados postgres:18
|
||||
```
|
||||
|
||||
## Convex (Backend de Tempo Real)
|
||||
|
|
@ -248,5 +248,5 @@ bun run dev:bun
|
|||
## Mais Informacoes
|
||||
|
||||
- **Desenvolvimento detalhado:** `docs/DEV.md`
|
||||
- **Deploy e operacoes:** `docs/DEPLOY-RUNBOOK.md`
|
||||
- **Deploy e operacoes:** `docs/OPERATIONS.md`
|
||||
- **CI/CD Forgejo:** `docs/FORGEJO-CI-CD.md`
|
||||
|
|
|
|||
54
docs/alteracoes-producao-2025-12-18.md
Normal file
54
docs/alteracoes-producao-2025-12-18.md
Normal file
|
|
@ -0,0 +1,54 @@
|
|||
# Alteracoes de producao - 2025-12-18
|
||||
|
||||
Este documento registra as mudancas aplicadas na VPS para estabilizar o ambiente e padronizar o uso do PostgreSQL 18.
|
||||
|
||||
## Resumo
|
||||
- Migracao do banco principal do sistema para o servico `postgres18`.
|
||||
- Desativacao do servico `postgres` (pg16) no Swarm.
|
||||
- Convex backend fixado na tag `ghcr.io/get-convex/convex-backend:6690a911bced1e5e516eafc0409a7239fb6541bb`.
|
||||
- `CONVEX_INTERNAL_URL` ajustado para o endpoint publico, evitando falhas de DNS interno (`ENOTFOUND sistema_convex_backend`).
|
||||
- Tratamento explicito para tokens revogados/expirados/invalidos nas rotas `/api/machines/*` e chat.
|
||||
- Limpeza de documento legado no Convex (`liveChatSessions` id `pd71bvfbxx7th3npdj519hcf3s7xbe2j`).
|
||||
|
||||
## Backups gerados
|
||||
- `/root/pg-backups/sistema_chamados_pg16_20251218215925.dump`
|
||||
- `/root/pg-backups/sistema_chamados_pg18_20251218215925.dump`
|
||||
- Convex: `/var/lib/docker/volumes/sistema_convex_data/_data/db.sqlite3.backup-20251218165717`
|
||||
- Observacao: foi gerado um arquivo extra `db.sqlite3.backup-` (sem timestamp) por comando incorreto.
|
||||
|
||||
## Procedimento (principais comandos)
|
||||
```
|
||||
# 1) Backup dos bancos
|
||||
docker exec -u postgres <pg16> pg_dump -Fc -d sistema_chamados -f /tmp/sistema_chamados_pg16_20251218215925.dump
|
||||
docker exec -u postgres <pg18> pg_dump -Fc -d sistema_chamados -f /tmp/sistema_chamados_pg18_20251218215925.dump
|
||||
|
||||
# 2) Parar o web durante a migracao
|
||||
docker service scale sistema_web=0
|
||||
|
||||
# 3) Restaurar dump do pg16 no pg18
|
||||
docker exec -u postgres <pg18> psql -c "DROP DATABASE IF EXISTS sistema_chamados;"
|
||||
docker exec -u postgres <pg18> psql -c "CREATE DATABASE sistema_chamados OWNER sistema;"
|
||||
docker cp /root/pg-backups/sistema_chamados_pg16_20251218215925.dump <pg18>:/tmp/sistema_chamados_restore.dump
|
||||
docker exec -u postgres <pg18> pg_restore -d sistema_chamados -Fc /tmp/sistema_chamados_restore.dump
|
||||
|
||||
# 4) Atualizar stack (com variaveis exportadas)
|
||||
set -a; . /srv/apps/sistema/.env; set +a
|
||||
docker stack deploy --with-registry-auth -c /srv/apps/sistema/stack.yml sistema
|
||||
|
||||
# 5) Desativar pg16
|
||||
docker service scale postgres=0
|
||||
```
|
||||
|
||||
## Ajustes em stack.yml
|
||||
- `DATABASE_URL` apontando para `postgres18:5432`.
|
||||
- `CONVEX_INTERNAL_URL` apontando para `https://convex.esdrasrenan.com.br`.
|
||||
- Imagem do Convex ajustada para a tag acima.
|
||||
|
||||
## Resultado
|
||||
- `sistema_web` voltou com 2 replicas saudaveis.
|
||||
- `sistema_convex_backend` rodando na tag informada.
|
||||
- `postgres` (pg16) desativado no Swarm.
|
||||
- Healthcheck OK: `GET /api/health` e `GET /version`.
|
||||
|
||||
## Observacoes operacionais
|
||||
- O deploy do stack precisa de variaveis exportadas do `.env`. Sem isso, `NEXT_PUBLIC_*` fica vazio e o `POSTGRES_PASSWORD` nao e propagado, causando `P1000` no Prisma.
|
||||
|
|
@ -112,7 +112,39 @@ Critérios de sucesso:
|
|||
|
||||
---
|
||||
|
||||
## 6. Referências rápidas
|
||||
## 6. Registro de alterações manuais
|
||||
|
||||
### 2025-12-18 — liveChatSessions com versão legada (shape_inference)
|
||||
|
||||
Motivo: logs do Convex mostravam `shape_inference` recorrente apontando para o documento
|
||||
`pd71bvfbxx7th3npdj519hcf3s7xbe2j` (sessão de chat antiga com status `ACTIVE` em versão histórica).
|
||||
|
||||
Comandos executados:
|
||||
|
||||
```bash
|
||||
# 1) Parar Convex
|
||||
docker service scale sistema_convex_backend=0
|
||||
|
||||
# 2) Backup
|
||||
cp /var/lib/docker/volumes/sistema_convex_data/_data/db.sqlite3 \
|
||||
/var/lib/docker/volumes/sistema_convex_data/_data/db.sqlite3.backup-20251218165717
|
||||
|
||||
# 3) Remover versões antigas do documento (mantendo a mais recente)
|
||||
docker run --rm -v sistema_convex_data:/convex/data nouchka/sqlite3 /convex/data/db.sqlite3 \
|
||||
"DELETE FROM documents \
|
||||
WHERE json_extract(json_value, '$._id') = 'pd71bvfbxx7th3npdj519hcf3s7xbe2j' \
|
||||
AND ts < (SELECT MAX(ts) FROM documents \
|
||||
WHERE json_extract(json_value, '$._id') = 'pd71bvfbxx7th3npdj519hcf3s7xbe2j');"
|
||||
|
||||
# 4) Subir Convex
|
||||
docker service scale sistema_convex_backend=1
|
||||
```
|
||||
|
||||
Resultado: versões antigas do documento foram removidas e os erros de `shape_inference` pararam após o restart.
|
||||
|
||||
---
|
||||
|
||||
## 7. Referências rápidas
|
||||
|
||||
- Volume Convex: `sistema_convex_data`
|
||||
- Banco: `/convex/data/db.sqlite3`
|
||||
|
|
@ -122,4 +154,4 @@ Critérios de sucesso:
|
|||
|
||||
---
|
||||
|
||||
Última revisão: **18/11/2025** — sanado por remoção dos registros incompatíveis e rerun bem-sucedido do export `gg20vw5b479d9a2jprjpe3pxg57vk9wa`.
|
||||
Última revisão: **18/12/2025** — limpeza da versão legada de `liveChatSessions` (`pd71bvfbxx7th3npdj519hcf3s7xbe2j`) e restart do Convex.
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue