Lors de mes pérégrinations webesques pour vous trouver des nouveautés et assurer mon flux hebdomadaire de Pépites du Lundi matin, je suis tombé sur un outil de sauvegarde compatible avec de nombreux environnements de bases de données ainsi que d’un truc que je trouve génial personnellement … mais je tease 😉 … laissez moi vous présenter Portabase !

Portabase a de nombreux atouts même si au départ, sa proposition n’est pas a priori hyper sexy. Malgré tout cette fonction est critique et nécessaire dans nos environnements de production: la sauvegarde de bases de données. Maintenant, le coté « boring » de Portabase s’arrête là. Et je vais essayer dans cet article de vous présenter de manière macro son fonctionnement.

D’abord une liste (non exhaustive) de ses forces, jugez plutôt :

  • Tout en une seule commande : La CLI est le point d’entrée unique de l’outil (déploiement, gestion, mises à jour, aussi bien pour déployer tout votre dashboard via docker-compose que d’installer l’agent qui s’y connectera, via du docker-compose également)
  • Security by design : Pas de ports entrants sur les hosts … seuls les agents se connectent au dashboard
  • Multi-destinations : Une sauvegarde = plusieurs cibles simultanées (ex: local + S3 + Google Drive)
  • Open Source (Licence Apache 2.0) + self-hosted
  • Prise en charge de nombreuses bases de données et environnements : PostgreSQL, MySQL, MariaDB, MongoDB, Redis, SQlite, Firebird, MS SQL et … les Docker Volumes (pour des données critiques, un vault par exemple) !
  • Et pour ne rien gâcher, une philosophie de développement et d’intégration qui ferait rendre jaloux un certain Richard (si vous n’avez pas la réf, je ne peux plus rien pour vous …) : développée et maintenue par une association loi 1901 !

Ca se présente pas mal et ce n’est que le début. On est partie pour une découverte illustrée à la vblog 🙂

Installation initiale

L’installation est tellement simple que ça en est presque frustrant. Vous installez un binaire maitre et c’est quasi fini…

Avant de lancer le docker-compose, vu que je suis curieux, j’ai un peu regardé ce que l’outil initial portabase a préparé :

… coté configuration, un seul et unique .env contient toutes les données sensibles :

Et c’est tout pour le moment. On lance donc le docker-compose ;

À noter : Pour accéder à votre instance à distance depuis votre réseau, vous devez modifier la variable PROJECT_URL dans le fichier .env en indiquant une URL accessible depuis votre réseau (par exemple http://merlin:8887), et non l’URL locale par défaut (http://localhost:8887). Sans cette modification, l’interface Web tentera systématiquement de se connecter à 127.0.0.1, ce qui générera une erreur de connexion (le frontend JavaScript utilise cette URL pour communiquer avec le backend). Petit piège : j’ai moi-même perdu une trentaine de minutes avant de comprendre que le problème venait de cette configuration par défaut.

Maintenant, la suite va se passer, via la GUI initiale du Dashboard de Portabase. Voici les principales étapes

Vous noterez que j’ai passé très rapidement certaines options car on va repasser dessus plus en détail à partir de maintenant. Votre dashboard est relativement vide pour le moment, avec juste 2 organisations, en quelques sortes deux tenants, le tenant par défaut et votre organisation/projet créé via la ligne de commande initiale. Désormais il va falloir organiser la liste des bases de données et volumes docker à sauvegarder, ainsi que le support de sauvegarde lui-même.

On commence par le support de sauvegarde qu’on appelle un Storage Channel. On va choisir S3 :

Ensuite, on va configurer un agent. C’est cet agent qui va s’occuper de la sauvegarde, donc il va falloir le créer sur le host dont vous désirer sauvegarder des données (bdd ou volume docker). Pour mon exemple, on va se connecter sur la machine « sandbox » et sauvegarder le volume docker « proxcenter_data ». Voici la partie dashboard :

… et maintenant, la partie ligne de commande de portabase coté host sandbox :

Une fois démarré, vous allez constater que la page de l’agent sur le dashboard indique désormais l’état de celui-ci, la liste des bases (ou volumes 🙂 ) dont il doit s’occuper.

Enfin, on va construire notre « projet » de sauvegarde :

… et on lance le premier backup !

Après cette première présentation de Portabase, il reste encore beaucoup à découvrir, mais je vous laisse explorer plus loin si le cœur vous en dit.

Portabase, on le voit, est extrêmement bien structuré : tout est intégré au bon endroit, sans complexité superflue, à mon avis. La liste des bases de données supportées (à l’exception d’Oracle… mais bon, qui en a encore besoin aujourd’hui ?😉) est très complète, et la plupart des implémentations sont déjà marquées comme Stables, alors que le projet reste jeune. Pourtant, il mûrit rapidement – le premier commit de la version 1.0 date d’ailleurs du début de l’année.

J’adore son interface dashboard, à la fois minimaliste et élégante. Elle me rappelle beaucoup celle de Pangolin, mon bastion Open Source préféré, que j’utilise depuis presque un an (d’ailleurs, si vous ne le connaissez pas, je vous invite à lire mon article de présentation – c’est une vraie pépite à utiliser tous les Lundis !).

L’approche et la philosophie du projet me semblent parfaitement adaptées, car elles couvrent de nombreux cas d’usage… surtout depuis la prise en charge des Docker Volumes !

À suivre : on y reviendra peut-être dans quelques jours ou semaines (je vous mets l’eau à la bouche, mais… patience, chut ! ). Et puis, le fait que Portabase soit 100 % Open Source et soutenu par une association loi 1901, c’est plutôt rare et inspirant dans le paysage actuel…

Bref : ne serait-ce que pour le découvrir, jetez-vous sur Portabase et longue vie à ce produit si bien né et Français !

Références :
– Site Portabase : https://portabase.io
– Portabase sur GitHub : https://github.com/portabase/portabase
– L’association derrière Portabase : https://portabase.io/legal-notices
– Mon article sur Pangolin : https://vblog.io/pangolin/

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *