←Tous les articles
Mer. 16 septembre 2026·8 min de lecture

đŸ’Ÿ Portabase : centraliser les sauvegardes de ses bases de donnĂ©es

Schéma Portabase : un dashboard, plan de contrÎle portant le logo de la marque, reçoit toutes les 5 secondes l'appel sortant des agents posés à cÎté des bases, lesquels exécutent les dumps, chiffrent les archives en AES-GCM et les poussent vers les stockages, sans aucun port entrant à ouvrir

📚 Introduction

La sauvegarde, c’est le sujet qu’on repousse. Un pg_dump dans un cron, un mysqldump qui pousse vers un bucket, un script Bash hĂ©ritĂ© d’un ancien projet et recopiĂ© depuis trois ans. Ça tourne. Enfin, on le suppose : personne n’a relu le log depuis des mois, et personne n’a jamais tentĂ© de restaurer.

Le jour oĂč il faut restaurer, les dĂ©tails remontent tous en mĂȘme temps. Le dump s’arrĂȘtait Ă  2 Go, disque plein. La rotation gardait sept jours quand le client en attendait trente. Le fichier existe, mais il est tronquĂ© au milieu d’un INSERT. Et comme les bases sont rĂ©parties sur cinq machines chez trois hĂ©bergeurs, chaque serveur a sa version du script et ses approximations Ă  lui.

Portabase attaque le problĂšme par le milieu : une interface unique qui pilote les sauvegardes de toutes vos bases, oĂč qu’elles tournent, avec restauration depuis le navigateur. Licence Apache 2.0, auto-hĂ©bergement complet, projet portĂ© par une organisation Ă  but non lucratif. La version 1.30.1 date du 14 septembre 2026.

🔎 Pourquoi pas simplement un cron et un mysqldump ?

Parce qu’un cron ne vous dit rien de ce qu’il fait. MAILTO existe, et rien n’empĂȘche un script d’appeler un webhook en cas d’échec. Encore faut-il l’écrire sur chaque machine, puis le maintenir. Ce qui manque n’a jamais Ă©tĂ© la possibilitĂ© technique d’alerter : c’est le suivi centralisĂ©, une rotation plus fine que « supprime ce qui dĂ©passe N jours », et une restauration praticable Ă  3 h du matin.

Portabase ajoute la couche qui manque au-dessus des outils de dump natifs, qu’il continue d’appeler en dessous. La planification se dĂ©crit en cron. La rĂ©tention se choisit parmi trois stratĂ©gies : garder les N derniĂšres copies (de 1 Ă  100), garder tout ce qui a moins de N jours, ou une rotation GFS — grand-pĂšre, pĂšre, fils — qui conserve un reprĂ©sentant par pĂ©riode pour couvrir plusieurs annĂ©es sans exploser le volume. Une mĂȘme sauvegarde part vers toutes les destinations actives Ă  la fois, et les Ă©checs dĂ©clenchent des alertes.

FenĂȘtre de configuration de la politique de rĂ©tention dans Portabase, proposant trois stratĂ©gies : garder les N derniĂšres sauvegardes, garder les sauvegardes pendant X jours, ou rotation GFS

Les trois stratégies de rétention, telles que le dashboard les propose. Capture issue de la documentation officielle.

Dix moteurs sont gĂ©rĂ©s, tous marquĂ©s stables : PostgreSQL 12 Ă  18, MySQL 5.7 Ă  9, MariaDB 10 et 11, MongoDB 4 Ă  8, SQLite 3.x, Redis 2.8+, Valkey 7.2+, Firebird 3.0 Ă  5.0, Microsoft SQL Server 2017, 2019 et 2022 ainsi qu’Azure SQL, plus les volumes Docker depuis l’Engine 20.10. La restauration couvre tout sauf Redis et Valkey.

đŸ§± Un dashboard, des agents, zĂ©ro port ouvert

Portabase se dĂ©ploie en deux morceaux. Le dashboard est le plan de contrĂŽle, une application Next.js installĂ©e une seule fois : on y dĂ©clare les agents, on y configure sauvegardes, stockages et intĂ©grations, et il ne parle jamais Ă  vos bases. L’agent est un binaire Rust posĂ© sur chaque serveur hĂ©bergeant des bases. C’est lui qui exĂ©cute les dumps et les restaurations, et il chiffre les archives en AES-GCM avant que la moindre donnĂ©e quitte la machine.

Le sens de la communication fait tout l’intĂ©rĂȘt. La documentation est explicite : « le serveur central ne contacte jamais les agents directement. Il n’y a donc pas besoin d’ouvrir de ports entrants dans les environnements oĂč rĂ©sident les bases de donnĂ©es. Ce sont les agents qui contactent pĂ©riodiquement le serveur central. » Le sondage tourne toutes les cinq secondes par dĂ©faut.

