Pular para o conteúdo

Variáveis de produção

Um projeto blog sobe em produção com bun run start, que define NODE_ENV=production. Antes de abrir a porta, o servidor lê as variáveis desta página. Se alguma estiver faltando ou com valor inválido, ele não sobe: a mensagem lista todos os problemas de uma vez, em português, e não mostra o valor de nenhuma variável.

Fora do modo de produção, o servidor lê só PORT e PANEL_SECRET, e o PANEL_SECRET é opcional: sem ele, o painel gera um segredo a cada processo.

VariávelObrigatóriaPadrãoValidaçãoMensagem
PORT Sim — use um inteiro de 1 a 65535. PORT: defina a porta do painel (um número de 1 a 65535).
PUBLIC_URL Sim — defina o endereço público, como https://painel.exemplo.com (sem caminho nem credenciais; http só para localhost). PUBLIC_URL: defina o endereço público, como https://painel.exemplo.com (sem caminho nem credenciais; http só para localhost).
PANEL_SECRET Sim — use pelo menos 32 caracteres (gere com: openssl rand -hex 32). PANEL_SECRET: use pelo menos 32 caracteres (gere com: openssl rand -hex 32).
TRUST_PROXY Sim — use 1 (atrás do Caddy, o proxy da VPS) ou 0 (sem proxy na frente). TRUST_PROXY: use 1 (atrás do Caddy, o proxy da VPS) ou 0 (sem proxy na frente).
HOST Não 127.0.0.1 use um endereço IP ou nome de máquina (padrão 127.0.0.1). HOST: use um endereço IP ou nome de máquina (padrão 127.0.0.1).
DATABASE_URL Não sqlite://<projeto>/storage/db.sqlite — —
RESEND_API_KEY Sim — — RESEND_API_KEY: defina a chave do Resend (em produção o e-mail nunca vai ao console).
MAIL_FROM Sim — defina o remetente, como Painel <painel@exemplo.com>. MAIL_FROM: defina o remetente, como Painel <painel@exemplo.com>.

Avisos de produção

  • TRUST_PROXY=1 com HOST=0.0.0.0: o servidor aceita conexões de fora do proxy, e quem as faz escolhe o próprio X-Forwarded-For (os limites por endereço deixam de valer). Com o Caddy na mesma máquina, deixe o HOST em 127.0.0.1; senão use TRUST_PROXY=0 ou feche a porta para o resto da rede.
  • TRUST_PROXY=0: o servidor escuta só em 127.0.0.1, então todo acesso chega de 127.0.0.1. Se houver um proxy (Caddy) na frente, use TRUST_PROXY=1; sem proxy, ignore este aviso.
  • PORT: número inteiro de 1 a 65535.
  • PUBLIC_URL: a origem pública do site e do painel, como https://painel.exemplo.com. Não pode ter caminho, busca, fragmento nem credenciais. http:// só vale para localhost. Os links dos e-mails usam esse endereço.
  • PANEL_SECRET: segredo dos tokens CSRF do painel, com pelo menos 32 caracteres. Um gerador comum é openssl rand -hex 32.
  • TRUST_PROXY: 1 quando há um proxy na frente, como o Caddy da implantação de exemplo, e 0 quando não há. Com 1, o painel conta os acessos pelo endereço que o proxy repassa em X-Forwarded-For. Com 0, vale o endereço de quem conecta.
  • HOST: endereço em que o servidor escuta. Vazio, vale 127.0.0.1.
  • DATABASE_URL: opcional. Na 1.1.0 só o esquema sqlite:// é aceito. Sem a variável, o banco fica em storage/db.sqlite do projeto.
  • RESEND_API_KEY e MAIL_FROM: as duas são obrigatórias em produção. Sem a chave, o e-mail iria para o console, e isso só existe em desenvolvimento. MAIL_FROM precisa de um remetente válido, como Painel <painel@exemplo.com>.

Estes avisos não impedem o servidor de subir. Eles saem no terminal com o prefixo [aviso], depois que a configuração passa na checagem:

  • Com TRUST_PROXY=1 e um HOST que não é loopback, quem alcança a porta pode enviar o próprio X-Forwarded-For, e os limites por endereço deixam de valer. Com o Caddy na mesma máquina, deixe o HOST em 127.0.0.1.
  • Com TRUST_PROXY=0 e HOST em loopback, todo acesso chega de 127.0.0.1. Se houver um proxy na frente, use TRUST_PROXY=1.