ADR-0015 · Um único .env.example, distribuído por projeto
Status: aceito (23/10/2026) — entregue na versão 2.2.0.
Contexto
Seção intitulada “Contexto”Cada app e pacote tinha o próprio .env.example, e a raiz tinha outro para o
docker-compose.yml. Os arquivos repetiam variáveis com valores diferentes,
traziam dezenas de chaves que o código não lê mais e, no caso da raiz,
credenciais reais de produção versionadas (R-14).
Não havia um lugar para ver quais variáveis cada projeto precisa.
Decisão
Seção intitulada “Decisão”- Um só
.env.example, na raiz, com todos os exemplos do monorepo, divididos em seções: compartilhadas (banco, e-mail, token de pagamento, Redis), web, order-lifecycle, docs e docker-compose. Cada seção explica quem lê cada variável. - Destino explícito por seção com o marcador
#@target <pasta>, …. Variáveis com o mesmo valor em vários projetos ficam numa seção compartilhada com vários destinos (ex.:PAYMENT_BYPASS_TOKENpara web e API). - Cada app continua lendo o
.envda própria pasta (Next, dotenv da API, Prisma CLI, Astro).scripts/copy-env.mjs(make env) gera esses arquivos a partir das seções: cria os que faltam e, nos existentes, só acrescenta as variáveis novas, sem alterar valores.FORCE=1recria. - Só variáveis lidas pelo código e só valores de desenvolvimento
(
dev-only-…). Valores de produção ficam no Coolify.
Alternativas consideradas
Seção intitulada “Alternativas consideradas”- Um
.envúnico carregado por todos os apps. Exigiria mudar como cada ferramenta lê o ambiente e misturaria chaves com valores diferentes por contexto (ex.:DATABASE_URLcomlocalhostnos apps epostgresno compose). - Manter um exemplo por pasta. É o que gerou a duplicação e o vazamento.
Consequências
Seção intitulada “Consequências”- ➕ Um lugar para descobrir e documentar variáveis; a página Variáveis de ambiente segue as mesmas seções.
- ➕ Variável nova chega ao
.envde todos com ummake env, sem sobrescrever valores locais. - ➖ O
.env.examplenão deve ser copiado inteiro para um único.env(algumas chaves aparecem em mais de uma seção com valores diferentes); o cabeçalho do arquivo avisa. - ➖ Variável nova no código precisa entrar na seção certa do exemplo; a
auditoria pode ser feita comparando
process.env.*com o arquivo.

Desenvolvido e documentado porNós Tecnologia · Desenvolvimento Criativo

