Variáveis de ambiente e segredos da sua aplicação

Uma variável de ambiente é um valor que a aplicação lê de fora do código: a palavra-passe da base de dados, uma chave de API, o endereço de um serviço. Põe-se fora do código por duas razões: o código vai para o Git e para outras pessoas, e o mesmo código corre em sítios diferentes (a sua máquina, o ensaio, a produção) com valores diferentes. O que muda é onde se define cada variável, consoante onde a aplicação corre.

Onde se define, em cada caso

Onde corre Onde pôr as variáveis Depois
Node.js no cPanel No ecrã da aplicação, na parte das variáveis de ambiente (nome e valor). Guarde e reinicie a aplicação.
Python no cPanel No ecrã da aplicação, na parte das variáveis de ambiente. Guarde e reinicie.
PHP Num ficheiro .env fora da pasta pública, lido pelo código. Veja palavras-passe fora do código PHP. O código lê-o em cada pedido.
VPS com Node.js e PM2 No ecosystem.config.js, ou no ambiente do utilizador que corre a aplicação. pm2 restart nome --update-env.
VPS com systemd Num ficheiro apontado por EnvironmentFile= na unidade do serviço. sudo systemctl restart nome.
Docker Compose Num .env ao lado do compose.yaml (com env_file:), ou em environment:. docker compose up -d recria o contentor.

Passo a passo, no cPanel

1 Escreva o código para ler a variável, não o valor. Em Node.js: process.env.DB_PASSWORD. Em Python: os.environ["DB_PASSWORD"] (ou os.environ.get("DB_PASSWORD") se pode faltar). Em PHP: getenv("DB_PASSWORD").
2 Abra «Setup Node.js App» ou «Setup Python App» e a sua aplicação.
3 Acrescente a variável: o nome (por convenção em maiúsculas, com sublinhados) e o valor. Guarde.
4 Reinicie a aplicação. Um processo só lê o ambiente quando arranca; uma variável nova ou alterada não chega a um processo que já estava a correr.
5 Confirme sem a mostrar. Faça a aplicação dizer apenas se a variável existe («definida» ou «em falta»), nunca o valor.

Numa unidade do systemd, no VPS, fica assim:[Service]
User=appuser
WorkingDirectory=/home/appuser/app
EnvironmentFile=/home/appuser/app/.env
ExecStart=/usr/bin/node app.js
Restart=on-failure
O ficheiro tem uma linha NOME=valor por variável, sem export. O caminho do node confirma-se com which node. Depois: sudo systemctl daemon-reload e sudo systemctl enable --now nome.

Um segredo no código já é um segredo perdido. Se uma palavra-passe foi parar a um repositório, mesmo que depois apague a linha, ela fica no histórico: mude-a. Ponha o .env no .gitignore, dê-lhe permissões só para o dono (chmod 600 .env), e não o guarde na pasta pública do site. Não escreva o valor nos registos, nem em mensagens de erro.
No navegador não há segredos. As variáveis que as ferramentas de interface incluem no JavaScript do navegador (as que levam prefixos como NEXT_PUBLIC_ ou VITE_) ficam visíveis a qualquer visitante. Ali ponha só o que pode ser público; as chaves a sério ficam no servidor.
Use valores diferentes em cada sítio (ensaio e produção) e uma chave por serviço, com as permissões mínimas. Se uma chave vazar, muda-se uma só. Para obter e guardar chaves de IA, veja chaves de API de modelos. A ligação à base de dados tem os seus próprios detalhes em ligar a partir de Python e Node.js.

Pôs a variável e a aplicação continua a não a ver? Diga-nos o domínio e o nome da variável (nunca o valor), e vemos o que o servidor passa à aplicação.

Abrir um pedido de suporte

VEJA TAMBÉM

Palavras-passe fora do código PHP: ficheiros .env e as permissões certas

Node.js no cPanel: escolher a versão e usar o npm

Python no cPanel: ambientes virtuais e pip

PRODUTO RECOMENDADO

Alojamento de sites com cPanel

Domínio e SSL incluídos, cópias diárias e o painel que já conhece. desde 5.940,00 Kz/mês (plano de 3 anos, com cupão)

Ver planos
  • 0 Utilizadores acharam útil
Esta resposta foi útil?