Si ça vous dit de pouvoir créer facilement, de manière élégante et propre, des sauvegardes de vos bases de données et de manière automatisée, ne retirez pas la prise de ton PC. Continuez de scroller vers le bas. Je mets un pantalon et on voit ça ensemble !
Aujourd'hui nous allons parler de Databasement ! Une application qui va veiller à sauvegarder vos bases de données, de manière automatique, avec rétention, le tout facilité par une belle interface (à mon idée) bien pensée.
Pour ne pas déplaire, pour ceux qui sont adeptes du S3, c'est supporté.
Comme bien souvent dans le self-hosting on ne se contente rarement que d'une ou deux applications, Databasement vaut vraiment la peine de se pencher dessus si vous voulez automatiser et ainsi protéger vos bases de données.
⚡ Caractéristiques
- Prise en charge "multi-bases de données" : Gérez des serveurs MySQL, PostgreSQL et MariaDB depuis une interface unique.
- Sauvegardes automatisées : Planifiez des sauvegardes récurrentes (quotidiennes, hebdomadaires, mensuelles) avec des politiques de rétention personnalisables.
- Restauration inter-serveurs : Restaurez des instantanés de la production vers la préproduction, ou entre tout serveur compatible.
- Stockage flexible : Stockez les sauvegardes localement ou sur un stockage compatible S3 (AWS S3, MinIO, etc.).
- Supervision en temps réel : Suivez l’avancement des sauvegardes et des restaurations grâce à des journaux de tâches détaillés.
- Prêt pour le travail en équipe : Support multi-utilisateurs avec gestion des rôles et authentification à deux facteurs optionnelle.


Petite démo ici :
💾 Installation
Prérequis
Avant de commencer, assurez-vous d’avoir :
Étapes d'installation
- Créez votre compose.yml dans le dossier où vous comptez installer Databasement :
nano compose.yml- Et collez ça dedans :
#version: "3.8"
services:
databasement:
image: davidcrty/databasement:latest
container_name: databasement
ports:
- "2226:2226"
environment:
DB_CONNECTION: sqlite
DB_DATABASE: /data/database.sqlite
ENABLE_QUEUE_WORKER: "true"
volumes:
- databasement-data:/data
restart: unless-stopped
volumes:
databasement-data:- On va déployer l'application :
docker compose up -d- Rendez-vous sur l'ip:port, suivant l'IP de votre serveur local et du port choisi, 2226 par défaut :
http://ip:2226/ou votre domaine :
https://databasement.mondomaine.com👤 Créer votre compte administrateur
Et oui, vous l'aurez deviné, il est temps de créer son compte administrateur.

- 1 => Indiquez un nom d'utilisateur.
- 2 => Indiquez une adresse mail.
- 3 => Choisissez un mot de passe fort.
- 4 => Confirmez ce mot de passe.
- 5 => Si vous voulez ajouter la propre base de Databasement en démo. Modifiable par après.
- 6 => Cliquez sur Create account pour terminer.
Vous voilà sur votre tableau de bord :

➕ Ajouter une base de données
Dans le menu de gauche, cliquez sur Database Servers :

Pour ajouter une base de données, cliquez sur + Add Server :

Remplissez les informations suivants :

- 1 => Nommez la base de données.
- 2 => Ajoutez une description. Pourquoi pas ?
- 3 => Choisissez le type de base de données.
- 4 => Indiquez le domaine ou l'IP du serveur.
- 5 => Indiquez le nom d'utilisateur de la base de données.
- 6 => Indiquez le port.
- 7 => Indiquez le mot de passe de la base de données.
Quand c'est terminé, cliquez sur Test Connexion, si la barre devient verte, vous serez amené à l'étape suivante :

Encore quelques petits paramètres et c'est fini :

