Proxy reverso e HTTPS
Sirva o Nodaro self-hosted no seu domínio por HTTPS, com nginx ou Caddy na frente da porta 3000, defina PUBLIC_URL e CORS_ORIGIN e reinicie o app.
Um proxy reverso coloca o seu Nodaro self-hosted em um domínio real, com HTTPS. O contêiner do Nodaro já roda um servidor web, o Caddy, na porta 3000, então você adiciona um proxy que faz a terminação TLS na frente dessa porta e informa ao Nodaro o endereço público dele. Tanto o nginx quanto o Caddy funcionam.
O que a porta 3000 serve
O servidor web dentro do contêiner coloca tudo em uma única origem:
| Caminho | O que responde |
|---|---|
/ | O editor e os apps, como arquivos estáticos |
/v1/* | A API, que escuta na porta 9000 dentro do contêiner |
/storage/* | A mídia no MinIO incluído |
/supabase/* | O login e a API de dados incluídos |
/config.js | As configurações de tempo de execução que o navegador lê antes de o app iniciar |
O seu proxy só precisa encaminhar todas as requisições para a porta 3000.
Opção A: nginx
Use esta opção quando você já roda o nginx ou outro proxy.
server {
listen 443 ssl http2;
server_name nodaro.example.com;
ssl_certificate /etc/letsencrypt/live/nodaro.example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/nodaro.example.com/privkey.pem;
client_max_body_size 100M;
proxy_buffering off; # important for SSE
location / {
proxy_pass http://127.0.0.1:3000;
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}client_max_body_size 100Mdeixa os uploads passarem.proxy_buffering offmantém os Server-Sent Events fluindo. O Nodaro transmite com eles a saída de texto e o progresso das execuções.
Opção B: Caddy no host
O Caddy obtém um certificado Let's Encrypt para você:
nodaro.example.com {
reverse_proxy 127.0.0.1:3000 {
flush_interval -1
}
}Abra as portas 80 e 443 e aponte os registros A ou AAAA do domínio para o host. flush_interval -1 mantém os Server-Sent Events fluindo.
Informar ao Nodaro o endereço público
Depois de qualquer uma das opções, defina estas variáveis no .env:
PUBLIC_URL=https://nodaro.example.com
CORS_ORIGIN=https://nodaro.example.com
# On the bundled MinIO, serve the media from the same domain:
R2_PUBLIC_URL=https://nodaro.example.com/storage/nodaro-assetsDepois, aplique-as:
docker compose -f docker-compose.community.yml up -dNão é preciso recompilar. Na inicialização, o contêiner grava a URL pública, o endereço de login do navegador e a chave anon em /config.js, e o navegador lê esse arquivo antes de o app iniciar.
PUBLIC_URL é o endereço da instalação em todos os lugares: nos callbacks de login e de OAuth, nas URLs de mídia e na verificação de CORS. http://localhost:3000 e PUBLIC_URL são sempre permitidos como origens do navegador.
Servir mais de um nome de host
- Origens extras. Liste-as em
CORS_ORIGIN, separadas por vírgula, por exemploCORS_ORIGIN=https://nodaro.example.com,http://192.168.1.20:3000. - Streams no nome de host do visitante. Quando a API compartilha a origem do app, como no contêiner padrão, defina
PUBLIC_URL_SAME_ORIGIN=true. O/config.jspassa, então, ao navegador o endereço de API/em vez dePUBLIC_URL, de modo que os streams ficam no nome de host que o visitante abriu. Só o valor exatotrueativa esse comportamento. Deixe a variável sem definir quando a API realmente fica em outro host.
O arquivo do Compose não repassa PUBLIC_URL_SAME_ORIGIN do .env. Adicione-a em environment: do serviço nodaro. Veja Configuração.
Mudar a porta
Para servir o app em outra porta do host, mude o lado do host do mapeamento no docker-compose.community.yml, por exemplo "3001:3000". Depois, defina PUBLIC_URL de acordo, como http://localhost:3001.
Como os endereços dos clientes são registrados
O servidor web do contêiner só aceita cabeçalhos X-Forwarded-* de proxies em endereços privados: 127.0.0.1/8, 10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16, fd00::/8 e ::1.
- Vindo de um proxy confiável, ele reduz o
X-Forwarded-Fora um único endereço de cliente: a entrada mais à direita que não seja, ela própria, um proxy confiável. Um endereço que um cliente escreveu no cabeçalho é ignorado. - Vindo de um proxy em um endereço público, ele substitui esses cabeçalhos pelos valores que ele mesmo observou.
Em uma intranet, a mesma regra ignora os endereços dos próprios usuários quando eles também são privados. Um cliente na LAN pode, então, escolher o endereço que a API registra, por exemplo para os limites de taxa.
Os editores incorporados no seu domínio
Editar no NodarCut, ou Editar em um resultado de vídeo de um app, abre o editor de vídeo hospedado em freecut.nodaro.ai, que só permite ser incorporado a partir de http://localhost:3000. Em qualquer outra origem, como um domínio ou um endereço da LAN, o navegador se recusa a incorporá-lo, e o painel explica o motivo. Abra uma issue no GitHub com a URL que você serve ou rode o seu próprio editor e defina FREECUT_URL. Veja Configuração.
O MCP precisa de um nome de host próprio
Os clientes MCP precisam alcançar a API na porta 9000 diretamente: o servidor web na porta 3000 recusa requisições MCP. Veja MCP.
Perguntas frequentes
Páginas relacionadas
Instalação
Configuração
MCP em uma instalação self-hosted
Solução de problemas
Última atualização
Instalação
Instale o Nodaro self-hosted passo a passo: clone o repositório, configure .env, segredos, migrações e armazenamento, inicie, faça login e proteja a stack.
Primeiro usuário e administrador
Crie o primeiro usuário de um Nodaro self-hosted e promova um administrador na Business edition com um comando SQL, com ou sem o painel do Supabase.