Melhores Praticas para Arquivos .env em Producao (Guia 2026)
Gerenciar variaveis de ambiente e uma das preocupacoes de seguranca mais subestimadas no desenvolvimento de software. Um arquivo .env mal configurado e commitado em um repositorio publico causou algumas das maiores violacoes de dados da historia recente. Este guia cobre tudo que voce precisa saber sobre como lidar corretamente com arquivos .env — desde regras basicas de formato ate gerenciamento de secrets em nivel de producao.
O que e um Arquivo .env?
Um arquivo .env (pronunciado "dot env") e um arquivo de configuracao em texto plano que armazena variaveis de ambiente para sua aplicacao. Ele segue um formato simples de CHAVE=VALOR e e carregado na inicializacao da aplicacao por bibliotecas como dotenv (Node.js), python-decouple (Python), godotenv (Go) ou vlucas/phpdotenv (PHP).
A ideia central por tras dos arquivos .env vem da metodologia Twelve-Factor App, que recomenda armazenar configuracao no ambiente em vez de no codigo. Isso significa que o mesmo codebase pode rodar em desenvolvimento, staging e producao simplesmente trocando o arquivo .env — sem alteracoes no codigo.
Coisas comuns armazenadas em arquivos .env incluem strings de conexao com banco de dados, chaves de API, credenciais de servicos terceiros, feature flags, numeros de porta e configuracoes de modo da aplicacao.
Regras de Formato do Arquivo .env
O formato .env e simples mas tem regras importantes que diferem ligeiramente entre parsers. Seguir essas regras consistentemente evita bugs sutis:
Sintaxe basica CHAVE=VALOR
# Uma variavel por linha PORT=3000 NODE_ENV=production APP_NAME="Minha Aplicacao"
Valores entre aspas
Valores contendo espacos, caracteres especiais ou que precisam preservar espacos em branco no inicio/fim devem estar entre aspas. Aspas simples e duplas sao suportadas pela maioria dos parsers, mas aspas duplas sao mais portaveis:
# Obrigatorio: espacos no valor APP_DESCRIPTION="Uma aplicacao web pronta para producao" # Obrigatorio: caracteres especiais como # ou $ DB_PASSWORD="p@$$w0rd#2026" # Opcional mas inofensivo: valores simples PORT="3000"
Valores multilinhas
Para chaves privadas ou certificados que abrangem multiplas linhas, use valores entre aspas duplas com quebras de linha literais ou a sequencia de escape \n (depende do parser):
# Quebras de linha literais dentro de aspas duplas (sintaxe dotenv v15+) PRIVATE_KEY="-----BEGIN RSA PRIVATE KEY----- MIIEowIBAAKCAQEA... -----END RSA PRIVATE KEY-----" # Alternativa: quebras de linha escapadas (mais portavel) PRIVATE_KEY="-----BEGIN RSA PRIVATE KEY-----\nMIIEowIBAAKCAQEA...\n-----END RSA PRIVATE KEY-----"
Comentarios
Linhas comecando com # sao comentarios e sao ignoradas pelos parsers. Comentarios inline (apos um valor na mesma linha) nao sao universalmente suportados e devem ser evitados:
# Este e um comentario seguro em sua propria linha PORT=3000 # EVITE: comentarios inline podem quebrar parsers # PORT=3000 # porta do servidor web <-- valor vira "3000 # porta do servidor web"
Convencoes de Nomenclatura para Variaveis de Ambiente
Convencoes de nomenclatura consistentes tornam seus arquivos .env mais faceis de entender e auditar. Siga estes padroes estabelecidos:
Use SCREAMING_SNAKE_CASE
Nomes de variaveis de ambiente devem ser todo em maiusculo com palavras separadas por underscores. Esta e a convencao universalmente aceita em todos os sistemas operacionais e linguagens:
# Correto DATABASE_URL=postgres://... MAX_UPLOAD_SIZE_MB=50 STRIPE_SECRET_KEY=sk_live_... # Errado # databaseUrl=postgres://... # maxUploadSize=50 # stripe-secret-key=sk_live_...
Prefixe por servico ou area funcional
Agrupe variaveis relacionadas com um prefixo comum. Isso torna o arquivo escaneavel e evita colisoes de nomes quando multiplos servicos sao configurados:
# Banco de Dados DB_HOST=localhost DB_PORT=5432 DB_NAME=myapp_production DB_USER=appuser DB_PASSWORD=your_strong_password # AWS AWS_ACCESS_KEY_ID=AKIAIOSFODNN7EXAMPLE AWS_SECRET_ACCESS_KEY=wJalrXUtnFEMI/K7MDENG AWS_REGION=us-east-1 AWS_S3_BUCKET=my-app-assets # Stripe STRIPE_PUBLIC_KEY=pk_live_... STRIPE_SECRET_KEY=sk_live_... STRIPE_WEBHOOK_SECRET=whsec_...
Nunca Commite .env no Git
Esta e a regra mais critica. Um arquivo .env commitado em um repositorio publico expoe seus secrets para toda a internet — e o historico do git e permanente. Mesmo que voce delete o arquivo em um commit subsequente, os secrets permanecem acessiveis no historico.
Adicione .env ao .gitignore primeiro
Antes de escrever uma unica linha de codigo em um novo projeto, adicione .env ao seu .gitignore. Este e o primeiro arquivo que voce deve criar:
# .gitignore # Arquivos de ambiente - NUNCA commite estes .env .env.local .env.development.local .env.test.local .env.production.local # Mas COMMITE o template de exemplo # !.env.example
O que fazer se .env ja foi commitado
Se um arquivo .env ja foi commitado no seu repositorio, tome estas medidas imediatamente:
- Rotacione todas as credenciais expostas imediatamente. Todo secret naquele arquivo deve ser considerado comprometido, independentemente de o repositorio ser publico ou privado. Invalide chaves de API, mude senhas, rotacione tokens.
- Remova o arquivo do rastreamento git:
git rm --cached .env - Adicione
.envao.gitignoree commite essa mudanca. - Reescreva o historico para limpar o arquivo. Para repositorios pequenos, use BFG Repo Cleaner. Para repos com historico sensivel, considere usar
git filter-repo. - Force-push o historico limpo:
git push --force --all - Se o repositorio era publico ou foi forkado ou clonado, assuma que os secrets estao permanentemente comprometidos mesmo apos reescrita do historico.
Crie um Template .env.example
O arquivo .env.example (tambem chamado .env.sample ou .env.template) e o complemento da sua entrada no .gitignore. Ele documenta toda variavel que sua aplicacao precisa sem expor valores reais. Este arquivo deve ser commitado no seu repositorio.
# .env.example # Copie este arquivo para .env e preencha seus valores # Nunca commite .env — commite apenas este arquivo # Aplicacao NODE_ENV=development PORT=3000 APP_URL=http://localhost:3000 # Banco de Dados — obtenha credenciais do seu DBA ou console cloud DATABASE_URL=postgres://user:password@localhost:5432/mydb # Stripe — encontre em dashboard.stripe.com/apikeys STRIPE_PUBLIC_KEY=pk_test_your_key_here STRIPE_SECRET_KEY=sk_test_your_key_here # OpenAI — encontre em platform.openai.com/api-keys OPENAI_API_KEY=sk-your_openai_key_here
Boas praticas para seu .env.example:
- Inclua toda variavel que a aplicacao precisa para funcionar, sem excecoes.
- Use valores placeholder que indicam onde obter o valor real (por ex.,
sk_test_your_key_hereem vez de apenas uma string vazia). - Adicione comentarios explicando variaveis nao obvias e onde obter credenciais.
- Mantenha sincronizado com o arquivo
.envreal — atualize sempre que adicionar ou remover variaveis. - Opcionalmente inclua padroes seguros e nao secretos (como
PORT=3000) para que novos desenvolvedores possam comecar rapidamente.
Voce tambem pode usar Docker Compose para carregar um arquivo .env compartilhado entre servicos:
# docker-compose.yml version: '3.8' services: app: build: . env_file: - .env ports: - "${PORT}:${PORT}" worker: build: ./worker env_file: - .env # variaveis compartilhadas - .env.worker # sobrescritas especificas do worker
Gerenciamento de Secrets em Producao
Aqui esta a verdade desconfortavel: voce nao deve usar arquivos .env em producao. Arquivos no disco sao uma forma ruim de gerenciar secrets em escala. Eles podem ser acidentalmente logados, incluidos em imagens de container, lidos por processos comprometidos ou esquecidos em servidores desativados.
Para cargas de trabalho em producao, use um gerenciador de secrets dedicado:
| Ferramenta | Melhor Para | Recursos Principais |
|---|---|---|
| AWS Secrets Manager | Apps hospedados na AWS | Rotacao automatica, IAM granular, logs de auditoria |
| AWS Parameter Store | Apps AWS, configs simples | Camada gratuita, nomenclatura hierarquica, criptografia KMS |
| HashiCorp Vault | Multi-cloud, self-hosted | Secrets dinamicos, PKI, leasing de credenciais de BD |
| Doppler | Equipes de desenvolvimento | Branching tipo Git para configs, CLI sync, integracoes |
| Google Secret Manager | Apps hospedados no GCP | Controle de versao, acesso via IAM, logging de auditoria |
| Azure Key Vault | Apps hospedados no Azure | Chaves com HSM, gerenciamento de certificados, RBAC |
| Infisical | Equipes open-source | Self-hostavel, E2E criptografado, rotacao de secrets |
O padrao para producao e injetar secrets como variaveis de ambiente no momento de inicializacao do container via seu orquestrador (Kubernetes Secrets, ECS task definitions, Fly.io secrets), nao enviando arquivos .env com seus deploys.
Carregamento de .env Especifico por Framework
A maioria dos frameworks modernos estende o formato basico .env com suas proprias convencoes. Entender essas convencoes previne bugs do tipo "por que minha variavel esta undefined?":
Next.js
Next.js carrega variaveis nesta ordem de prioridade: .env.local > .env.[environment] > .env. Apenas variaveis prefixadas com NEXT_PUBLIC_ sao expostas ao navegador. Todas as outras permanecem apenas no servidor:
# Apenas servidor (nunca enviado ao navegador) DATABASE_URL=postgres://... OPENAI_API_KEY=sk-... # Exposto ao bundle do navegador (use com cautela) NEXT_PUBLIC_APP_URL=https://myapp.com NEXT_PUBLIC_STRIPE_KEY=pk_live_...
Vite
Vite usa o prefixo VITE_ para expor variaveis ao codigo client-side. Variaveis sem prefixo ficam disponiveis apenas no vite.config.js, nao no codigo do seu app:
# Acessivel apenas em vite.config.js SOME_BUILD_CONFIG=value # Acessivel no codigo client via import.meta.env.VITE_API_URL VITE_API_URL=https://api.myapp.com VITE_APP_TITLE="My App"
Create React App (CRA)
CRA requer o prefixo REACT_APP_ para todas as variaveis customizadas. Variaveis sem este prefixo sao ignoradas:
# Disponivel como process.env.REACT_APP_API_URL REACT_APP_API_URL=https://api.myapp.com REACT_APP_VERSION=1.0.0 # Ignorado pelo CRA (sem prefixo) # SECRET_KEY=this-wont-be-bundled
Valide Seu Arquivo .env
Mesmo desenvolvedores experientes cometem erros com arquivos .env — aspas faltando, um secret commitado acidentalmente ou uma variavel que segue a convencao de nomenclatura errada. Antes de subir para staging ou producao, vale a pena rodar uma validacao rapida.
Nossa ferramenta Inspetor ENV verifica seu arquivo .env inteiramente no seu navegador (zero processamento server-side). Ela detecta secrets expostos por padrao de nome de chave, sinaliza problemas de formato como valores sem aspas com espacos ou nomes de chave invalidos, e gera automaticamente um .env.example seguro com secrets redigidos.
Valide Seu Arquivo .env Agora
Cole seu arquivo .env para detectar secrets, verificar formato e gerar um .env.example seguro. Todo processamento e 100% no navegador — seus secrets nunca saem da sua maquina.
Ferramentas Relacionadas
- Decodificador JWT — decodifique e inspecione JSON Web Tokens no navegador
- Gerador Docker Compose — crie arquivos
docker-compose.ymlcom suporte a variaveis de ambiente - Gerador de Hash — gere SHA-256 e outros hashes para senhas e tokens
- Ver todas as ferramentas gratuitas