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ável | Obrigatória | Padrão | Validação | Mensagem |
|---|---|---|---|---|
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.
Como cada uma é lida
Seção intitulada “Como cada uma é lida”PORT: número inteiro de 1 a 65535.PUBLIC_URL: a origem pública do site e do painel, comohttps://painel.exemplo.com. Não pode ter caminho, busca, fragmento nem credenciais.http://só vale paralocalhost. 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:1quando há um proxy na frente, como o Caddy da implantação de exemplo, e0quando não há. Com1, o painel conta os acessos pelo endereço que o proxy repassa emX-Forwarded-For. Com0, vale o endereço de quem conecta.HOST: endereço em que o servidor escuta. Vazio, vale127.0.0.1.DATABASE_URL: opcional. Na 1.1.0 só o esquemasqlite://é aceito. Sem a variável, o banco fica emstorage/db.sqlitedo projeto.RESEND_API_KEYeMAIL_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_FROMprecisa de um remetente válido, comoPainel <painel@exemplo.com>.
Avisos de produção
Seção intitulada “Avisos de produção”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=1e umHOSTque não é loopback, quem alcança a porta pode enviar o próprioX-Forwarded-For, e os limites por endereço deixam de valer. Com o Caddy na mesma máquina, deixe oHOSTem127.0.0.1. - Com
TRUST_PROXY=0eHOSTem loopback, todo acesso chega de127.0.0.1. Se houver um proxy na frente, useTRUST_PROXY=1.