
Software Development
Coding
Como Definir e Usar Variáveis de Ambiente no Node.js: Guia Prático
Colocar credenciais de banco de dados, chaves de API e segredos direto no código é receita para vazamento. Variáveis de ambiente são como aplicações em produção lidam com dados sensíveis com segurança – vamos fazer isso do jeito certo.
Por que Variáveis de Ambiente Importam
Você está construindo uma aplicação em Node.js. Seu código precisa de uma senha de banco de dados, de uma chave de API de um serviço externo e de configurações que mudam entre desenvolvimento e produção.
Você basicamente tem três opções:
-
Hardcodar tudo no código – senha do banco em
config.js, chave de API perdida em um comentário, segredos versionados no git. É assim que sistemas são invadidos. Não faça isso. -
Variáveis de ambiente – você mantém dados sensíveis separados do código. Valores diferentes para desenvolvimento, staging e produção. Mais seguro, escalável e padrão de mercado.
-
Gerenciador de segredos – AWS Secrets Manager, HashiCorp Vault etc. A abordagem corporativa para sistemas grandes.
Para a maioria dos projetos em Node.js e aplicações pequenas/médias, variáveis de ambiente com dotenv é o caminho certo.
O Que São Variáveis de Ambiente, de Verdade
Variáveis de ambiente são valores definidos no sistema operacional que sua aplicação consegue acessar em tempo de execução.
Quando você define algo como:
DB_PASSWORD=supersecret123
API_KEY=abc123xyz789
NODE_ENV=production
Sua aplicação consegue ler esses valores sem que eles apareçam no código-fonte:
const password = process.env.DB_PASSWORD; // "supersecret123"
const apiKey = process.env.API_KEY; // "abc123xyz789"
const env = process.env.NODE_ENV; // "production"
O sistema operacional injeta tudo isso em
process.env – um objeto global do Node.js – na hora em que o processo é iniciado.Por Que Isso é Importante
Segurança: Segredos não aparecem no código nem no histórico do git. Se seu repositório for público, suas credenciais não ficam expostas.
Configuração: Ambientes diferentes (desenvolvimento, homologação, produção) podem ter valores diferentes sem precisar alterar uma linha de código.
Flexibilidade de deploy: Você faz deploy do mesmo código em servidores diferentes – cada ambiente tem suas próprias variáveis de ambiente, e a aplicação se adapta automaticamente.
O Problema: Configurar Tudo na Mão é Chato
Configurar variáveis de ambiente manualmente para cada desenvolvedor e para cada ambiente de deploy é cansativo.
No macOS/Linux:
export DB_HOST=localhost
export DB_PASSWORD=mypassword
export API_KEY=key123
No Windows (PowerShell):
$env:DB_HOST="localhost"
$env:DB_PASSWORD="mypassword"
$env:API_KEY="key123"
Cada pessoa do time tem que repetir esse processo. Cada pipeline de CI/CD também. É fácil errar, esquecer uma variável ou usar o valor errado.
É aqui que entra o
dotenv.Usando Dotenv: o Jeito Simples
Dotenv é uma biblioteca para Node.js que carrega variáveis de ambiente a partir de um arquivo
.env direto para process.env.Passo 1: Instale o Dotenv
npm install dotenv
ou com Yarn:
yarn add dotenv
Passo 2: Crie um Arquivo .env
Crie um arquivo
.env na raiz do projeto:DB_HOST=localhost
DB_PORT=5432
DB_USER=admin
DB_PASSWORD=mysecurepassword
API_KEY=abc123xyz789
NODE_ENV=development
JWT_SECRET=your-jwt-secret-key
LOG_LEVEL=info
Passo 3: Carregue as Variáveis no Seu App
No começo da sua aplicação (antes de qualquer código que use essas variáveis), faça o require e configure o dotenv:
// app.js ou server.js – PRIMEIRA LINHA
require('dotenv').config();
// AGORA você pode usar process.env
const express = require('express');
const app = express();
const dbHost = process.env.DB_HOST;
const dbPort = process.env.DB_PORT;
const apiKey = process.env.API_KEY;
console.log(`Conectando no banco em ${dbHost}:${dbPort}`);
app.listen(3000);
Crítico: Chame
require('dotenv').config() antes de qualquer outro require que dependa de variáveis de ambiente.Passo 4: Adicione .env ao .gitignore
NUNCA faça commit do
.env no git. Seus segredos vão parar no repositório.# .gitignore
.env
.env.local
.env.*.local
Passo 5: Compartilhe um Template (Sem Segredos)
Crie um
.env.example com as mesmas chaves, mas com valores de exemplo:# .env.example – É este que vai pro repositório
DB_HOST=localhost
DB_PORT=5432
DB_USER=admin
DB_PASSWORD=change_me
API_KEY=change_me
NODE_ENV=development
JWT_SECRET=change_me
LOG_LEVEL=info
Outros desenvolvedores copiam esse arquivo e preenchem os valores reais localmente:
cp .env.example .env
# Depois edite o .env com os valores reais
Exemplo Prático: API em Express com Variáveis de Ambiente
Um exemplo simples usando Express.js:
// server.js
require('dotenv').config();
const express = require('express');
const postgres = require('pg');
const app = express();
// Lê configurações a partir das variáveis
const config = {
db: {
host: process.env.DB_HOST,
port: process.env.DB_PORT,
user: process.env.DB_USER,
password: process.env.DB_PASSWORD,
database: process.env.DB_NAME
},
api: {
port: process.env.PORT || 3000,
apiKey: process.env.API_KEY,
jwtSecret: process.env.JWT_SECRET
},
env: process.env.NODE_ENV || 'development'
};
// Valida variáveis obrigatórias
if (!config.api.apiKey) {
throw new Error('A variável de ambiente API_KEY é obrigatória');
}
// Conecta no banco
const pool = new postgres.Pool(config.db);
// Rotas
app.get('/api/users', (req, res) => {
const authHeader = req.headers.authorization;
const token = authHeader?.split(' ');[1]
// Verifica token usando JWT_SECRET
if (!token) {
return res.status(401).json({ error: 'Unauthorized' });
}
// Consulta o banco com o pool de conexões
pool.query('SELECT * FROM users', (err, result) => {
if (err) throw err;
res.json(result.rows);
});
});
// Sobe o servidor
const port = config.api.port;
app.listen(port, () => {
console.log(`Servidor rodando na porta ${port} em modo ${config.env}`);
});
Com essa configuração:
- Credenciais de banco vêm do
.env - Chaves de API e segredos são variáveis de ambiente
- O mesmo código roda em dev, staging e produção com
.envdiferentes - Nada sensível vai parar no seu repositório git
Boas Práticas para Variáveis de Ambiente
1. Valide Variáveis Obrigatórias na Inicialização
Não espere dar erro de conexão para descobrir que
DB_PASSWORD não foi definida.require('dotenv').config();
const required = ['DB_HOST', 'DB_USER', 'DB_PASSWORD', 'API_KEY'];
const missing = required.filter(key => !process.env[key]);
if (missing.length > 0) {
throw new Error(`Faltam variáveis de ambiente obrigatórias: ${missing.join(', ')}`);
}
2. Use um Objeto de Configuração
Em vez de espalhar
process.env.XYZ por todo o código, centralize em um módulo de config:// config.js
require('dotenv').config();
module.exports = {
database: {
host: process.env.DB_HOST,
port: process.env.DB_PORT,
user: process.env.DB_USER,
password: process.env.DB_PASSWORD
},
api: {
key: process.env.API_KEY,
jwtSecret: process.env.JWT_SECRET
},
app: {
port: process.env.PORT || 3000,
environment: process.env.NODE_ENV || 'development'
}
};
// Uso
const config = require('./config');
console.log(config.database.host);
3. Use .env Diferentes para Cada Ambiente
.env # padrão / desenvolvimento
.env.production # overrides para produção
.env.test # ambiente de testes
Carregue o arquivo certo:
const envFile = process.env.NODE_ENV === 'production'
? '.env.production'
: '.env';
require('dotenv').config({ path: envFile });
4. Agrupe Variáveis com Prefixos
Use prefixos para organizar melhor suas configs:
# Banco
DB_HOST=localhost
DB_PORT=5432
DB_USER=admin
# Redis
REDIS_HOST=localhost
REDIS_PORT=6379
# Serviços externos
STRIPE_API_KEY=sk_...
SENDGRID_API_KEY=SG_...
5. Documente o Que Cada Variável Faz
No
.env.example, comente cada campo:# Conexão com banco PostgreSQL
DB_HOST=localhost # Host do banco
DB_PORT=5432 # Porta do banco
DB_USER=admin # Usuário
DB_PASSWORD=change_me # Senha
# Configuração de APIs
API_KEY=change_me # Chave de API de serviço externo
JWT_SECRET=change_me # Segredo para assinar JWTs
# Aplicação
PORT=3000 # Porta do servidor Express
NODE_ENV=development # Ambiente (development/staging/production)
Alternativas ao Dotenv em Produção
Para desenvolvimento e projetos menores, dotenv funciona muito bem. Para aplicações grandes e produção, considere:
AWS Secrets Manager
Armazene segredos na AWS e recupere em tempo de execução. Mais seguro em ambientes cloud.
HashiCorp Vault
Gerenciamento de segredos em nível enterprise, com rotação, auditoria e controle fino de acesso.
Variáveis no CI/CD
GitHub Actions, GitLab CI, CircleCI etc. permitem definir variáveis de ambiente diretamente no pipeline. Não há necessidade de
.env no servidor.Kubernetes Secrets
Em clusters Kubernetes, use Secrets e ConfigMaps para gerenciar configuração e segredos.
Para aprendizado e desenvolvimento com Node.js, especialmente em cursos como os da Archi’s Academy, o padrão recomendado é começar com dotenv.
Aprendendo Node.js de Verdade
Variáveis de ambiente são só uma parte do quebra-cabeça de uma API Node.js pronta para produção. Saber configurar, fazer deploy e operar sua aplicação é o que diferencia quem “só escreve código” de quem realmente entrega sistemas.
Na Archi's Academy, o Backend Development track mostra não só como escrever código em Node.js, mas como configurar, fazer deploy e escalar suas APIs em ambientes reais.
Learn by Doing. Prove by Doing. Get Hired.

Resumo: Segredos Devem Ficar Fora do Código
Hardcodar segredos diretamente no código é um risco de segurança enorme. Variáveis de ambiente são o padrão de mercado para gerenciar configuração sensível. Se você domina esse padrão cedo, reduz drasticamente a chance de vazar credenciais.
Comece com dotenv em desenvolvimento. Entenda o fluxo. Depois, evolua para gerenciadores de segredos conforme sua aplicação cresce.
Tem dúvidas sobre variáveis de ambiente, configuração em Node.js ou boas práticas de backend? A equipe da Archi's Academy está pronta para ajudar – fale com a gente quando quiser.
Pazartesi, Tem 20, 2026