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:
banco = trueO 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_URLno 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:
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_URLda 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 Nmostra 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ópia | Quando é tirada | Quantas ficam |
|---|---|---|
diaria | Toda noite, às 3h, no horário de Brasília. | As 7 mais novas. |
deploy | Antes de cada versão publicada, antes da migração. | As 3 mais novas. |
desfazer | Antes 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áriodev. - O que ele grava
- A linha
DATABASE_URLno.envdo projeto. UmDATABASE_URLde outro banco que já estava lá fica comentado, para você não perder. - O que ele protege
- Põe
**/.envno .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 IDmostra 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.