Provisionamento de Banco de Dados

O sh0 executa PostgreSQL, MySQL, MariaDB, MongoDB e Redis em contêineres gerenciados, chamados servidores de banco de dados: um motor por contêiner, um volume persistente, credenciais geradas e um nome de host interno estável.

Bancos de Dados Suportados

Cinco motores estão disponíveis. O painel oferece as versões abaixo e pré-seleciona a padrão; o sh0 baixa a imagem oficial da versão escolhida.

MotorVersões oferecidasPadrãoImagem DockerPorta
PostgreSQL17, 16, 15, 1416postgres:<version>-alpine5432
MySQL8.4, 8.08.4mysql:<version>3306
MariaDB11.4, 11.2, 10.1111.4mariadb:<version>3306
MongoDB8.0, 7.0, 6.07.0mongo:<version>27017
Redis7.4, 7.27.4redis:<version>-alpine6379
Note
A API e a CLI (--version) repassam a versão ao Docker como tag de imagem, sem compará-la com esta lista. Uma versão fora da lista não é testada pelo sh0; se a tag não existir, a criação falha ao baixar a imagem.
Note
Criar um servidor de banco de dados, e alterar seus limites de recursos, exige uma licença Pro ou superior. Sem ela, o painel mostra um convite para atualizar o plano e a API recusa a requisição.

Criando um Banco de Dados

Um servidor de banco de dados é criado pelo painel, pela CLI ou pela API. Somente os papéis owner e admin podem criá-lo.

  1. Na barra lateral, abra Serviços e depois Servidores de bancos de dados.
  2. Clique em Criar servidor e escolha o motor.
  3. Informe o Nome do servidor: de 3 a 63 caracteres, letras minúsculas, dígitos e hífens, sem hífen no início nem no fim.
  4. Escolha a Versão e confirme com Criar servidor.

O sh0 baixa a imagem se necessário, inicia o contêiner e espera até 60 segundos para que o motor aceite conexões antes de abrir a página do servidor. Ele também gera:

  • Credenciais de administrador: usuário postgres (PostgreSQL), root (MySQL, MariaDB), admin (MongoDB) ou default (Redis), com uma senha aleatória de 32 caracteres, armazenada criptografada com a chave mestra da instância.
  • Um nome de host interno, <nome>.internal, na rede sh0-net à qual toda aplicação se conecta.
  • Um volume de dados chamado sh0-dbsrv-<nome>-data, montado no diretório de dados do motor. O contêiner se chama sh0-dbsrv-<nome>.

O mesmo pela CLI (sh0 db é um alias de sh0 database-servers). Os valores de motor são postgres, mysql, mariadb, mongodb e redis:

Terminal
$ sh0 db create --name my-db --engine postgres
Database server 'my-db' created (id: 3afde175-12d6-4614-94ca-e504737a7cc4, engine: postgres 16)

$ sh0 db info 3afde175-12d6-4614-94ca-e504737a7cc4
Database Server: my-db
  ID:       3afde175-12d6-4614-94ca-e504737a7cc4
  Engine:   postgres 16
  Status:   running
  Host:     my-db.internal
  Port:     32965
  Databases: 0
  Users:    0

$ sh0 db create-database 3afde175-12d6-4614-94ca-e504737a7cc4 --name appdb
Database 'appdb' created (id: 90083652-6e9c-44fe-afb8-a173284847ad).
Note
As aplicações se conectam a my-db.internal na porta do motor (aqui 5432). A Port exibida por sh0 db info é uma porta do host vinculada apenas a 127.0.0.1: não é acessível de outra máquina. Veja Strings de conexão.

Um servidor começa vazio. Adicione bancos e usuários nas abas Bancos de dados e Usuários, ou com sh0 db create-database, sh0 db create-user e sh0 db grant. O Redis não tem aba de bancos.

Limites de Recursos

Todo servidor de banco de dados roda desde a criação com um limite de CPU e de memória. Não há cota de disco: o volume cresce com os dados, até o espaço livre do host.

ConfiguraçãoPadrãoValores permitidos
CPU0,5 núcleo, todos os motoresDe 0,1 núcleo até o número de núcleos do host
Memória1 GB; 256 MB para o RedisDe 64 a 16.384 MB
DiscoSem cotaNão configurável

Os limites que o Docker realmente aplica, lidos em um servidor PostgreSQL recém-criado (bytes e depois nano-CPUs):

Terminal
$ docker inspect sh0-dbsrv-my-db --format '{{.HostConfig.Memory}} {{.HostConfig.NanoCpus}}'
1073741824 500000000

Para alterá-los, abra a aba Escalonamento do servidor, defina Limite de memória (MB) e Limite de CPU (núcleos) e salve. Os valores salvos não são aplicados ao contêiner em execução: clique em Apply & Restart (rótulo exibido em inglês) para recriá-lo com os novos limites. O volume de dados é mantido; as conexões caem durante a reinicialização.

Status e Saúde do Banco de Dados

Um servidor de banco de dados está running (em execução) ou stopped (parado). Sua aba Visão geral mostra ao vivo o uso de CPU, memória e rede, o host interno e os dados de conexão.

Gerenciando Bancos de Dados

  • Iniciar / parar: pela página do servidor, ou com sh0 db start e sh0 db stop. O contêiner reinicia sozinho após uma reinicialização do host (política do Docker unless-stopped).
  • Recriar: sh0 db recreate reconstrói o contêiner a partir das configurações salvas (versão, limites, montagens) e mantém o volume de dados.
  • Mudar de versão: sh0 db update <id> --version <v> registra a nova versão; ela vale a partir da próxima recriação. O painel não oferece isso. Os motores não suportam voltar a uma versão anterior e algumas atualizações maiores exigem um dump e uma restauração: faça antes um backup.
  • Backups: veja Backups e restauração.

Para excluir um servidor e seus dados, abra a aba Configurações, marque Excluir volumes na Zona de perigo e exclua. O equivalente na API é DELETE /api/v1/database-servers/:id?delete_volumes=true.

Warning
Excluir pela lista de servidores, ou com sh0 db delete, remove o contêiner mas mantém o volume de dados sh0-dbsrv-<nome>-data no disco, embora a mensagem de confirmação da lista diga que os dados são excluídos. Excluir o volume é irreversível: faça um backup antes.