Documentación/ Bases de datos/ Aprovisionamiento

Aprovisionamiento de bases de datos

sh0 ejecuta PostgreSQL, MySQL, MariaDB, MongoDB y Redis en contenedores gestionados, llamados servidores de bases de datos: un motor por contenedor, un volumen persistente, credenciales generadas y un nombre de host interno estable.

Bases de datos compatibles

Hay cinco motores disponibles. El panel ofrece las versiones siguientes y preselecciona la versión por defecto; sh0 descarga la imagen oficial de la versión elegida.

MotorVersiones ofrecidasPor defectoImagen DockerPuerto
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
La API y la CLI (--version) pasan la versión a Docker como etiqueta de imagen, sin compararla con esta lista. Una versión fuera de la lista no está probada por sh0; si la etiqueta no existe, la creación falla al descargar la imagen.
Note
Crear un servidor de bases de datos, y cambiar sus límites de recursos, requiere una licencia Pro o superior. Sin ella, el panel muestra una invitación a mejorar el plan y la API rechaza la solicitud.

Crear una base de datos

Un servidor de bases de datos se crea desde el panel, la CLI o la API. Solo los roles owner y admin pueden crearlo.

  1. En la barra lateral, abra Servicios y luego Servidores de bases de datos.
  2. Haga clic en Crear servidor y elija el motor.
  3. Escriba el Nombre del servidor: de 3 a 63 caracteres, letras minúsculas, dígitos y guiones, sin guion al principio ni al final.
  4. Elija la Versión y confirme con Crear servidor.

sh0 descarga la imagen si hace falta, inicia el contenedor y espera hasta 60 segundos a que el motor acepte conexiones antes de abrir la página del servidor. También genera:

  • Credenciales de administrador: usuario postgres (PostgreSQL), root (MySQL, MariaDB), admin (MongoDB) o default (Redis), con una contraseña aleatoria de 32 caracteres, almacenada cifrada con la clave maestra de la instancia.
  • Un nombre de host interno, <nombre>.internal, en la red sh0-net a la que se une cada aplicación.
  • Un volumen de datos llamado sh0-dbsrv-<nombre>-data, montado en el directorio de datos del motor. El contenedor se llama sh0-dbsrv-<nombre>.

Lo mismo desde la CLI (sh0 db es un alias de sh0 database-servers). Los valores de motor son postgres, mysql, mariadb, mongodb y 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
Las aplicaciones se conectan a my-db.internal en el puerto del motor (aquí 5432). El Port que muestra sh0 db info es un puerto del host enlazado solo a 127.0.0.1: no es accesible desde otra máquina. Consulte Cadenas de conexión.

Un servidor arranca vacío. Añada bases y usuarios en sus pestañas Bases de datos y Usuarios, o con sh0 db create-database, sh0 db create-user y sh0 db grant. Redis no tiene pestaña de bases.

Límites de recursos

Cada servidor de bases de datos funciona desde su creación con un límite de CPU y de memoria. No hay cuota de disco: el volumen crece con los datos, hasta el espacio libre del host.

AjustePor defectoValores admitidos
CPU0,5 núcleos, todos los motoresDe 0,1 núcleos hasta el número de núcleos del host
Memoria1 GB; 256 MB para RedisDe 64 a 16 384 MB
DiscoSin cuotaNo configurable

Los límites que Docker aplica realmente, leídos en un servidor PostgreSQL recién creado (bytes y luego nano-CPU):

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

Para cambiarlos, abra la pestaña Escalado del servidor, indique Límite de memoria (MB) y Límite de CPU (núcleos) y guarde. Los valores guardados no se aplican al contenedor en ejecución: haga clic en Apply & Restart (etiqueta mostrada en inglés) para recrearlo con los nuevos límites. El volumen de datos se conserva; las conexiones se cortan durante el reinicio.

Estado y salud de la base de datos

Un servidor de bases de datos está running (en marcha) o stopped (detenido). Su pestaña Resumen muestra en directo el uso de CPU, memoria y red, el host interno y los datos de conexión.

Administrar bases de datos

  • Iniciar / detener: desde la página del servidor, o con sh0 db start y sh0 db stop. El contenedor se reinicia solo tras un reinicio del host (política de Docker unless-stopped).
  • Recrear: sh0 db recreate reconstruye el contenedor a partir de los ajustes guardados (versión, límites, montajes) y conserva el volumen de datos.
  • Cambiar de versión: sh0 db update <id> --version <v> guarda la nueva versión; se aplica en la siguiente recreación. El panel no lo ofrece. Los motores no admiten volver a una versión anterior y algunas actualizaciones mayores exigen un volcado y una restauración: haga antes una copia de seguridad.
  • Copias de seguridad: consulte Copias de seguridad y restauración.

Para eliminar un servidor y sus datos, abra su pestaña Configuración, marque Eliminar volúmenes en la Zona de peligro y elimine. El equivalente en la API es DELETE /api/v1/database-servers/:id?delete_volumes=true.

Warning
Eliminar desde la lista de servidores, o con sh0 db delete, quita el contenedor pero conserva el volumen de datos sh0-dbsrv-<nombre>-data en el disco, aunque el mensaje de confirmación de la lista diga que se eliminan los datos. Eliminar el volumen es irreversible: haga antes una copia de seguridad.