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:

  1. 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.
  2. Remova o arquivo do rastreamento git: git rm --cached .env
  3. Adicione .env ao .gitignore e commite essa mudanca.
  4. Reescreva o historico para limpar o arquivo. Para repositorios pequenos, use BFG Repo Cleaner. Para repos com historico sensivel, considere usar git filter-repo.
  5. Force-push o historico limpo: git push --force --all
  6. 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_here em vez de apenas uma string vazia).
  • Adicione comentarios explicando variaveis nao obvias e onde obter credenciais.
  • Mantenha sincronizado com o arquivo .env real — 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:

FerramentaMelhor ParaRecursos Principais
AWS Secrets ManagerApps hospedados na AWSRotacao automatica, IAM granular, logs de auditoria
AWS Parameter StoreApps AWS, configs simplesCamada gratuita, nomenclatura hierarquica, criptografia KMS
HashiCorp VaultMulti-cloud, self-hostedSecrets dinamicos, PKI, leasing de credenciais de BD
DopplerEquipes de desenvolvimentoBranching tipo Git para configs, CLI sync, integracoes
Google Secret ManagerApps hospedados no GCPControle de versao, acesso via IAM, logging de auditoria
Azure Key VaultApps hospedados no AzureChaves com HSM, gerenciamento de certificados, RBAC
InfisicalEquipes open-sourceSelf-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.

Abrir Inspetor ENV →

Ferramentas Relacionadas