Docs do Nodaro
DocumentaçãoReferência de nósModelosAgentes de IA (MCP)DesenvolvedoresSelf-hostingPesquisa

Banco de dados

Rode o Nodaro self-hosted com o Supabase incluído ou com um projeto gerenciado no Supabase, aplique as migrações e proteja as chaves e as senhas do banco.

O Nodaro guarda o banco de dados no Supabase: o Postgres para os dados, o GoTrue para o login e o PostgREST para a API de dados que o editor lê e grava. A stack do Compose inclui os três e aplica as migrações do banco de dados para você. Em vez disso, você pode apontar o Nodaro para um projeto gerenciado no Supabase e aplicar as migrações você mesmo.

A stack incluída

ServiçoImagemO que faz
dbSupabase PostgresO banco de dados, no volume db-data
authGoTrueCadastro e login com e-mail e senha
restPostgRESTA API de dados

O navegador e a API acessam o login e a API de dados pela própria origem do app, em PUBLIC_URL/supabase. O servidor web do contêiner do Nodaro encaminha /supabase/auth/v1 para o GoTrue e /supabase/rest/v1 para o PostgREST, então não é preciso nenhuma porta nem domínio extra.

A stack incluída não envia e-mails: as contas funcionam logo depois do cadastro.

Migrações na stack incluída

O contêiner do app aplica todos os arquivos de supabase/migrations/ antes de a API iniciar. Ele precisa de RUN_MIGRATIONS_ON_BOOT=true e de DATABASE_URL, que o arquivo do Compose define para você.

  • Os arquivos aplicados ficam registrados e são pulados na inicialização seguinte.
  • Um banco de dados migrado pela metade nunca roda. Quando uma migração falha, a API se recusa a iniciar, e o log do contêiner indica o arquivo.
  • Corrija e inicie de novo. Depois de corrigir a causa, rode docker compose -f docker-compose.community.yml up de novo. Os arquivos já aplicados são pulados.

Proteger o banco de dados incluído

As chaves e as senhas padrão são públicas. Antes de expor a stack a uma rede:

  1. Gere novas chaves de autenticação com node tools/generate-selfhost-keys.mjs >> .env. O script imprime SUPABASE_JWT_SECRET, SUPABASE_ANON_KEY e SUPABASE_SERVICE_ROLE_KEY. Os três valores precisam vir da mesma execução: as chaves são assinadas com o segredo.
  2. Defina POSTGRES_PASSWORD e uma DATABASE_URL correspondente, como postgres://postgres:<new-password>@db:5432/postgres.
  3. Aplique-as com docker compose -f docker-compose.community.yml up -d.

O banco de dados só alinha as senhas das roles internas, como supabase_auth_admin e authenticator, com POSTGRES_PASSWORD na primeira inicialização dele. Se o volume db-data já existir, apague o volume, o que apaga os seus dados, ou altere as senhas das roles manualmente como supabase_admin. Caso contrário, o login falha com password authentication failed for user "supabase_auth_admin".

Usar um projeto gerenciado no Supabase

Um projeto no supabase.com substitui os serviços db, auth e rest incluídos. O plano gratuito é suficiente. Defina estas variáveis no .env:

SUPABASE_URL=https://YOUR-PROJECT.supabase.co
SUPABASE_ANON_KEY=eyJ...
SUPABASE_SERVICE_ROLE_KEY=eyJ...
FRONTEND_SUPABASE_URL=https://YOUR-PROJECT.supabase.co
RUN_MIGRATIONS_ON_BOOT=false
NODARO_ENCRYPTION_KEY=<64-character hex>
  • FRONTEND_SUPABASE_URL é a cópia da URL do projeto que o navegador usa. A imagem publicada é compilada para a stack incluída e só fica sabendo de outra URL por esta variável, na inicialização.
  • RUN_MIGRATIONS_ON_BOOT=false desativa o executor de migrações. Aplique as migrações você mesmo, como descrito abaixo.
  • NODARO_ENCRYPTION_KEY precisa ser definida, por exemplo com openssl rand -hex 32. A stack só gera a chave para você enquanto o executor de migrações está ativado. Sem ela, colar chaves de provedor e conectar ao Nodaro Cloud falham com EncryptionKeyMissingError.

Se a instalação já rodou na stack incluída, reutilize a chave dela. Ela fica no volume app-data, em /data/nodaro/encryption-key. Uma chave nova não consegue ler o que a antiga criptografou.

Aplicar as migrações em um projeto gerenciado

Aplique todos os arquivos de supabase/migrations/ na ordem dos nomes dos arquivos. Os prefixos completados com zeros, como 001_ e 002_, definem a ordem.

  • Com o SQL editor. No painel do Supabase, abra o SQL editor e execute os arquivos, um de cada vez.
  • Com a CLI do Supabase. É mais rápido:
supabase link --project-ref YOUR-REF
supabase db push

As migrações podem rodar de novo em um banco de dados já migrado, exceto quando um arquivo diz o contrário, por exemplo no caso de dados iniciais (seed). Rodá-las em um banco de dados novo nunca é um problema.

A cada atualização, aplique os novos arquivos na ordem dos nomes antes de reiniciar com a nova imagem. Uma migração que falta normalmente não impede a API de rodar, mas os recursos que dependem dela respondem 500 até as tabelas deles existirem.

Servir um projeto gerenciado pela sua própria origem

Algumas redes filtram todas as requisições do navegador pelo nome de host e bloqueiam o domínio do Supabase. Para elas, o servidor web do contêiner do Nodaro pode encaminhar um projeto gerenciado pela própria origem do app. Defina as três variáveis juntas:

SUPABASE_MANAGED_PROXY=true
FRONTEND_SUPABASE_URL=/supabase
SUPABASE_PROXY_UPSTREAM=https://YOUR-PROJECT.supabase.co
  • SUPABASE_PROXY_UPSTREAM é uma origem sem caminho.
  • Mantenha SUPABASE_URL definida com a URL HTTPS do projeto. A API continua se conectando diretamente a ela.
  • O navegador resolve /supabase em relação à origem da página. O servidor web encaminha ao projeto as requisições de login, REST, armazenamento e realtime, inclusive os upgrades para WebSocket.
  • Os tokens e as chaves de API passam sem alterações. O proxy não acrescenta nenhuma credencial privilegiada.
  • Vários domínios podem usar a mesma configuração, sem outro domínio personalizado no Supabase.

O arquivo do Compose não repassa SUPABASE_MANAGED_PROXY nem SUPABASE_PROXY_UPSTREAM do .env: adicione-as em environment: do serviço nodaro. Sem elas, o proxy fica desativado, e as rotas incluídas se comportam como antes.

Quando o banco de dados fica indisponível

Se o Postgres cair, para uma migração ou uma recuperação, a API reinicia em loop até o banco de dados voltar a ficar acessível. Isso é esperado. Quando o Postgres voltar, reinicie o contêiner do Nodaro:

docker compose -f docker-compose.community.yml restart nodaro

O que o banco de dados guarda

Workflows e projetos, perfis de usuário, execuções e o progresso delas, jobs, os registros da mídia gerada, tokens de API e apps OAuth, e as chaves de provedor e os tokens de login das redes sociais, criptografados. Todas as tabelas aplicam segurança em nível de linha (row-level security), então os usuários só veem as próprias linhas. Os arquivos de mídia em si ficam no armazenamento de objetos, e o Redis só guarda o estado de curta duração dos jobs.

Faça backup do banco de dados junto com a chave de criptografia: veja Backup e restauração. Para rodar duas instalações em um único banco de dados, veja Escalonamento.

Perguntas frequentes

Última atualização

Nesta página