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ço | Imagem | O que faz |
|---|---|---|
db | Supabase Postgres | O banco de dados, no volume db-data |
auth | GoTrue | Cadastro e login com e-mail e senha |
rest | PostgREST | A 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 upde 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:
- Gere novas chaves de autenticação com
node tools/generate-selfhost-keys.mjs >> .env. O script imprimeSUPABASE_JWT_SECRET,SUPABASE_ANON_KEYeSUPABASE_SERVICE_ROLE_KEY. Os três valores precisam vir da mesma execução: as chaves são assinadas com o segredo. - Defina
POSTGRES_PASSWORDe umaDATABASE_URLcorrespondente, comopostgres://postgres:<new-password>@db:5432/postgres. - 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=falsedesativa o executor de migrações. Aplique as migrações você mesmo, como descrito abaixo.NODARO_ENCRYPTION_KEYprecisa ser definida, por exemplo comopenssl 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 comEncryptionKeyMissingError.
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 pushAs 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.coSUPABASE_PROXY_UPSTREAMé uma origem sem caminho.- Mantenha
SUPABASE_URLdefinida com a URL HTTPS do projeto. A API continua se conectando diretamente a ela. - O navegador resolve
/supabaseem 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 nodaroO 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
Páginas relacionadas
Instalação
Configuração
Backup e restauração
Atualização
Arquitetura
Última atualização
Chaves de provedor
Adicione as chaves de provedor do Nodaro self-hosted em /setup ou no .env, veja qual chave habilita quais nós e passe o tráfego pelo seu próprio proxy.
Conectar ao Nodaro Cloud
Conecte o Nodaro self-hosted a uma conta do Nodaro Cloud para rodar modelos padrão sem chaves próprias e usar os nós exclusivos, com cobrança em créditos.