# EDEN — variáveis de ambiente (Fase 1 bootstrap) # Copiar para `.env` e preencher com valores reais. # Nunca commitar `.env` — já está no .gitignore. # --- Banco de dados (Postgres 18, container eden-postgres) --- EDEN_DATABASE_NAME=eden EDEN_DATABASE_USER=eden EDEN_DATABASE_PASSWORD= # String de conexão completa, usada por packages/database e apps/api/apps/worker. # Dentro do compose, o host é o nome do serviço (eden-postgres); fora, localhost # na porta mapeada abaixo. DATABASE_URL=postgres://eden:CHANGE_ME@localhost:55432/eden # Porta do Postgres mapeada ao host SÓ em desenvolvimento (nunca em produção — # ver docs/adr/0002-container-topology.md). Deixar em branco/comentar em prod. EDEN_POSTGRES_DEV_PORT=55432 # --- Portas das aplicações (cada uma em container/porta distintos — ADR-0002) --- EDEN_API_PORT=8080 EDEN_CORE_PORT=3001 EDEN_PARCEIROS_PORT=3002 EDEN_ASSINANTE_PORT=3003 # --- Frontend: URL base da API consumida pelo browser (Vite, build-time) --- # Lida via import.meta.env.VITE_API_BASE_URL. Dev local (`pnpm dev`, fora de # Docker): a API roda em localhost:8080, origem DIFERENTE da porta do Vite — # precisa de URL absoluta + CORS (ver EDEN_CORS_ORIGINS abaixo). Copiar para # o .env de cada app (apps/core-web/.env etc.) — Vite não lê o .env da raiz. VITE_API_BASE_URL=http://localhost:8080/api/v1 # Build de produção via Docker (compose.yaml `VITE_API_BASE_URL` de build # arg, default /api/v1): a API NÃO tem domínio público próprio (decisão do # operador — só acessível por IP interno). O browser chama a API pelo MESMO # domínio do frontend, caminho relativo /api/v1 — o proxy reverso na frente # de cada um dos 3 domínios públicos precisa rotear internamente esse path # para o container eden-api (rede interna, nunca exposto publicamente). # Nesse fluxo (mesma origem) o navegador não faz preflight de CORS. # --- CORS (origens de browser permitidas a chamar a API cross-origin) --- # Só é relevante para dev local (core-web em localhost:3001+, API em # localhost:8080 — origens diferentes). Nunca usar "*" — a API emite bearer # token (ver packages/config/src/env-schema.ts). Os 3 domínios públicos NÃO # entram aqui: eles chamam a API por caminho relativo via proxy (acima), # nunca cross-origin diretamente na API. EDEN_CORS_ORIGINS=http://localhost:3001,http://localhost:3002,http://localhost:3003 # --- Autenticação / sessão (ADR-0003) --- # Gerar com: openssl rand -hex 48 JWT_SIGNING_SECRET= # Segredo do servidor para HMAC de OTP (nunca reaproveitar o JWT secret) — # gerar com: openssl rand -hex 32 SIGNATURE_OTP_SECRET= # --- Criptografia de campo reversível (ADR-0005) --- # Chave raiz para AES-256-GCM (segredos de integração, credenciais reversíveis). # Gerar com: openssl rand -hex 32. Rotação é operação auditada — ver docs/security/threat-model.md. EDEN_FIELD_ENCRYPTION_KEY= # --- Bootstrap do primeiro superadmin (só usado se `users` estiver vazia) --- EDEN_SUPERADMIN_EMAIL= EDEN_SUPERADMIN_PASSWORD= # --- SMTP (e-mail) --- SMTP_HOST= SMTP_PORT=465 SMTP_USER= SMTP_PASS= SMTP_FROM= # --- S3 / storage de objetos (compatível MinIO ou AWS S3) --- S3_ENDPOINT= S3_REGION=us-east-1 S3_FORCE_PATH_STYLE=true S3_ACCESS_KEY_ID= S3_SECRET_ACCESS_KEY= S3_BUCKET= # --- URL pública base (usada para montar links absolutos em e-mails) --- PUBLIC_BASE_URL=http://localhost:3001 # --- Integrações externas (preenchidas quando cada adapter for implementado) --- FOCUS_NFE_API_TOKEN= FOCUS_NFE_BASE_URL= SAPERX_API_TOKEN= SAPERX_BASE_URL= CONTROLID_ENCRYPTION_KEY=