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.
| Moteur | Versions proposées | Par défaut | Image Docker | Port |
|---|---|---|---|---|
| PostgreSQL | 17, 16, 15, 14 | 16 | postgres:<version>-alpine | 5432 |
| MySQL | 8.4, 8.0 | 8.4 | mysql:<version> | 3306 |
| MariaDB | 11.4, 11.2, 10.11 | 11.4 | mariadb:<version> | 3306 |
| MongoDB | 8.0, 7.0, 6.0 | 7.0 | mongo:<version> | 27017 |
| Redis | 7.4, 7.2 | 7.4 | redis:<version>-alpine | 6379 |
--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.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.
- Dans la barre latérale, ouvrez Services, puis Serveurs de bases de données.
- Cliquez sur Créer un serveur et choisissez le moteur.
- Saisissez le Nom du serveur : 3 à 63 caractères, lettres minuscules, chiffres et tirets, sans tiret au début ni à la fin.
- 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) oudefault(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éseaush0-netque 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'appellesh0-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 :
$ 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).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églage | Par défaut | Valeurs admises |
|---|---|---|
| CPU | 0,5 cœur, tous moteurs | De 0,1 cœur au nombre de cœurs de l'hôte |
| Mémoire | 1 Go ; 256 Mo pour Redis | 64 à 16 384 Mo |
| Disque | Aucun quota | Non réglable |
Les limites réellement appliquées par Docker, relevées sur un serveur PostgreSQL tout juste créé (octets, puis nano-CPU) :
$ docker inspect sh0-dbsrv-my-db --format '{{.HostConfig.Memory}} {{.HostConfig.NanoCpus}}'
1073741824 500000000Pour 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 startetsh0 db stop. Le conteneur redémarre seul après un redémarrage de l'hôte (politique Dockerunless-stopped). - Recréer :
sh0 db recreatereconstruit 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.
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.