04 A casa nova do segredo
variável de ambiente e o .env
Este é o erro que quase ninguém chama de erro: tirar a senha do código e parar por aí.
O programa agora lê os.environ.get("NEON_DB_PASSWORD"), a
variável não existe em lugar nenhum, e o banco recusa. Na correria, a mão
vai sozinha de volta para a linha 11. E dessa vez ela fica.
Segredo sem endereço novo sempre volta para o endereço velho.
Variável de ambiente é um valor que mora no sistema, não no arquivo. O programa pergunta por nome e recebe. Ela existe enquanto aquele terminal existir — não vai junto quando você copia o projeto.
Só que digitar as variáveis toda vez que abre o computador é
insustentável, e o que é insustentável é abandonado. Por isso existe o
.env: um arquivo de texto com uma variável por linha, que fica
na pasta do projeto e nunca entra no Git.
E aí aparece o problema seguinte, o de gente: se o .env
nunca é publicado, como alguém que clonar o projeto sabe o que precisa
preencher? É para isso que existe o irmão dele.
- .envFica só na sua máquina. Tem os nomes e os
valores. Está no
.gitignore. - .env.exampleVai para o GitHub. Tem os nomes e as explicações, sem nenhum valor seu. É o formulário em branco.
No código, uma linha — e a senha nunca mais aparece escrita:
senha = os.environ.get("NEON_DB_PASSWORD", "")
E no .env.example, que é o arquivo público, os nomes com o
comentário ensinando o que pôr. Repare que o campo perigoso vem vazio e o
comentário diz como preencher:
# Token obrigatório para /api/security/*. Gere com:
# openssl rand -hex 32
NEON_API_TOKEN=
# Endpoint de execução de comandos. Desligado por padrão.
# Só ligue se souber exatamente o que está fazendo.
ENABLE_TERMINAL=false
Duas decisões dentro dessas seis linhas. Primeiro: o valor perigoso nasce vazio, e não com um exemplo que alguém vai deixar em produção. Segundo: o que é destrutivo nasce desligado — quem quiser ligar precisa querer, e vai ler o comentário no caminho.
O mesmo princípio no interceptador de e-mail, onde a ação padrão só escreve relatório e não toca em mensagem nenhuma:
# Ação ao detectar ameaça: relatorio | quarentena | excluir
# "relatorio" (padrão) apenas registra, não toca nas mensagens.
INTERCEPTOR_ACAO=relatorio
A captura das 11:09 é a mais completa da manhã. No editor, a linha 11 já não tem senha nenhuma:
senha = os.environ.get("NEON_DB_PASSWORD")
No terminal, a variável sendo dada ao sistema e o programa rodando com
ela — e o finally fechando a porta no fim:
$ export NEON_DB_PASSWORD='...'
$ python3 neon_core.py
[ SUCESSO ] Conexão estabelecida.
[ INFO ] Conexão encerrada com segurança.
Mesmo [ SUCESSO ] da aula 03. Mesma tela, mesmo resultado —
e agora o arquivo pode ser publicado sem levar nada junto.
O valor do export foi apagado desta página.
Numa gravação de tela, esse comando é tão perigoso quanto a linha 11 — e
ele fica no histórico do seu terminal depois.
arquivos · .env.example · neon_config.py · captura de 4 de setembro de 2026, 11:09