cad5dcb0c7
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
77 lines
4.7 KiB
Markdown
77 lines
4.7 KiB
Markdown
# 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`).
|
||
O newwhats **diverge** num ponto (o banco segue o universal — `pgdev` isolado):
|
||
|
||
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.
|
||
|
||
> **Histórico:** por um período o dev apontou para o banco real `newwhats` na VPS3 (compartilhado). Isso foi
|
||
> revertido em 27/jun/2026 — testes podiam corromper dados reais (delete de instância faz cascade em
|
||
> chats/messages). Agora o banco é **isolado** (`newwhats_dev` no `pgdev`), como manda o universal.
|
||
|
||
## 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`.
|
||
|
||
> ⚠️ **Armadilha (causou 503 no login em 28/jun/2026):** o `frontend/.env.production.local` tinha
|
||
> `NEXT_PUBLIC_API_URL=https://clube67.com` (valor de PROD). O Next inlina `NEXT_PUBLIC_*` em **build time**
|
||
> e, com `NODE_ENV=production` (caso do container `newwhats-frontend-dev`), carrega `.env.production.local`.
|
||
> Rodar `npx next build` **dentro do container sem passar a env** fez o login do dev bater em `clube67.com`
|
||
> → 503. **Sempre** rebuildar com a env explícita:
|
||
> `docker exec -e NEXT_PUBLIC_API_URL=https://dev.newwhats.clube67.com -w /app newwhats-frontend-dev npx next build`.
|
||
> A cópia dev já teve o `.env.production.local` corrigido para o domínio dev.
|
||
|
||
## Conexões — credenciais no `docker-compose.dev.yml`
|
||
|
||
- **Banco (isolado):** `postgresql://devadmin:<senha>@pgdev:5432/newwhats_dev` — banco `newwhats_dev` no
|
||
container **`pgdev`** (VPS4, rede docker **`soc`**; o backend-dev precisa estar na rede `soc` para resolver
|
||
o DNS `pgdev`). É um **clone** dos dados reais (~92k messages, ~10k contacts), feito com
|
||
`pg_dump` do `newwhats` (VPS3) → `pg_restore --no-owner --no-privileges` no `pgdev`.
|
||
Para repuxar/zerar, ver scripts em `/home/deploy/stack/pg-dev/` (padrão `_dev`/`_ref` do universal).
|
||
- **Cache:** `redis://:<senha>@10.99.0.3:6379/1` (Dragonfly VPS3, DB index `/1` — isolado da prod por index).
|
||
|
||
## 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`.
|