Docs/ Bases de données/ Provisionnement

Provisionnement de bases de données

sh0 exécute PostgreSQL, MySQL, MariaDB, MongoDB et Redis dans des conteneurs gérés, appelés serveurs de bases de données : un moteur par conteneur, un volume persistant, des identifiants générés et un nom d'hôte interne stable.

Bases de données prises en charge

Cinq moteurs sont disponibles. Le tableau de bord propose les versions ci-dessous et présélectionne la version par défaut ; sh0 télécharge l'image officielle de la version choisie.

MoteurVersions proposéesPar défautImage DockerPort
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
L'API et la CLI (--version) transmettent la version à Docker comme étiquette d'image, sans la comparer à cette liste. Une version hors liste n'est pas testée par sh0 ; si l'étiquette n'existe pas, la création échoue au téléchargement de l'image.
Note
Créer un serveur de bases de données, et modifier ses limites de ressources, demande une licence Pro ou supérieure. Sans elle, le tableau de bord affiche une invitation à passer à l'offre supérieure et l'API refuse la requête.

Création d'une base de données

Un serveur de bases de données se crée depuis le tableau de bord, la CLI ou l'API. Seuls les rôles owner et admin peuvent en créer un.

  1. Dans la barre latérale, ouvrez Services, puis Serveurs de bases de données.
  2. Cliquez sur Créer un serveur et choisissez le moteur.
  3. Saisissez le Nom du serveur : 3 à 63 caractères, lettres minuscules, chiffres et tirets, sans tiret au début ni à la fin.
  4. Choisissez la Version, puis confirmez avec Créer un serveur.

sh0 télécharge l'image si besoin, démarre le conteneur et attend jusqu'à 60 secondes que le moteur accepte les connexions avant d'ouvrir la page du serveur. Il génère aussi :

  • Identifiants administrateur : utilisateur postgres (PostgreSQL), root (MySQL, MariaDB), admin (MongoDB) ou default (Redis), avec un mot de passe aléatoire de 32 caractères, stocké chiffré par la clé maîtresse de l'instance.
  • Un nom d'hôte interne, <nom>.internal, sur le réseau sh0-net que rejoint chaque application.
  • Un volume de données nommé sh0-dbsrv-<nom>-data, monté sur le répertoire de données du moteur. Le conteneur s'appelle sh0-dbsrv-<nom>.

La même chose depuis la CLI (sh0 db est un alias de sh0 database-servers). Les valeurs de moteur sont postgres, mysql, mariadb, mongodb et 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
Les applications se connectent à my-db.internal sur le port du moteur (ici 5432). Le Port affiché par sh0 db info est un port de l'hôte lié à 127.0.0.1 uniquement : il n'est pas joignable depuis une autre machine. Voir Chaînes de connexion.

Un serveur démarre vide. Ajoutez bases et utilisateurs dans ses onglets Bases de données et Utilisateurs, ou avec sh0 db create-database, sh0 db create-user et sh0 db grant. Redis n'a pas d'onglet de bases.

Limites de ressources

Chaque serveur de bases de données tourne dès sa création avec une limite CPU et mémoire. Il n'y a pas de quota disque : le volume grandit avec les données, jusqu'à l'espace libre de l'hôte.

RéglagePar défautValeurs admises
CPU0,5 cœur, tous moteursDe 0,1 cœur au nombre de cœurs de l'hôte
Mémoire1 Go ; 256 Mo pour Redis64 à 16 384 Mo
DisqueAucun quotaNon réglable

Les limites réellement appliquées par Docker, relevées sur un serveur PostgreSQL tout juste créé (octets, puis nano-CPU) :

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

Pour les modifier, ouvrez l'onglet Mise à l'échelle du serveur, renseignez Limite mémoire (Mo) et Limite CPU (cœurs), puis enregistrez. Les valeurs enregistrées ne s'appliquent pas au conteneur en cours : cliquez sur Apply & Restart (libellé affiché en anglais) pour le recréer avec les nouvelles limites. Le volume de données est conservé ; les connexions sont coupées pendant le redémarrage.

Statut et santé de la base de données

Un serveur de bases de données est soit running (en marche), soit stopped (arrêté). Son onglet Aperçu affiche en direct l'usage CPU, mémoire et réseau, l'hôte interne et les informations de connexion.

Gestion des bases de données

  • Démarrer / arrêter : depuis la page du serveur, ou sh0 db start et sh0 db stop. Le conteneur redémarre seul après un redémarrage de l'hôte (politique Docker unless-stopped).
  • Recréer : sh0 db recreate reconstruit le conteneur à partir des réglages enregistrés (version, limites, montages) et conserve le volume de données.
  • Changer de version : sh0 db update <id> --version <v> enregistre la nouvelle version ; elle prend effet à la prochaine recréation. Le tableau de bord ne le propose pas. Les moteurs ne gèrent pas le retour à une version antérieure et certaines montées de version majeure exigent un export puis une restauration : faites d'abord une sauvegarde.
  • Sauvegardes : voir Sauvegardes et restauration.

Pour supprimer un serveur et ses données, ouvrez son onglet Paramètres, cochez Supprimer les volumes dans la Zone de danger, puis supprimez. L'équivalent API est DELETE /api/v1/database-servers/:id?delete_volumes=true.

Warning
Supprimer depuis la liste des serveurs, ou avec sh0 db delete, retire le conteneur mais conserve le volume de données sh0-dbsrv-<nom>-data sur le disque, bien que le message de confirmation de la liste annonce la suppression des données. Supprimer le volume est irréversible : faites une sauvegarde avant.