Variáveis de Ambiente (environment)

Uma variável de ambiente é um valor armazenado no sistema operacional que pode ser acessado por programas e scripts. Essas variáveis são usadas para configurar parâmetros e informações sensíveis sem precisar escrevê-las diretamente no código. Quando um terminal é aberto gera um processo, e são carregadas todas as variáveis de ambiente do sistema operacional nele. Quando a aplicação é executada herda todas as variáveis de ambiente do processo pai (no caso do sistema operacional).

Por convenção são Maiúsculas e seus valores são sempre strings, mesmo que seja um número (nesse caso se desejar um número é necessário converte-lo). 

| Variáveis de Ambiente

Windows

bash
$ set # consulta variável de ambiente (CMD)
$ set VARIAVEL=valor # Registrar variável de ambiente na sessão atual (CMD)
$ setx VARIAVEL "valor" # Registrar variável de ambiente permanentemente (CMD)
$ $env:VARIAVEL_CRIADA = "Variavel_Terminal" # Registra na sessão atual (PS)
$ Add-Content -Path $PROFILE -Value '$env:VARIAVEL_CRIADA = "Valor_Permanente"' # Permanente (PS)

Linux

bash
$ env # consulta variável de ambiente
$ export VARIAVEL=valorsemaspas # registra uma variável de ambiente para sessão atual
$ echo 'export VARIAVEL=valorsemaspas' >> ~/.bashrc  # registra permanente Para Bash
$ source ~/.bashrc # Aplica as mudanças
acessar_env.py
import os

print(os.getenv("POSTGRES_PASSWORD"))

Acessar Variáveis de ambiente pelo python.

acessar_env.js
console.log(process.env) // Todas as Variáveis em formato JSON
console.log(process.env.POSTGRES_PASSWORD)
console.log(process.env.NODE_ENV)

Acessar Variáveis de ambiente pelo node. A variável  NODE_ENV retorna se a aplicação está rodando em desenvolvimento (development) ou produção (production)

.env
POSTGRES_USER=postgres
POSTGRES_HOST=localhost
POSTGRES_DB=postgres
POSTGRES_PORT=5432
POSTGRES_PASSWORD=postgres
POSTGRES_CA="-----BEGIN CERTIFICATE-----\nMIIETTCCArWgAwIBAgIUYprB..."
# DATABASE_URL=postgres://user:password@host:port/database # substitua pelas informações do banco
# Com o modulo dotenv-expand instalado é possível substituir a linha acima pelas variáveis já criadas
DATABASE_URL=postgres://$POSTGRES_USER:$POSTGRES_PASSWORD@$POSTGRES_HOST:$POSTGRES_PORT/$POSTGRES_DB

Em node tem um modulo dotenv que envia todas as variáveis de ambiente criadas no arquivo .env para aplicação quando executada. O next.js já vem com esse modulo por padrão, basta criar o .env e definir as variáveis.

Existem varios tipos de arquivos dotenv, mas as variáveis de ambiente configuradas no ambiente de produção sobreescrevem esses arquivos. A ordem de precendencia de leitura entre os arquivos env é: process.env, .env.development, .env

Use POSTGRES_CA apenas em produção. lembrando das aspas. e de informar o salto de linha com \n.

Iniciar aplicação com variável de ambiente temporária

Exemplo abaixo com next.js/node.

Ao iniciar um servidor com uma variável de ambiente temporaria (só disponivel durante a execução) coloque a variável de ambiente antes do comando.

Com espaço na frente do comando oculta-se do histórico.

bash
$ POSTGRES_SENHA=senha npm run dev

Instalar Biblioteca dotenv

Caso necessário instale a biblioteca dotenv (o next.js ja vem com ela, mas alguns modulos externos precisam da instalação como node-pg-migrate). Além disso para concatenar as variáveis dentro de um arquivo .env use a biblioteca expand. Assim poderá usar as variáveis bash $VARIAVEIS no .env.

bash
$ npm install dotenv@16.4.4
$ npm install dotenv-expand@11.0.6