Pular para o texto
Entrar Testar grátis

Banco de dados do app

Com uma linha no nimu.toml, o app de produção ganha um banco Postgres 17. A Nimu cria o banco, a senha e a variável DATABASE_URL, tira cópias e deixa você restaurar. Para desenvolver na Sandbox, nimu banco dev sobe um Postgres local.

Atualizado em 9 de outubro de 2026

Dar um banco ao app

O jeito mais simples é pelo nimu.toml do projeto:

nimu.toml
banco = true

O primeiro nimu deploy com essa linha cria o banco antes de ativar a versão. Num projeto novo, nimu iniciar --banco já escreve a linha.

Também dá para criar sem publicar uma versão:

$ nimu banco criar w4n8t3hd
Pedido na fila: a Nimu cria o Postgres de w4n8t3hd em alguns minutos. O DATABASE_URL vira um segredo gerenciado do app, definido pela Nimu, e só chega ao contêiner do app na próxima versão (nimu deploy) ou no próximo despertar da máquina; para o deploy criar o banco sozinho, banco = true no nimu.toml. Acompanhe com: nimu banco w4n8t3hd

Cada app tem o próprio banco e o próprio usuário no Postgres da máquina de produção. O primeiro banco da conta pode criar a máquina de produção.

No painel, na vista Produção, cada app tem a área Banco de dados, com o botão Criar banco.

O DATABASE_URL

O app lê o endereço do banco na variável de ambiente DATABASE_URL. Na produção, quem define o valor é a Nimu.

  • Você não escreve o DATABASE_URL no código, no Dockerfile nem num arquivo.
  • Enquanto o app tem banco, esse nome é reservado: definir ou remover o segredo DATABASE_URL é recusado.
  • O banco não aceita conexão de fora da máquina de produção. Só o app chega nele: não dá para ligar um cliente SQL do seu computador nem da Sandbox.

A migração

O comando que prepara as tabelas vai no nimu.toml, como uma lista de argumentos:

nimu.toml
banco = true
migrar = ["npx", "prisma", "migrate", "deploy"]
Quando roda
Antes de cada versão subir, depois de uma cópia do banco.
Onde roda
Num contêiner avulso da imagem nova, com o DATABASE_URL da produção. Ele tem até 10 minutos.
Se falhar
A versão nova não sobe e a antiga segue no ar. nimu versoes ID --versao N mostra a saída da migração.
O formato
Até 16 itens, cada um com até 512 bytes. O primeiro item é o programa.

Voltar a uma versão anterior não desfaz a migração. Para o banco de antes, restaure a cópia tirada antes daquele deploy.

Ver o banco e as cópias

$ nimu banco w4n8t3hd
Banco de w4n8t3hd: pronto (app_w4n8t3hd), 12,3 MB, criado 2026-10-07 13:00.
  conta: 12,3 MB de 1,0 GB nos bancos (passando disso, o deploy é recusado até sobrar espaço)
  Postgres da máquina de produção: ligado
  cópias na máquina de produção (restaurar: nimu banco restaurar w4n8t3hd ID):
    20261008-1502-deploy         deploy    2026-10-08 18:02  1,1 MB
    20261008-0300-diaria         diaria    2026-10-08 06:00  1,0 MB
  fora de casa: 2 cópias cifradas (ficam 15 dias); a última, 20261008-0300-diaria, enviada 2026-10-08 07:00

Sem o id, o comando vale para o app do nimu.toml da pasta em que você está. A situação do banco é uma destas: sem banco, criando, pronto, restaurando, apagando ou com erro.

O Postgres dorme enquanto os apps que usam banco dormem, e acorda com eles.

As cópias

A Nimu tira cópias do banco sozinha e guarda na máquina de produção.

CópiaQuando é tiradaQuantas ficam
diariaToda noite, às 3h, no horário de Brasília.As 7 mais novas.
deployAntes de cada versão publicada, antes da migração.As 3 mais novas.
desfazerAntes de restaurar uma cópia.A última.

