Vercel: variáveis de ambiente sem .env no Git
MarkdownVariáveis de ambiente, Development/Preview/Production, uma nova implementação e verificação segura de chaves no Next.js sem enviar segredos para o browser.
Ler o artigo completo
Principal conclusão
Se o ficheiro .env que contém os seus segredos não estiver no Git, adicione as variáveis necessárias à secção Environment Variables do seu projeto Vercel. Selecione o ambiente, guarde as definições e crie uma nova implementação: as versões já implementadas não serão alteradas. No Next.js, não adicione o prefixo NEXT_PUBLIC_ a uma chave secreta: o respetivo valor será incluído no código do browser durante a compilação.
Este guia destina-se a um projeto já alojado no Vercel. Precisa de acesso às respetivas definições e de saber que variáveis a aplicação lê. O exemplo abaixo aplica-se ao Next.js; os nomes de variáveis de outra framework não podem ser transpostos automaticamente. O guia baseia-se na documentação oficial; não foi testado numa conta real.
Na documentação, encontra informações práticas sobre a utilização do Ailoot.
Porque não precisa de adicionar .env ao Git
Uma variável de ambiente é uma definição com um nome e um valor que uma aplicação recebe separadamente do seu código-fonte. Por exemplo, o nome SERVICE_API_KEY permite ao programa aceder ao valor da chave de um serviço externo. Não inclua a própria chave no guia, na sua conversa com um agente nem no repositório.
O Next.js pode carregar variáveis de ficheiros locais .env*. No entanto, um ficheiro local e as definições do projeto no Vercel são dois locais distintos. Se o ficheiro não for enviado para o repositório, defina os valores separadamente na plataforma de alojamento. O modelo padrão create-next-app adiciona ficheiros .env ao .gitignore; a documentação do Next.js avisa que quase nunca os deve enviar para o repositório.
Se ainda não tiver a certeza do que pode ser guardado nos ficheiros de código-fonte, comece pela verificação de segurança de um projeto criado com IA. Aqui, abordamos uma questão mais específica: onde definir a configuração de uma implementação concreta no Vercel.
Primeiro, determine onde a aplicação lê a variável
Antes de introduzir quaisquer valores, faça uma lista dos nomes, sem os próprios segredos. Para cada nome, tem de determinar três aspetos: que ambiente o utiliza, onde é executado o código que lê a variável e quando é necessário o valor.
| O que verificar | Opções possíveis | Porque é importante |
|---|---|---|
| Ambiente do Vercel | Development, Preview, Production | A definição tem de se aplicar à versão que está a verificar |
| Onde é lida | Servidor ou browser | Uma chave privada não pode ser incluída no código do lado do cliente |
| Quando é lida | Durante a compilação ou durante a execução da função de servidor | No Next.js, os valores públicos ficam fixos durante a compilação |
O ambiente Development destina-se ao desenvolvimento local. Preview destina-se a implementações de pré-visualização e Production à versão principal publicada. O Preview pode ter definições para uma ramificação específica do Git: estas substituem as definições gerais do Preview com os mesmos nomes.
Num projeto Next.js, as variáveis sem NEXT_PUBLIC_ estão disponíveis no servidor por predefinição. O prefixo NEXT_PUBLIC_ permite incorporar o valor no JavaScript enviado para o browser. É adequado para uma definição explicitamente pública, como um rótulo de versão não secreto, mas não para uma chave API privada. Mesmo sem este prefixo, o código da aplicação não pode devolver manualmente um segredo ao cliente.
Se ainda não identificou a framework, peça ao agente para a identificar a partir dos ficheiros do projeto. A comparação entre Astro e Next.js pode ajudar a compreender as diferenças; não pode aplicar a regra NEXT_PUBLIC_ a todas as aplicações React.
A configuração do alojamento é uma das tarefas envolvidas no trabalho numa aplicação com um agente de IA.
Como adicionar uma variável a um projeto Vercel
Siga pessoalmente os passos no painel oficial. Não dê uma chave real ao agente para a preencher no formulário e não anexe uma captura de ecrã que mostre o respetivo valor.
- Abra o painel do Vercel e selecione o projeto correto. Não confie apenas na correspondência do nome do repositório: confirme que está a configurar a aplicação que pretende abrir.
- Nas definições do projeto, aceda a Environment Variables na barra lateral.
- Em Name, introduza o nome que a aplicação lê, como
SERVICE_API_KEY. Este é um nome de exemplo; se o código esperar outro, utilize exatamente a grafia correspondente. - Em Value, introduza o valor do seu gestor de credenciais. Não o inclua no código-fonte, numa conversa nem num registo de verificação.
- Selecione o ambiente que necessita desta definição. Utilize Preview para verificar uma versão de pré-visualização e Production para a versão principal. Não atribua automaticamente o mesmo segredo a todos os ambientes.
- Se a definição Preview se aplicar a uma ramificação específica, confirme a ramificação selecionada e qualquer substituição com o mesmo nome.
- Clique em Save.
O Vercel disponibiliza as variáveis do projeto durante a compilação e quando as Vercel Functions do lado do servidor são executadas. No entanto, o facto de um valor estar disponível no Vercel não significa que possa ser enviado para o browser: isso depende do código da aplicação e das regras da framework.
Porque precisa de uma nova implementação depois de clicar em Save
Guardar uma variável não altera as implementações existentes. A documentação do Vercel exige que volte a implementar o projeto para que a nova definição chegue à versão que utiliza.
Ao trabalhar através do Git, pode criar uma nova implementação Production enviando um commit para a ramificação indicada em Production Branch, e uma implementação Preview enviando um commit para outra ramificação. Não presuma que a ramificação principal se chama sempre main: confirme a definição do seu projeto. Esta deve ser uma publicação normal e acordada do projeto, sem adicionar um ficheiro secreto ao commit.
Depois de iniciar a implementação, aguarde até a compilação terminar e abra o URL da nova implementação. Registe o URL, o ambiente e a ramificação. Se verificar o URL antigo de uma implementação individual, as novas definições não estarão disponíveis.
O Next.js tem outra condição: referências como process.env.NEXT_PUBLIC_RELEASE_LABEL são substituídas pelos respetivos valores durante next build. O valor fica fixo após a compilação. Alterar a definição sem uma nova compilação não atualizará o JavaScript do lado do cliente que já foi enviado.
Como verificar o resultado sem expor a chave
Comece com um exemplo seguro: um rótulo explicitamente não secreto, com o nome NEXT_PUBLIC_RELEASE_LABEL e o valor preview-check. São um nome e um texto de exemplo, não uma chave nem um teste aqui realizado. Se uma aplicação Next.js ler esta variável diretamente através de process.env.NEXT_PUBLIC_RELEASE_LABEL, pode apresentar o rótulo no local previsto da interface depois de uma nova compilação. Esta verificação apenas confirma que a definição pública foi transmitida.
Uma chave privada é verificada de outra forma. Não apresente o respetivo valor, uma parte dele, o seu comprimento ou todo o objeto process.env. Não crie um URL público que devolva o conteúdo da variável. Primeiro, verifique apenas se a definição está «presente / ausente» no servidor; em seguida, verifique separadamente a função da aplicação que utiliza o serviço. A presença de uma definição não prova que a chave seja válida ou tenha as permissões necessárias.
Pode registar os resultados sem segredos:
- o projeto, o ambiente e a ramificação correspondem aos selecionados durante a configuração;
- está a verificar o URL de uma nova implementação criada depois de guardar a variável;
- a compilação terminou e a função necessária da aplicação foi executada com dados de teste seguros;
- o segredo não é exposto no browser, nas respostas da API, nos registos ou nas conversas.
Se a função efetuar um pagamento, enviar uma mensagem ou executar outra ação com consequências, utilize o modo de teste indicado pelo serviço. Verificar a configuração não autoriza, por si só, uma operação real.
O que verificar se o valor continuar undefined
undefined significa que não foi obtido nenhum valor naquele ponto de acesso. Verifique o nome, o ambiente e a versão por esta ordem, sem alterar todas as definições ao mesmo tempo.
| Sintoma | O que verificar |
|---|---|
| Funciona localmente, mas não em Preview | Se o nome existe nas definições Preview do projeto; se está selecionada outra ramificação |
| Preview funciona, mas Production não | Se o nome está definido para Production; se foi criada uma nova versão principal depois de clicar em Save |
| Uma ramificação Preview comporta-se de forma diferente | Se existe um valor com o mesmo nome definido para essa ramificação e que substitui a definição geral |
| O servidor vê a variável, mas o browser não | No Next.js, é o comportamento esperado para uma variável não pública; não transfira uma chave privada para o browser |
| O rótulo público do Next.js continua com o valor antigo | Se foi feita uma nova compilação com o valor necessário; se o URL aberto pertence a essa implementação |
| O nome público está correto, mas a substituição não funciona | Se o código a lê dinamicamente com process.env[varName]: o Next.js não incorpora estas referências no código |
Depois de verificar o nome, o ambiente e a nova versão, um erro na função continua sem provar que a variável o causou. Investigue o erro específico do código do lado do servidor sem publicar dados de diagnóstico que contenham segredos. Este guia não promete resolver todas as respostas HTTP 500.
A mudança para o seu próprio servidor exige outro procedimento: consulte o guia de implementação de um projeto com Coolify. Os nomes dos botões e os passos de configuração do Vercel não se aplicam a esse caso.
Fontes
Mais detalhes
Perguntas frequentes
Porque continua a variável undefined depois de a guardar na Vercel?
Verifique projeto, ambiente e eventual âmbito por branch e crie uma implementação nova. As implementações existentes não recebem uma variável só porque guardou uma definição nova.
Posso acrescentar NEXT_PUBLIC_ para tornar um segredo visível à aplicação Next.js?
Não use esse prefixo num segredo: inclui o valor no código do navegador durante a compilação. Mantenha-o no servidor e verifique a presença sem apresentar a chave.