Variáveis ambiente: guia completo para aplicações
Variáveis de ambiente são valores nomeados que controlam o comportamento de processos. Este guia mostra como usá-las com segurança e praticidade.
Variáveis de ambiente são valores nomeados que controlam o comportamento de processos. Este guia mostra como usá-las com segurança e praticidade.
Variáveis de ambiente são valores nomeados dinamicamente que podem afetar o modo como os processos em execução irão se comportar em um computador, segundo a Wikipedia. Em termos práticos, elas funcionam como um canal de configuração que o código lê em tempo de execução. Isso permite trocar credenciais, URLs e parâmetros sem tocar no código-fonte. Este guia mostra o caminho completo: do conceito à aplicação, passando por configuração, boas práticas e erros comuns.
O que são variáveis de ambiente e por que importam
Variável de ambiente é um par nome-valor definido fora do programa. O sistema operacional mantém essas variáveis e as disponibiliza para os processos que são iniciados. Por exemplo, PATH é uma variável de ambiente que lista diretórios onde o sistema procura executáveis. Mas o uso vai além: você pode definir DATABASE_URL, API_KEY ou DEBUG_MODE para controlar o comportamento da sua aplicação.
A relevância aparece quando você precisa rodar o mesmo código em ambientes diferentes. Em desenvolvimento, você usa um banco local. Em produção, um banco remoto. Sem variáveis de ambiente, você teria que editar o código a cada deploy. Com elas, o código permanece idêntico e a configuração muda externamente.
Passo 1: Entenda o escopo e a hierarquia das variáveis
Antes de configurar, é preciso saber onde a variável existe. Existem três níveis principais:
- Nível de sistema: definida no sistema operacional, disponível para todos os usuários e processos.
- Nível de usuário: definida para um usuário específico, vale apenas para processos iniciados por ele.
- Nível de processo: definida apenas para um processo específico e seus filhos, normalmente via terminal.
A hierarquia importa porque uma variável de processo pode sobrescrever uma de usuário, que por sua vez sobrescreve uma de sistema. Um erro comum é definir a variável no nível errado e gastar horas debugando. Por exemplo, se você define DATABASE_URL no nível de usuário, mas o serviço roda como outro usuário, a variável não estará visível.
Dica: use o comando env no Linux ou set no Windows para listar as variáveis ativas no processo atual. Isso confirma se a variável foi carregada corretamente.
Passo 2: Configure variáveis no Linux e macOS
No Linux e macOS, a sintaxe é direta. Para definir uma variável temporária no terminal, use:
export MINHA_VARIAVEL="valor"
Para tornar a variável permanente para o usuário, adicione a linha no arquivo ~/.bashrc ou ~/.zshrc, dependendo do shell. Depois de editar, execute source ~/.bashrc para aplicar as mudanças na sessão atual.
Para variáveis de sistema, edite /etc/environment ou crie um arquivo em /etc/profile.d/. Nesse caso, apenas usuários com privilégios administrativos podem alterar.
Um erro comum é esquecer o export. Sem ele, a variável existe no shell, mas não é passada para os processos filhos. O comando export marca a variável para ser herdada.
Dica: evite colocar segredos em arquivos versionados. Se você adicionar ~/.bashrc ao repositório, suas chaves vazam. Use arquivos .env com .gitignore para manter segredos fora do controle de versão.
Passo 3: Configure variáveis no Windows
No Windows, o caminho é gráfico. Acesse o Painel de Controle, depois Sistema e Configurações Avançadas do Sistema. Na aba Avançado, clique em Variáveis de Ambiente. Você verá duas listas: variáveis do usuário e variáveis do sistema.
Para criar uma nova variável, clique em Nova e informe o nome e o valor. Para editar uma existente, selecione e clique em Editar. Uma diferença importante: variáveis do sistema exigem privilégios de administrador.
Depois de alterar, é necessário reiniciar o terminal ou o aplicativo que vai usar a variável. O Windows não propaga mudanças automaticamente para processos já em execução.
Erro comum: usar set no prompt de comando define a variável apenas para a sessão atual, não permanentemente. Para persistir, use setx ou a interface gráfica. setx tem limitações de tamanho (cerca de 1024 caracteres), então para valores longos prefira a interface gráfica.
Passo 4: Use arquivos .env para organizar a configuração
Arquivos .env são a prática padrão em projetos modernos. Eles armazenam pares chave=valor em texto plano, normalmente na raiz do projeto. O código lê esse arquivo no início da execução e carrega as variáveis para o ambiente do processo.
A vantagem é centralizar a configuração e facilitar o versionamento de ambientes. Você pode ter .env.dev, .env.staging e .env.prod, cada um com valores específicos. Mas atenção: o arquivo .env não deve ser versionado. Crie um .env.example com valores fictícios para servir de modelo.
A maioria das linguagens tem bibliotecas para carregar .env. No Node.js, por exemplo, o pacote dotenv carrega o arquivo automaticamente. Em Python, a biblioteca python-dotenv faz o mesmo. Em PHP, o vlucas/phpdotenv é comum.
Erro comum: versionar o .env acidentalmente. Sempre adicione .env ao .gitignore logo no início do projeto. Um vazamento de credenciais em um repositório público pode causar danos financeiros e de reputação.
Passo 5: Leia variáveis no código da aplicação
Cada linguagem tem sua forma de acessar variáveis de ambiente. Em Node.js, use process.env.NOME_DA_VARIAVEL. Em Python, os.environ.get('NOME_DA_VARIAVEL'). Em Java, System.getenv("NOME_DA_VARIAVEL"). Em Go, os.Getenv("NOME_DA_VARIAVEL").
O padrão recomendado é sempre usar um valor padrão quando a variável não existir. Por exemplo, em Python:
import os
porta = int(os.environ.get('PORTA', 3000))
Isso evita que a aplicação quebre quando a variável não está definida. Mas para variáveis críticas, como chaves de API, é melhor falhar rápido: se a variável não existir, lance um erro claro.
Dica: valide as variáveis no início da aplicação. Crie uma função que verifica se todas as variáveis obrigatórias estão presentes e exibe uma mensagem útil se faltar alguma. Isso reduz o tempo de debug em produção.
Passo 6: Siga boas práticas de segurança
Nunca coloque segredos diretamente no código. Isso inclui senhas, tokens e chaves de API. Use variáveis de ambiente para separar configuração sensível do código-fonte.
Além disso, restrinja o acesso aos arquivos .env. No Linux, defina permissão 600 para que apenas o dono leia. No Windows, limite as permissões do arquivo na aba de segurança.
Um erro comum é usar a mesma variável para todos os ambientes. Por exemplo, usar a chave de produção em desenvolvimento. Isso aumenta a superfície de ataque. Prefira ambientes isolados, com credenciais próprias.
Ressalva: variáveis de ambiente não são criptografadas. Se um invasor tem acesso ao sistema, ele pode ler as variáveis. Para segredos em produção, considere serviços de gerenciamento de segredos, como Vault ou AWS Secrets Manager.
Passo 7: Faça um checklist rápido antes de colocar em produção
Antes de subir a aplicação, confira:
- As variáveis obrigatórias estão definidas no ambiente de produção?
- O arquivo
.envestá no.gitignore? - As permissões do arquivo
.envestão restritas? - Os valores de produção são diferentes dos de desenvolvimento?
- A aplicação tem valores padrão para variáveis não críticas?
- O log não exibe valores de variáveis sensíveis?
Esse checklist cobre os erros mais comuns e evita surpresas no deploy.
FAQ: Perguntas frequentes sobre variáveis de ambiente
Como ver todas as variáveis de ambiente no Linux?
Use o comando env no terminal. Ele lista todas as variáveis do processo atual. Para filtrar, use env | grep NOME. No Windows, use set no prompt para ver as variáveis da sessão atual.
Qual a diferença entre variável de ambiente e variável local?
Variável local existe apenas dentro do shell ou script, e não é passada para processos filhos. Variável de ambiente é exportada e fica disponível para qualquer processo iniciado a partir daquele shell. O comando export transforma uma variável local em variável de ambiente.
Posso usar variáveis de ambiente no front-end?
Sim, mas com cuidado. Em frameworks como React ou Vue, as variáveis são embutidas no bundle no momento do build. Isso significa que elas ficam visíveis no código JavaScript do navegador. Nunca coloque segredos em variáveis de ambiente do front-end.
Como definir variáveis de ambiente em um arquivo .env?
Crie um arquivo chamado .env na raiz do projeto e adicione linhas no formato NOME=valor. Depois, use uma biblioteca como dotenv para carregar o arquivo no início da aplicação. Não inclua o .env no controle de versão.
O que acontece se uma variável de ambiente não estiver definida?
A aplicação pode falhar ou usar um valor padrão, dependendo da implementação. Se você usar os.environ['NOME'] em Python, gera um erro. Se usar os.environ.get('NOME', 'padrao'), retorna o valor padrão. A escolha depende da criticidade da variável.
Variáveis de ambiente são seguras para armazenar senhas?
Elas são mais seguras que colocar senhas no código, mas não são criptografadas. Qualquer usuário com acesso ao sistema pode ler as variáveis. Para alta segurança, use um gerenciador de segredos dedicado, que oferece criptografia e auditoria de acesso.