Edições e perfis de superfície
Compare as edições Community, Business e Cloud, mude um Nodaro self-hosted para a Business e restrinja a interface dele com um NODARO_SURFACE_PROFILE.
O Nodaro tem três edições — Community, Business e Cloud —, feitas a partir do mesmo código e escolhidas com a variável EDITION. Na Business edition, um perfil de superfície restringe, então, o que a instalação mostra, sem recompilar. Ele pode ocultar partes da interface, remover nós e modelos, renomear o produto e restringir o login. Esta página trata dos dois.
As três edições
| Community | Business | Cloud | |
|---|---|---|---|
| Pode ser self-hosted | Sim | Sim | Não, gerenciada pelo Nodaro |
| Painel de administração | Não | Sim | Sim |
| Gerenciamento de usuários | Não | Sim | Sim |
| Registro de créditos | Não | Não | Sim |
| Cobrança | Não | Não | Sim |
| Preços de crédito definidos por administradores | Não | Não | Sim |
| Perfil de superfície | Ignorado | Sim | Sim |
- Community (
EDITION=community, o padrão) é a edição self-hosted gratuita. Qualquer pessoa que cria uma conta se torna um usuário comum. - Business (
EDITION=business) acrescenta o painel de administração e o gerenciamento de usuários. Ela continua self-hosted e continua sem cobrança. - Cloud (
EDITION=cloud) acrescenta créditos e cobrança. Ela é a base do app.nodaro.ai e não é feita para self-hosting.
O painel de administração e o gerenciamento de usuários da Business edition são recursos Enterprise. Você pode rodá-los para desenvolvimento e testes, mas usá-los em produção exige uma assinatura do Nodaro Enterprise. Veja Licença.
Mudar uma instalação self-hosted para a Business
A API lê EDITION na inicialização. O editor no navegador lê a edição dele de VITE_EDITION quando a imagem é compilada. A imagem publicada é compilada como Community Edition, então uma instalação Business é compilada a partir do código-fonte.
Passar da Community para a Business não tem custo no banco de dados: o esquema é o mesmo.
Mudar os dois valores no arquivo do Compose
No docker-compose.community.yml, no serviço nodaro, mude as duas linhas que dizem community:
nodaro:
build:
args:
VITE_EDITION: business # was: community
environment:
EDITION: business # was: communityAs duas linhas são fixas no arquivo do Compose, então definir EDITION no .env não tem efeito.
Compilar e iniciar
docker compose -f docker-compose.community.yml build --no-cache nodaro
docker compose -f docker-compose.community.yml up -dAtualize uma instalação compilada a partir do código-fonte com git pull e build. O docker compose pull baixaria de novo a imagem Community publicada.
A build recusa um VITE_EDITION vazio ou desconhecido. Sem essa verificação, um valor não definido compilaria sem erros e voltaria a community, e uma imagem Business sairia sem o painel de administração. O arquivo do Compose passa o valor para você. Um docker build escrito à mão precisa de --build-arg VITE_EDITION=community, business ou cloud.
O que é fixado na build e o que não é
Três configurações do navegador não são fixadas na build: o endereço da API, o endereço de login do navegador e a chave anon. Na inicialização, o contêiner as grava em /config.js a partir de PUBLIC_URL, FRONTEND_SUPABASE_URL e SUPABASE_ANON_KEY, e o navegador lê esse arquivo antes de o app iniciar. Assim, a imagem publicada serve qualquer porta ou domínio depois de uma reinicialização. Os argumentos de build VITE_* são só alternativas para valores de tempo de execução não definidos.
Outras configurações do navegador fixadas na build:
| Argumento de build | O que faz | Padrão |
|---|---|---|
VITE_STUDIO_URL | O endereço do app Studio, para os links Abrir no Studio | https://studio.nodaro.ai |
VITE_PERSON_URL | O endereço do app Person, para o cartão Abrir Person da tela inicial | https://person.nodaro.ai |
Perfis de superfície
NODARO_SURFACE_PROFILE restringe a interface de uma instalação Business ou Cloud sem recompilar. A Community Edition ignora essa variável e sempre mostra a interface completa.
- Formato. JSON inline, ou
@/path/to/profile.jsonpara ler um arquivo. Para usar um arquivo na stack do Compose, monte-o no contêiner e informe o caminho dele dentro do contêiner. - Só restringe. Um perfil pode ocultar e remover. Ele nunca ativa algo que a edição desativa.
- Todos os campos são opcionais. Uma lista vazia significa “manter o padrão”. Sem a variável, a instalação mostra a interface completa.
- Erros. Um campo malformado volta ao padrão desse campo, com um aviso no log. Um perfil que não carrega de jeito nenhum impede a inicialização de uma instalação Business ou Cloud, com
[surface-profile] FATAL … Refusing to boot a narrowing deployment mainline-open. Isso acontece com um arquivo ilegível, um JSON inválido ou um valor que falha na validação como um todo. Uma instalação com restrições nunca deve subir mostrando tudo. - Aplicar. Reinicie o app. O perfil chega ao navegador pelo
/config.js.
Exemplo
NODARO_SURFACE_PROFILE={"nav":{"hide":["gallery"]},"brand":{"productName":"Studio"},"outputs":{"allowPublic":false},"voice":{"allowedGenders":["male"]}}Isso oculta a galeria, renomeia o produto para Studio, mantém todas as saídas privadas e oferece só vozes masculinas.
Campos
| Campo | O que faz |
|---|---|
nav.hide | Oculta itens da barra lateral. Valores: gallery, explore, pricing, templates, apps, community, integrations. |
dashboard.tabs | Uma única lista de permissões ordenada das seções da tela inicial. Veja Seções da tela inicial. |
nodes.deny, models.deny | Tipos de nó e IDs de modelo a remover em todos os lugares: no menu Adicionar nó, em GET /v1/nodes, em GET /v1/models, nas ferramentas MCP e na hora da execução. Um nó removido falha com node_not_available. |
nodes.allow, models.allow | Listas de permissões. Quando uma lista não está vazia, só os tipos de nó ou os IDs de modelo listados são oferecidos, e deny ainda retira itens deles. Veja Listas de permissões. |
auth.methods, auth.ssoLabel | Os métodos de login a oferecer: email, google, sso. sso é descartado, a menos que auth.ssoLabel esteja definido. Veja Métodos de login. |
siblings.apps | Substitui os links do Nodaro no seletor de produtos: [{ "label": "...", "url": "..." }]. |
brand.productName | Substitui o logotipo tipográfico e o título da página. Sem ele, o título da página fica como veio. |
brand.wordmark | Texto curto mostrado ao lado do seu próprio logo no cabeçalho da barra lateral, para uma instalação que tem os próprios arquivos de logo. Por exemplo, o nome de produto Acme Studio com o logotipo tipográfico Studio. |
brand.description | Substitui a meta description da página. |
brand.platformLinks | false oculta os links da própria plataforma para avisos legais, documentação, notas de versão e promoção de produtos. Os links que você define em siblings.apps continuam. |
locale.default | O idioma em que um novo visitante começa. |
locale.picker | false oculta o seletor de idioma. O padrão é true. |
outputs.allowPublic | false torna todas as saídas privadas, seja qual for a escolha do usuário. |
voice.allowedGenders | Restringe as vozes a qualquer subconjunto de male, female e neutral. Vazio significa todos os gêneros. Veja Gêneros de voz. |
features.hide | Desativa recursos inteiros: copilot remove o Workflow Copilot, e presentation oculta a aba Apresentar do canvas. |
catalogs | { "required": true, "factoryPresets": false } para instalações que precisam de conteúdo revisado nos seletores. Veja Catálogos de seletores. |
Os logos e o favicon não fazem parte do perfil. Substitua-os por uma camada de arquivos estáticos na sua imagem Docker.
Seções da tela inicial
dashboard.tabs é uma única lista de permissões ordenada. O conjunto completo de chaves é workflows, projects, apps, miniapps, templates, tutorials, statistics, gallery, studio e mcp.
workflows,projects,studio— as listas do filtro de espaço de trabalho da aba Continuar, na ordem da sua lista. Se a sua lista não citar nenhuma das três, as três aparecem, para que a lista principal nunca fique vazia.apps— a faixa de apps do Nodaro na aba Continuar.templates— a linha “Comece com um template” da aba Explorar e o item Templates da barra lateral.tutorials— os tutoriais da seção Suba de nível na aba Explorar e o item Tutoriais da barra lateral. Semtemplatesetutorials, a aba Explorar não aparece.miniapps— o item Miniapps da barra lateral.statistics— o resumo de estatísticas da página Execuções.mcp— a quarta lista de “Continue de onde parou”: os workflows que um cliente MCP criou no projeto automáticomcpdele.
Liste todas as seções que você quer manter. Por exemplo, ["workflows","projects","statistics","tutorials"] mantém as listas de workflows e de projetos, os tutoriais e as estatísticas. Essa lista remove a lista do Studio, a faixa de apps, a linha de templates e os itens Templates e Miniapps da barra lateral. nav.hide continua valendo por cima disso.
Listas de permissões
Uma lista de permissões é o formato mais seguro para uma instalação com curadoria. Um nó ou um modelo novo fica, então, indisponível até você listá-lo, em vez de aparecer porque você não o bloqueou.
- Os nós utilitários, como
sticky-noteepreview, nunca são removidos por ficarem de fora de uma lista de permissões. Só umdenyexplícito os remove. - Os administradores podem alterar a disponibilidade de nós e modelos em tempo de execução, no painel de administração. Uma configuração de tempo de execução salva substitui as listas do perfil até ser redefinida para o estado de fábrica.
- Um nó que um administrador desativa no painel de administração continua utilizável pelos administradores. Um nó removido pelo perfil também é removido para os administradores. Mas um administrador que reativa no painel de administração um nó removido pelo perfil o libera para todos, então dê a função de administrador só a pessoas em quem você confia para isso.
- Um modelo desativado também fica desativado para os administradores.
- Uma execução é verificada como o usuário em nome de quem ela roda. Uma execução de app ou de apresentação roda como a pessoa que a executa. Uma execução agendada ou disparada por webhook roda como o proprietário do workflow, e um token de API ou um app conectado age como o proprietário dele. Quando esse proprietário é um administrador, a execução pode usar um nó oculto para os usuários, então trate com cuidado a URL de webhook de um workflow assim.
- Um app, um componente ou um template que contém um nó oculto não pode ser publicado: a requisição falha com
node_not_available. - Uma mudança de função chega a essas verificações em cerca de 5 minutos.
Métodos de login
auth.methods restringe os métodos de login da página de login, entre email, google e sso. Mantenha sso na lista só junto com auth.ssoLabel, o texto do botão de SSO.
Uma lista que cita só sso também ativa uma regra no servidor: toda conta logada precisa ter sido criada ou vinculada por login único (SSO). Qualquer outra sessão é recusada na primeira chamada à API com 403 sso_required, então uma conta registrada diretamente no serviço de login não pode usar a instalação. Adicionar email à lista desativa a regra. Veja Login único (SSO).
Gêneros de voz
voice.allowedGenders é aplicado no servidor:
- A lista de vozes e a biblioteca compartilhada de vozes mostram só vozes dos gêneros permitidos.
- Uma requisição com uma voz nativa de outro gênero é recusada com
voice_not_available. - Toda voz padrão e toda voz alternativa passam a ser a primeira voz de um gênero permitido.
- O editor oculta as tags de gênero vocal dos outros gêneros nos nós do Suno.
O gênero da saída dos nós de criação de voz não pode ser conhecido com antecedência. Para removê-los, adicione "nodes":{"deny":["voice-design","voice-remix"]}.
Catálogos de seletores
Para instalações que só podem oferecer conteúdo revisado nos seletores, defina "catalogs":{"required":true,"factoryPresets":false}.
- Com
required: true, o editor só oferece opções nos seletores depois de receber do servidor o catálogo completo com curadoria, e não oferece nenhuma se essa requisição falhar. Os nós novos e as redefinições de fábrica usam só valores oferecidos. - Com
factoryPresets: false, as predefinições incluídas ficam ocultas no editor e na API. As predefinições dos próprios usuários continuam. - O servidor também rejeita opções excluídas do catálogo em workflows importados ou salvos anteriormente.
Perguntas frequentes
Páginas relacionadas
Primeiro usuário e administrador
Configuração
Login único (SSO)
Licença
Edições
Última atualização
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.
Configuração
Todas as variáveis de ambiente de um Nodaro self-hosted, por finalidade, com o padrão, se o .env pode defini-las na stack do Compose e o que elas mudam.