diff --git a/projetos/newwhats.clube67.com/ambiente-dev.md b/projetos/newwhats.clube67.com/ambiente-dev.md new file mode 100644 index 0000000..c571094 --- /dev/null +++ b/projetos/newwhats.clube67.com/ambiente-dev.md @@ -0,0 +1,66 @@ +# newwhats.clube67.com — Ambiente de desenvolvimento (delta) + +> Delta deste projeto. Modelo universal em `../../infra/ambiente-dev.md`. Aqui o que **difere**. +> Publicado em **https://dev.newwhats.clube67.com** (no ar desde 27/jun/2026). + +## O que torna este projeto diferente do universal + +O `infra/ambiente-dev.md` universal assume: dev servido por **imagem vite buildada** (nginx sobre `vite build`) +e **banco DEV isolado no `pgdev` (VPS4)**, banco `_dev`. O newwhats **diverge em dois pontos**: + +1. **Não é vite, é Next.js, e o front é container próprio.** O backend Express (`dist/server.js`) serve + **só** `/api`, `/socket.io` e `/media` — **não** serve o frontend. O front é um container Next + (`next start -p 3003`) separado. Por isso o dev tem **3 containers** (não um): backend + frontend + nginx + de roteamento. +2. **Banco DEV não é o `pgdev` local — é o banco `newwhats` na VPS3** (decisão do administrador: dev com + **dados reais**, compartilhado). ⚠️ Isso **abre mão do isolamento** que o universal garante: o dev + **grava nos dados reais** (~89k messages, ~10k contacts). Cache isolado via **Dragonfly DB index `/1`**. + +## Onde roda / estrutura + +- **Cópia isolada de build/execução:** `/home/deploy/stack/newwhats.clube67.com/newwhats.dev/`. + **Nunca** buildar o dev em `newwhats.local/` — essa pasta é a **fonte do builder de PROD** + (`deploy-prod-builder.sh`); buildar nela contamina o artefato de produção. A cópia está no + `.gitignore` do stack. +- **3 containers** (VPS4, docker rootless — `DOCKER_HOST=unix:///run/user/1000/docker.sock`), + definidos em `newwhats.dev/docker-compose.dev.yml`: + | Container | Papel | Porta | + |---|---|---| + | `newwhats-backend-dev` | Express (API + Socket.IO + /media) | 8008 (interna) | + | `newwhats-frontend-dev` | Next.js (`next start`) | 3003 (interna) | + | `newwhats-nginx-dev` | roteia `/api`,`/socket.io`,`/media`→backend; `/`→frontend | **8022** (publicada no host) | +- **Roteamento (VPS1):** Traefik file provider em + `/home/deploy/stack/traefik/dynamic/dev.newwhats.clube67.yml` → + `Host(dev.newwhats.clube67.com)` → `http://10.99.0.4:8022` (WireGuard). DNS já resolve (wildcard `*.clube67.com` → VPS1). + +## Como subir + +```bash +cd /home/deploy/stack/newwhats.clube67.com/newwhats.dev +# 1) Build (na cópia isolada) — npm install LIMPO (copiar node_modules via rsync quebra Prisma/Next) +cd backend && npm install && npm run build && npx prisma generate && cd .. +cd frontend && npm install && NEXT_PUBLIC_API_URL=https://dev.newwhats.clube67.com npm run build && cd .. +./backend/node_modules/.bin/tsc -p ./plugins/tsconfig.json || true # plugins (emite apesar de erros de tipo) +# 2) Subir +DOCKER_HOST=unix:///run/user/1000/docker.sock docker compose -f docker-compose.dev.yml up -d +``` + +- **`NEXT_PUBLIC_API_URL` = raiz** (`https://dev.newwhats.clube67.com`), **sem `/api`** — o código já prefixa `/api` + nas chamadas REST; o Socket.IO usa `new URL(url).origin`. +- **Não rodar `prisma db push`** contra o banco `newwhats`: o schema já está alinhado com o código; o `db push` + só **dropa** tabelas extras de plugins (`sec_*` da *secretaria*, `janitor_logs`, `nanobana_usage`) — perda de dados. + +## Conexões (VPS3, 10.99.0.3) — credenciais no `docker-compose.dev.yml` + +- **Banco:** `postgresql://newwhats:@10.99.0.3:5432/newwhats` (role `newwhats`; o role `clube67` **não** + tem permissão nesse banco). +- **Cache:** `redis://:@10.99.0.3:6379/1` (Dragonfly, DB index `/1` para não colidir com a prod). + +## Atenção — divergência código × PROD + +O código em `newwhats.local` (e portanto o dev) está **à frente da PROD** na VPS1: +- **PROD (VPS1):** build de mai/2026, entrypoint `dist/backend/src/index.js` (arquitetura antiga em que o + **backend servia o frontend**); usa o banco **`clube67`** (não `newwhats`). +- **Código atual / dev:** entrypoint `dist/server.js`, **frontend separado** (Next). + +Antes de promover para produção, alinhar deploy e banco. Ver universal: `../../deploy/subir-release.md`.