Files
Documentos-Unicos/projetos/newwhats.clube67.com/ambiente-dev.md
T
VPS 4 Builder ceb2e4ed8d docs(newwhats): ambiente dev em dev.newwhats.clube67.com (delta do universal)
Documenta o ambiente dev do newwhats: 3 containers na VPS4 (backend Express +
frontend Next + nginx, porta 8022), roteado pelo Traefik da VPS1; banco newwhats
na VPS3 (dados reais, sem db push) e cache Dragonfly /1. Cita o que difere do
infra/ambiente-dev.md universal e a divergencia codigo x PROD.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-27 17:50:52 +02:00

67 lines
4.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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 `<projeto>_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`
**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:<senha>@10.99.0.3:5432/newwhats` (role `newwhats`; o role `clube67` **não**
tem permissão nesse banco).
- **Cache:** `redis://:<senha>@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`.