Vos serveurs de bases n’exposent donc rien de neuf. Sur un parc Ă©clatĂ© entre un VPS, un homelab Proxmox et deux hĂ©bergeurs managĂ©s, ça change la conversation avec l’équipe rĂ©seau.

Une nuance s’impose au passage, parce qu’elle est facile Ă  sur-interprĂ©ter. Ce que cette architecture supprime, c’est le chemin rĂ©seau entrant, pas le lien d’autoritĂ© : l’agent interroge le dashboard prĂ©cisĂ©ment pour y prendre ses ordres, restaurations comprises. Quelqu’un qui prend le contrĂŽle du dashboard peut donc toujours faire dĂ©clencher des dumps ou des restaurations par vos agents. La documentation ne dit d’ailleurs pas autre chose : l’approche « limite les consĂ©quences d’une compromission du serveur central ». Elle les limite, elle ne les annule pas. Le dashboard reste Ă  traiter comme un actif sensible.

L’agent transporte son identitĂ© dans une Edge Key : une chaĂźne encodĂ©e contenant son identifiant, sa clĂ© de chiffrement et l’URL du dashboard Ă  joindre. C’est le seul Ă©lĂ©ment Ă  transporter d’un bout Ă  l’autre de l’installation.

🚀 Installer le dashboard et un premier agent

Le CLI est la voie la plus courte : il gĂ©nĂšre le secret de chiffrement et dĂ©marre les conteneurs Ă  votre place. Il lui faut Docker avec le plugin Compose, et il rĂ©gĂ©nĂšre le docker-compose.yml Ă  chaque changement de configuration — vos ajustements maison vont dans un docker-compose.override.yml, pas dans le fichier gĂ©nĂ©rĂ©.

curl -sL https://portabase.io/install | bash
portabase --version

Le binaire couvre Linux (amd64, arm64), macOS et Windows. On crée le dashboard, puis on le démarre :

portabase dashboard create mon-dashboard
portabase start mon-dashboard

L’assistant demande le port web (8887 par dĂ©faut), le mode de base et le fuseau horaire. L’interface rĂ©pond sur http://localhost:8887.

Page d'accueil du dashboard Portabase dans un navigateur, affichant six compteurs — organisations, projets, bases de donnĂ©es, agents, sauvegardes totales et sauvegardes disponibles — et une barre latĂ©rale donnant accĂšs aux agents, notifications, stockages et gestion des accĂšs

L’accueil du dashboard, servi sur le port 8887. Les compteurs donnent l’état du parc d’un coup d’Ɠil ; la barre latĂ©rale rassemble agents, stockages, notifications et gestion des accĂšs.

CĂŽtĂ© serveur de bases, l’agent se crĂ©e aussi simplement, l’Edge Key se rĂ©cupĂ©rant sous Organisation > Settings > Agents :

portabase agent create mon-agent --key "<edge-key>" --tz "Europe/Paris" --start

Les autres options utiles sont --polling (frĂ©quence de sondage, en secondes), --log-level parmi debug, info, warn et error, et --yes. Une fois l’agent en ligne, les bases qu’il dĂ©tecte remontent toutes seules dans l’interface. Pour celles qu’il ne devine pas, un fichier montĂ© sur /config/config.json les dĂ©clare en JSON ou en TOML.

Pour garder la main sur le Compose, l’image portabase/portabase:latest s’utilise directement :

docker run -d \
    --name portabase-app-prod \
    -p 8887:80 \
    --restart unless-stopped \
    -e TZ="Europe/Paris" \
    --env-file .env \
    -v ./portabase-data:/data \
    portabase/portabase:latest

La commande est reprise telle quelle de la documentation, latest compris ; en production, remplacez-le par le tag que vous avez vĂ©rifiĂ© (1.30.1 au moment oĂč j’écris), pour la raison donnĂ©e plus bas. Trois variables comptent : PROJECT_URL, PROJECT_SECRET (un openssl rand -hex 32 fait l’affaire) et DATABASE_URL. La documentation rĂ©serve ce docker run aux essais, sa base embarquĂ©e n’étant pas prĂ©vue pour la production : la forme recommandĂ©e reste un Compose avec un PostgreSQL dĂ©diĂ©. Kubernetes via Helm, Unraid, Dokploy et Coolify sont documentĂ©s aussi.

đŸ—„ïž OĂč atterrissent les archives

Le stockage local dĂ©panne pour un premier essai, le temps de vĂ©rifier que la chaĂźne fonctionne. Au-delĂ , la sauvegarde partage le sort de la machine qu’elle protĂšge. Portabase sait viser du S3-compatible (MinIO, AWS, Scaleway), Google Drive, Google Cloud Storage, Azure Blob Storage, SFTP, et tout backend atteignable par Rclone.