O id de cada cópia tem a data, a hora de Brasília e o tipo, como 20261008-0300-diaria.

Toda noite, uma cópia cifrada também vai para fora da máquina de produção. Essas cópias ficam 15 dias.

Restaurar uma cópia

$ nimu banco restaurar w4n8t3hd 20261008-0300-diaria --sim
Pedido enviado: confirme no painel em https://nimucloud.com/painel/#/confirmar/1. Até lá, o banco fica como está. Ao restaurar, a produção para o app, guarda uma cópia (desfazer) do banco de agora, carrega a cópia escolhida e sobe o app de novo; o pedido vale por 24 h.

Pela CLI e pelos agentes, restaurar não acontece na hora: vira um pedido que só você confirma no painel, em Seu agente pediu.

No painel, na vista Produção, o botão Restaurar esta cópia fica ao lado de cada cópia. Ele pergunta antes e restaura em seguida.

O que mudou no banco depois da cópia se perde. O app para por alguns segundos. Antes de restaurar, a Nimu guarda a cópia desfazer, com o banco de agora.

Apagar o banco

$ nimu banco apagar w4n8t3hd --sim
Pedido enviado: confirme no painel em https://nimucloud.com/painel/#/confirmar/2. Até lá, o banco fica como está. Ao apagar, saem o banco, as cópias da máquina e o DATABASE_URL do app; as cópias fora de casa somem em até 15 dias. O pedido vale por 24 h.

Apagar também espera a sua confirmação. Saem o banco, as cópias da máquina e o DATABASE_URL. O app continua no ar, sem o banco. Isso não tem volta.

Remover o app da produção apaga o banco dele junto.

Desenvolver: nimu banco dev

Para programar na Sandbox com um banco igual ao da produção, rode na pasta do projeto:

$ nimu banco dev
Conferindo o Docker e o contêiner nimu-banco-dev.
Baixando a imagem postgres:17 (uma vez; até 10 min).
Subindo o Postgres local e esperando ele responder.
Gravando o DATABASE_URL no .env e pondo o .env no .gitignore e no .dockerignore.
Postgres local pronto: postgres:17 no contêiner nimu-banco-dev (volume nimu-banco-dev), só em 127.0.0.1:5432, banco e usuário dev. O DATABASE_URL está no .env.
  .env                     criado
  .gitignore               trocado
  .dockerignore            trocado
DATABASE_URL=postgres://dev:[email protected]:5432/dev?sslmode=disable
A senha é só deste Postgres local (127.0.0.1) e fica no .env, fora do git e da imagem; a da produção é outra, definida pela Nimu.
Parar: docker stop nimu-banco-dev. Apagar os dados: docker rm -f nimu-banco-dev && docker volume rm nimu-banco-dev.

No lugar de SENHA aparece a senha sorteada. Entre a segunda e a terceira linha, o Docker mostra o andamento do download.

O que ele sobe
Um Postgres 17 num contêiner da própria Sandbox, que escuta só em 127.0.0.1:5432, com o banco e o usuário dev.
O que ele grava
A linha DATABASE_URL no .env do projeto. Um DATABASE_URL de outro banco que já estava lá fica comentado, para você não perder.
O que ele protege
Põe **/.env no .gitignore e no .dockerignore: a senha não vai para o git nem para a imagem.
Rodar de novo
Reaproveita o contêiner, os dados e a senha.

A senha local é independente da senha de produção. Pelo agente, a ferramenta nimu_banco_dev não devolve o endereço: ele lê do .env quando precisa.

Limites

Tamanho
No teste, os bancos da conta somam até 1 GB. nimu banco ID mostra quanto a conta já usa.
Passou de 1 GB
O deploy é recusado até sobrar espaço, e o app segue no ar com a versão de agora. Apague dados, ou um banco que não usa mais.
Passou de 2 GB
Os bancos da conta ficam só de leitura. Eles voltam a aceitar escrita quando a soma cai para 1 GB: apague dados ou restaure uma cópia menor.

No site: Postgres gerenciado. Nesta documentação: Produção e Segredos.