hidden: true
TL;DR
Variáveis de ambiente são configurações que ficam fora do código. Senhas, chaves de API, URLs de banco de dados — tudo isso deve viver em variáveis de ambiente, nunca hardcoded. É a diferença entre um app seguro e um desastre esperando acontecer.
hidden: true
O erro que todo vibecoder comete uma vez
Você tá construindo um app. Precisa conectar no banco de dados. E faz isso:
const db = new Database("postgresql://admin:senha123@localhost:5432/meubanco");Funciona no localhost. Você faz commit. Faz push pro GitHub. E aí percebe: sua senha do banco está pública para o mundo inteiro.
Isso acontece mais do que você imagina. Bots vasculham o GitHub 24/7 procurando senhas commitadas. Em minutos, alguém pode acessar seu banco, seu Stripe, seu AWS.
Variáveis de ambiente existem para evitar isso.
O que são variáveis de ambiente?
São valores que existem no sistema operacional ou no servidor, não no código. Seu app lê esses valores quando precisa, mas eles nunca aparecem no repositório.
Em vez de:
const dbUrl = "postgresql://admin:senha123@db.exemplo.com:5432/prod";Você faz:
const dbUrl = process.env.DATABASE_URL;O valor real de DATABASE_URL existe apenas no ambiente onde o app roda — sua máquina, o servidor de produção, etc.
O arquivo .env
No desenvolvimento local, variáveis de ambiente ficam em um arquivo chamado .env na raiz do projeto:
# .env
DATABASE_URL=postgresql://admin:senha123@localhost:5432/meubanco
STRIPE_SECRET_KEY=sk_test_abc123
NEXT_PUBLIC_API_URL=http://localhost:3000/apiFrameworks como Next.js, Vite e Nuxt leem esse arquivo automaticamente. Você não precisa fazer nada especial.
Regra de ouro: O .env NUNCA vai pro Git. Sempre adicione ao .gitignore:
# .gitignore
.env
.env.local
.env.production.env.example: o mapa do tesouro
Se o .env não vai pro Git, como outros devs (ou você no futuro) sabem quais variáveis configurar?
Crie um .env.example com os nomes mas sem os valores reais:
# .env.example
DATABASE_URL=
STRIPE_SECRET_KEY=
NEXT_PUBLIC_API_URL=Esse arquivo vai pro Git. Serve como documentação: "essas são as variáveis que o projeto precisa".
Variáveis públicas vs secretas
Algumas variáveis são sensíveis (senhas, chaves), outras não (URL pública da API).
No Next.js, existe uma convenção:
NEXT_PUBLIC_*→ visível no navegador (frontend)- Sem prefixo → só no servidor (backend)
# Segredo — só o servidor vê
STRIPE_SECRET_KEY=sk_live_xxx
# Público — o navegador pode ver
NEXT_PUBLIC_APP_URL=https://meuapp.comNunca coloque chaves secretas em variáveis públicas. Se começa com NEXT_PUBLIC_, qualquer pessoa pode ver inspecionando o código no navegador.
Como funciona em produção
No localhost, o .env cuida de tudo. Mas em produção, não existe arquivo .env — as variáveis são configuradas diretamente no servidor ou plataforma.
Na plataforma de deploy
Cada plataforma tem sua forma de gerenciar variáveis:
# Veloz
$ veloz env set DATABASE_URL="postgresql://user:pass@host:5432/db"
$ veloz env set STRIPE_SECRET_KEY="sk_live_xxx"
$ veloz env list
# Vercel
$ vercel env add DATABASE_URL
# Railway
# Pelo dashboard → VariablesAs variáveis ficam criptografadas na plataforma e são injetadas no ambiente quando o app roda. Seguro e prático.
Por que não usar .env em produção?
- Segurança — arquivos podem ser expostos acidentalmente
- Praticidade — não precisa acessar o servidor para mudar um valor
- Auditoria — plataformas registram quem mudou o quê e quando
- Separação — cada ambiente (dev, staging, prod) tem seus próprios valores
O fluxo correto
Desenvolvimento:
código lê process.env.DATABASE_URL
valor vem do arquivo .env local
Produção:
código lê process.env.DATABASE_URL (mesmo código!)
valor vem da plataforma de deploy (Veloz, Vercel, etc.)
O código é idêntico nos dois ambientes. Só os valores mudam. Isso é o poder das variáveis de ambiente.
Checklist de segurança
- ✅
.envno.gitignore - ✅
.env.exampleno repositório (sem valores reais) - ✅ Nenhuma senha ou chave hardcoded no código
- ✅ Variáveis secretas sem prefixo
NEXT_PUBLIC_ - ✅ Variáveis de produção configuradas na plataforma de deploy
- ✅ Chaves diferentes para dev e produção (nunca reusar)
E se eu já commitei uma senha?
Acontece. E mudar a senha no próximo commit não resolve — o histórico do Git guarda tudo.
O que fazer:
- Troque a senha/chave imediatamente no serviço afetado
- Revogue a chave antiga (Stripe, AWS, etc.)
- Remova do histórico do Git (com
git filter-branchou BFG Repo Cleaner) - Adicione
.envao.gitignorepara nunca mais acontecer
Melhor prevenir. Configure o .gitignore antes do primeiro commit.
hidden: true
FAQ
Posso commitar meu arquivo .env no Git?
Nunca. O .env contém segredos como senhas e chaves de API. Adicione .env ao seu .gitignore e use .env.example (sem valores reais) para documentar quais variáveis são necessárias.
Como passo variáveis de ambiente para produção?
Depende da plataforma. Na maioria, você configura pelo dashboard ou CLI. No Veloz, por exemplo: veloz env set DATABASE_URL=postgresql://... — e a variável fica disponível para seu app em produção.
Qual a diferença entre variáveis de ambiente e hardcoded?
Hardcoded é quando o valor está escrito direto no código e visível para qualquer pessoa. Variável de ambiente é um valor externo que o código lê em tempo de execução — não aparece no repositório e pode mudar sem alterar código.