- 1 => Sélectionnez la ou les bases à sauvegarder.
- 2 => Choisissez où vous voulez effectuer la sauvegarde. S3 compatible.
- 3 => Choisissez la fréquence de la sauvegarde.
- 4 => Choisissez la rétention souhaitée.
- 5 => Cliquez sur Create Database Server pour terminer.
Elle a bien été ajoutée :

En bout de ligne vous avez 4 options :

- 1 => Sauvegarder maintenant.
- 2 => Restaurer.
- 3 => Éditer.
- 4 => Supprimer.
💾 Créer un volume
De base, vous avez déjà un répertoire local :

Mais si vous poussez la porte un peu plus :

Vous pouvez ajouter un autre volume, qu'il soit :
Local

- 1 => Nommez votre volume.
- 2 => Choisissez Local Storage, première option.
- 3 => Indiquez le chemin du dossier.
- 4 => Testez la connexion.
- 5 => Terminez en cliquant sur Create Volume.
S3
Seconde possibilité, du S3.
Lisez ceci avant pour les options de configuration et les variables à ajouter dans le fichier .env :
Quand c'est terminé :

- 1 => Nommez votre volume.
- 2 => Sélectionnez S3.
- 3 => Indiquez le nom du bucket.
- 4 => Testez la connexion.
- 5 => On termine en cliquant sur Create Volume.
✅ Créer une sauvegarde
Cliquez sur Backup Now :

Vous avez un témoin que le traitement est en cours :

La sauvegarde est terminée :

Et vous pouvez voir un récapitulatif dans la partie Dashboard :

⏬ Restaurer une sauvegarde
Et patatra, vous avez une merde avec une base de données. Tant mieux. Enfin, je veux dire tant pis mais tant mieux, on peut la restaurer !
Cliquez sur Restore :

Sélectionnez le source :

Choisissez la base de données (ou les bases) :

Terminez en cliquant sur Restore Database :

Rendez-vous ici pour contrôler :

C'est aussi simple que ça.
👥 Créer et inviter un utilisateur
Si vous souhaitez partager l'accès à l'instance, avec un des droits différents, c'est tout à fait possible. Menu partie Users :

- 1 => Nommez l'utilisateur.
- 2 => Indiquez son adresse mail.
- 3 => Choisissez son rôle.
- 4 => Terminez en cliquant sur Create User.
Vous allez recevoir en retour de la création de l'utilisateur, un lien à partager avec cet utilisateur :

En suivant ce lien, il sera amené à créer son mot de passe :

Petite vérification du Status de Goldorak :

↗️ Installation pour production
Si vous voulez faire ça de manière plus carrée, voici le mode production fourni par le dev :
services:
app:
image: davidcrty/databasement:latest
container_name: databasement
restart: unless-stopped
ports:
- "2226:2226"
env_file: .env
volumes:
- app-data:/data
depends_on:
mysql:
condition: service_healthy
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:2226/health"]
interval: 10s
timeout: 5s
retries: 5
worker:
image: davidcrty/databasement:latest
container_name: databasement-worker
restart: unless-stopped
command: sh -c "php artisan db:wait && php artisan queue:work --queue=backups,default --tries=3 --timeout=3600 --sleep=3 --max-jobs=1000"
env_file: .env
volumes:
- app-data:/data
depends_on:
mysql:
condition: service_healthy
mysql:
image: mysql:8.0
container_name: databasement-mysql
restart: unless-stopped
environment:
MYSQL_ROOT_PASSWORD: your-root-password
MYSQL_DATABASE: databasement
MYSQL_USER: databasement
MYSQL_PASSWORD: your-secure-password
volumes:
- mysql-data:/var/lib/mysql
healthcheck:
test: ["CMD", "mysqladmin", "ping", "-h", "localhost"]
interval: 10s
timeout: 5s
retries: 5
volumes:
app-data:
mysql-data:- MYSQL_ROOT_PASSWORD: your-root-password => Changez your-root-password par un mot de passe différent.
- MYSQL_PASSWORD: your-secure-password => Changez your-secure-password par un mot de passe différent.
