Files
eden/docs/runbooks/setup-vm-pre-producao.md

3.3 KiB

Setup de uma nova VM (pré-produção)

Passo a passo mínimo para subir o EDEN do zero numa VM nova. Ver docs/adr/0002-container-topology.md para o porquê da topologia (Postgres isolado, 1 container por app).

1. Requisitos da VM

  • Linux (Debian/Ubuntu), 4 vCPU / 8GB RAM como piso razoável (Chromium headless para PDF consome memória).
  • Docker Engine + plugin docker compose instalados.
  • Git.
  • Portas liberadas no firewall: só as que forem expostas publicamente (ver passo 5) — nunca a porta do Postgres.
curl -fsSL https://get.docker.com | sh
sudo usermod -aG docker $USER   # relogar depois disso

2. Clonar o repositório

git clone https://git.falehandix.com.br/Matheus/eden.git /opt/eden
cd /opt/eden
git checkout main   # pré-produção valida o que já foi mergeado — não a branch developer

3. Configurar o .env

cp .env.example .env

Preencher no .env (nunca commitar este arquivo):

  • EDEN_DATABASE_PASSWORD / ajustar DATABASE_URL com a mesma senha.
  • JWT_SIGNING_SECRET — openssl rand -hex 48 (segredo próprio desta VM, nunca reaproveitar o de outro ambiente).
  • SIGNATURE_OTP_SECRET — openssl rand -hex 32.
  • EDEN_FIELD_ENCRYPTION_KEY — openssl rand -hex 32.
  • EDEN_SUPERADMIN_EMAIL / EDEN_SUPERADMIN_PASSWORD — só usado para criar o primeiro usuário se a tabela users estiver vazia.
  • S3_* — credenciais do MinIO bundled (openssl rand -hex 12/openssl rand -hex 24 para user/senha) ou de um S3 real.
  • SMTP_* — se já tiver um provedor de e-mail pra este ambiente.
  • PUBLIC_BASE_URL — domínio público desta VM (usado em links de e-mail).
  • Portas (EDEN_API_PORT/EDEN_CORE_PORT/EDEN_PARCEIROS_PORT/EDEN_ASSINANTE_PORT) — só mudar se for rodar mais de uma instância na mesma máquina.

4. Subir os containers

docker compose --env-file .env up -d

Sobe Postgres, MinIO, API, worker e as 3 apps web. Cada serviço tem healthcheck — conferir com:

docker compose --env-file .env ps

5. Rodar as migrations

A imagem do eden-api carrega o monorepo inteiro (ver infra/docker/Dockerfile.node), então dá pra rodar direto de dentro do container — DATABASE_URL já está no ambiente dele:

docker compose --env-file .env exec eden-api pnpm --filter @eden/database exec node-pg-migrate up

(Ou, se tiver Node 22 + pnpm instalados na própria VM, fora de Docker: pnpm install && pnpm db:migrate, com DATABASE_URL apontando pra porta mapeada do Postgres no host.)

6. Confirmar o primeiro acesso

curl -X POST http://localhost:${EDEN_API_PORT:-8080}/api/v1/auth/login \
  -H "Content-Type: application/json" \
  -d "{\"email\":\"$EDEN_SUPERADMIN_EMAIL\",\"password\":\"$EDEN_SUPERADMIN_PASSWORD\",\"applicationKey\":\"core\"}"

Deve devolver um accessToken. Depois logar normalmente em http://<host>:${EDEN_CORE_PORT}.

7. Proxy reverso / domínio (se for expor publicamente)

  • Cada app tem um domínio próprio (core/parceiros/assinante); a API não tem domínio público — o proxy na frente de cada domínio deve rotear /api/* internamente para eden-api:8080 na rede docker (eden_net), nunca expor a API direto.
  • Nunca expor a porta do Postgres (EDEN_POSTGRES_DEV_PORT) fora da rede interna em pré-produção.