Plusieurs destinations restent actives en mĂȘme temps sur une base, et la sauvegarde part vers toutes simultanĂ©ment. De quoi tendre vers la rĂšgle 3-2-1, Ă  condition de choisir des cibles vraiment indĂ©pendantes. Deux buckets du mĂȘme fournisseur, sous le mĂȘme compte, disparaissent ensemble le jour oĂč ce compte est suspendu. Une copie chez l’hĂ©bergeur, une copie chez un tiers, des identifiants distincts : c’est le minimum qui tienne. Le stockage se configure comme un canal, au mĂȘme titre que les connecteurs de notification qui vous prĂ©viennent d’un Ă©chec.

FenĂȘtre de configuration des politiques de stockage dans Portabase, avec un canal CloudFlare R2 en S3 activĂ© et une liste dĂ©roulante proposant d'ajouter le stockage local du systĂšme

Les destinations se déclarent par base. Ici un bucket CloudFlare R2 actif, avec le stockage local du serveur disponible en second canal.

đŸ€– Un serveur MCP pour piloter le tout

Le dashboard expose ses opĂ©rations en Model Context Protocol : un assistant peut lister agents, bases et sauvegardes en langage naturel. Deux variables l’activent, API_ENABLED=true et MCP_ENABLED=true. L’endpoint /api/v1/mcp s’authentifie par un en-tĂȘte x-api-key :

{
	"mcpServers": {
		"portabase": {
			"command": "npx",
			"args": [
				"-y",
				"mcp-remote",
				"https://your-dashboard.example.com/api/v1/mcp",
				"--header",
				"x-api-key: YOUR_API_TOKEN"
			]
		}
	}
}

Pratique pour interroger l’état d’un parc. Tenez-vous-en Ă  la lecture le temps d’éprouver la chose : « restaure la base de prod » reste une phrase qu’on prĂ©fĂšre taper soi-mĂȘme.

⚠ Quelques prĂ©cautions

Le projet bouge vite. Trois versions sur les deux jours prĂ©cĂ©dant le 1.30.1. La cadence est rassurante sur la vitalitĂ© du projet, et rend latest hasardeux sur une installation qu’on oublie : Ă©pinglez un tag et lisez les notes de version avant de monter.

L’Edge Key est un secret complet. Identifiant de l’agent, clĂ© de chiffrement et URL du dashboard tiennent dans une seule chaĂźne. Qui l’obtient enrĂŽle un agent chez vous. Un .env non versionnĂ©, et rien d’autre.

La restauration Ă©crase les donnĂ©es en place. La documentation le dit sans dĂ©tour. Deux modes existent — restaurer depuis une sauvegarde dĂ©jĂ  connue du dashboard, ou depuis un fichier repris sur un stockage externe — et aucun des deux ne vous demandera si vous Ă©tiez bien sĂ»r de la base cible.

Une sauvegarde non restaurĂ©e n’est pas une sauvegarde. L’interface supprime l’excuse principale. Programmez un test rĂ©el sur une base jetable, et chronomĂ©trez-le : ce chiffre-lĂ  est celui qui alimente vos objectifs de service, pas celui que vous espĂ©rez.

🎉 Conclusion

Sous le capot, Portabase appelle les mĂȘmes pg_dump, mysqldump et mongodump que votre script. Tout le travail est dans la couche autour : centraliser, planifier, alerter, chiffrer, et rendre la restauration assez simple pour qu’on la teste vraiment.

Pour un freelance ou une petite équipe aux bases éparpillées, le rapport effort/tranquillité est difficile à battre : deux commandes pour le dashboard, une par serveur. Commencez par la base dont la perte coûterait le plus cher. Une fois celle-là couverte et restaurée pour de vrai, le reste suit.

🔗 Liens utiles

/faq

Questions fréquentes

Qu'est-ce que Portabase ?

+

Portabase est un outil open source auto-hébergé, sous licence Apache 2.0, qui centralise la sauvegarde et la restauration de bases de données. Il se compose d'un dashboard central et d'agents installés à cÎté de chaque base.

Quelles bases de données Portabase sait-il sauvegarder ?

+

Dix moteurs : PostgreSQL 12 Ă  18, MySQL 5.7 Ă  9, MariaDB 10 et 11, MongoDB 4 Ă  8, SQLite 3.x, Redis, Valkey, Firebird 3 Ă  5, Microsoft SQL Server et les volumes Docker. La restauration est disponible pour tous sauf Redis et Valkey.

Faut-il ouvrir des ports entrants sur les serveurs de bases de données ?

+

Non. Le dashboard ne contacte jamais les agents : ce sont les agents qui l'interrogent périodiquement en sortie, toutes les cinq secondes par défaut. Aucune rÚgle de pare-feu entrante n'est nécessaire cÎté bases.

Comment installer Portabase ?

+

Le CLI est la voie la plus courte : curl -sL https://portabase.io/install | bash, puis portabase dashboard create mon-dashboard et portabase start mon-dashboard. La création génÚre le secret de chiffrement et écrit le Compose ; l'option --start la fait démarrer dans la foulée. L'interface écoute sur le port 8887.