# 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. ```bash curl -fsSL https://get.docker.com | sh sudo usermod -aG docker $USER # relogar depois disso ``` ## 2. Clonar o repositório ```bash 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` ```bash 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 ```bash docker compose --env-file .env up -d ``` Sobe Postgres, MinIO, API, worker e as 3 apps web. Cada serviço tem healthcheck — conferir com: ```bash 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: ```bash 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 ```bash 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://:${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.