Un super outil open-source que l’on peut héberger soi-même, NocoDB est une alternative à AIRTABLE

A quoi sert NocoDB ?

NocoDB est un outil open-source qui permet de créer des tableaux contenant différents types de champs tels que du texte, des chiffres, des images, des liens… en les partageant entre utilisateurs ou via des API. 

NocoDB transforme aussi votre base de données relationnelle existante en une feuille de calcul intelligente. 

A l’avenir, NocoDB permettra également d’interagir avec différents types d’apps via des canaux Slack, Discord, serveur SMTP. A l’heure actuelle, ces fonctionnalités ne sont pas totalement implémentées.

L’avantage de cet outil, c’est de partager ces données via des APIs dans le cloud. NocoDB permet donc de stocker des données de différentes natures, de les visualiser et de pouvoir interagir avec elles grâce à la connexion de services externes. 

C’est un joli concurrent à Airtable. Il est certes moins évolué, mais avec le temps et la communauté active, il est possible que NocoDB devienne une référence en open-source dans cette catégorie.

Présentation de la structure de l’article 

Cette article sera un peu long que les précédents et, ce coup-ci, il n’y aura pas d’exemples de projets. J’ai pris le parti de vous montrer l’ensemble des menus qui peuvent vous être utiles.

Dans ce tutorial, on verra donc :

  • l’installation de NocoDB
  • La première connexion
  • La création d’un projet
  • La gestion des utilisateurs
  • La création des tables et des vues
  • L’aperçu utilisateur et le partage des tables
  • L’utilisation de l’API pour accéder à vos tables
  • L’audit de votre projet
  • Les meta-données de votre projet

Accrochez-vous !

Installation

Comme pour le précédent article n8n ou Appsmith, je vous ai préparé une VM (Machine virtuelle) toute prête contenant NocoDB, Appsmith et n8n (on commence à créer notre stack open-source low code !).

Trois possibilités s’offrent à vous pour suivre ce tutoriel :

  • Utilisation d’une VM (Machine Virtuelle) préconfigurée

Pour cela, il faut récupérer l’archive via le lien suivant [A venir].

C’est une image à importer directement dans VirtualBox. Pour ceux qui ne savent pas comment faire, je vous renvoie directement au premier article de cette longue série qui explique comment configurer et importer une image VBox. Le lien est ici [A venir].

  • Installation “from Scratch” avec Docker sous Linux (Ubuntu ou Debian) en Local ou depuis une VPS

Préalablement, il faut avoir installé Docker. Un super tuto en français Comment installer et utiliser Docker sur Ubuntu 20.04 | DigitalOcean

Créer le fichier suivant dans un dossier (nocodb par exemple) :

version: '3.7'

services:  
  root_db:  
    image: postgres  
   restart: always  
    volumes:  
      - db_data:/var/lib/postgresql/data  
    environment:  
      POSTGRES_PASSWORD: password  
      POSTGRES_USER: postgres  
      POSTGRES_DB: root_db  
    healthcheck:  
      test: pg_isready -U "$$POSTGRES_USER" -d "$$POSTGRES_DB"  
      interval: 10s  
      timeout: 2s  
      retries: 10  
  nocodb:  
    depends_on:  
      - root_db  
    image: nocodb/nocodb:latest  
    ports:  
      - "8080:8080"  
    restart: always  
    environment:  
      NC_DB: "pg://root_db:5432?u=postgres&p=password&d=root_db"  
volumes:  
  db_data: {}

Et en une simple commande docker-compose up, vous démarrez le service NocoDB.

Au premier lancement, il faudra créer le compte de l’administrateur, donc attention à choisir un password conséquent et surtout, à ne pas l’oublier! 

1__vi92CBaCLlKWC5HIOCDjsQ

La création de compte utilisateur se fait via des invitations, il faut donc que l’administrateur vous invite. Il n’est pas possible de créer un compte automatiquement. C’est pour moi une fonctionnalité importante ! Nous pouvons choisir qui aura accès avec les droits associés.

Allez, trève de bavardage, analysons les premiers menus de l’outils!

La première connexion

Rentrez vos identifiants nouvellement créés.
1__yO22ah__Tzd7DShfJ5AXe6A

Voici la page contenant l’ensemble de vos projets. Un projet héberge plusieurs tables de données avec une liste d’utilisateurs associée.

1__648y2RuW9zZGSi7H9XpUcQ

En créant un nouveau projet, il y a deux choix possibles :

  • créer une suite de tables en fonction d’une base de données déjà existante. (Create By connecting)
  • créer une suite de tables à partir de rien. (Create)

1__dWSLqrXMHvNhFaG3pHFXjA

Dans les deux cas, on vous demandera quel type d’API sera utilisé pour que vous puissiez accéder à vos données, et éventuellement les partager avec des services externes (n8n, Appsmith) via une clef d’API.

Je choisirais REST API, pour deux raisons :

  • c’est bien documenté et assez facile à utiliser
  • je n’ai jamais utilisé GraphQL pour le moment :)

Création d’un projet

Partons d’un projet totalement vide sans lien avec une base de données existante en choisissant REST APIs comme connecteur pour les services externes.

1__5kt9vEXDlbIY1wKFrgh2Iw

Une fois le projet créé nous arrivons sur un affichage nous présentant les utilisateurs à lier au projet.

Gestion des utilisateurs 

Cette première page nous indique:

  • l’ensemble des utilisateurs du projet. 
  • l’ensemble des clef API utilisées! Très important: ces clefs API, ce sont les clés échangées lorsque d’autres services tiers veulent utiliser les données du projet. Une section est dédiée dans cet article pour ces clefs API (alias Token).
  • l’ensemble des rôles possibles pour les différents utilisateurs (cette fonctionnalité, n’est pas encore disponible).

1__NaQugyD__otHq96m52jL4VA

Ce menu peut être visible via le bandeau sur la gauche identifié par “Equipe et Authentification”.

Chaque membre de l’équipe doit être invité, par exemple en transmettant le lien par mail à votre collaborateur. Il est ainsi possible de définir plusieurs rôles pour un utilisateur.

  • Owner : identifié comme le propriétaire, donc possédant tous les droits et ayant la possibilité d’ajouter des créateurs
  • Creator : identifié comme le créateur du projet donc possédant également tous les droits
  • Editor : a le droit de modifier les données
  • Commenter : a le droit d’ajouter des commentaires sur les données
  • Viewer : uniquement le droit à la lecture des données des tables

1__sVDxCzu__Ln4HrtZU8YMiyg

Le petit bouton “share” en haut à droite est un raccourci pour inviter et donc créer un utilisateur à utiliser NocoDB
1__h__YUHoTo0kCLAAxoyQo__dA

Rentrons dans le dur du sujet, c’est à dire la création de Tables que l’on pourra partager par la suite.

Création de tables et des vues

Cliquer sur le petit “+” comme indiqué dans l’image :

1__KJTA5cat6h5TddT1DXxL5g
1__nmcG0ArqeiwWaEqR3boZDw

Par défaut, une table contient les colonnes id, titre, date de création de la ligne, date de mise à jour de la ligne.

Nous obtenons l’affichage suivant :

1__MLQuDONcqrPbbUdB72Dwow

  • Encadré 1: c’est notre feuille Excel avec, par défaut, une ligne avec les deux colonnes. Le petit “+” permet d’ajouter une nouvelle colonne
  • Encadré 2: ce sont des onglets visibles uniquement par les créateurs pour afficher des données simplifiées, telles que les images / les données seules…
  • Encadré 3: c’est pour définir les différents droits accessibles via l’API ainsi que l’URL de partage (un mot de passe peut-être défini)

Ajoutons deux nouveaux champs :

  • un champ contenant un nombre (Column type Number pour entier, Type in Database integer pour un entier quelconque)
  • un champ contenant une photo 

1__MlDnEPzpYVO__QDCOcc07pw

Lorsque j’ajoute des colonnes, elles n’apparaissent pas. Pourquoi?

Par défaut, les colonnes ne sont pas visibles. Il faut cliquer sur “Fields” et cocher la/les case(s) voulues pour les afficher.

Voici un exemple avec les 2 colonnes et une donnée.

1__VrGFrQFXZC5bDSNjoTlRwg

Il existe une multitude de types de champs: des nombres, des fichiers, des liens, des relations entre les tables, des formules… Donc là, c’est à vous de jouer avec les différents possibilités.

Il est possible de créer des ‘vues’ pour nous permettre, par exemple, d’afficher uniquement la liste des photos. 

1__lIfAEXq9ht2LF7oqf1MFfQ

En cliquant sur la/les photo(s), nous pouvons directement éditer les données de la ligne entière.

Cette affichage nous permet aussi de pouvoir commenter la ligne. En effet, il est possible d’avoir pour chaque ligne un fil de discussion dédié. Pour le partage entre utilisateurs c’est génial, chacun peut indiquer les raisons de la modification des données. Le fil de discussion contiendra donc toutes les modifications apportées à une ligne.

1__otQaOBTZgMPVBssK__E00__g

Il existe une multitude de fonctions comme le tri (sort) ou le filtrage des données. Je vous laisse juger de ces fonctionnalités par vous-mêmes et jouer avec, rien de bien compliqué au final !

Note : les autres “vues” ne sont pas encore disponibles à l’écriture de cet article. La vue “Grid” affiche la table sans que l’on puisse ajouter de colonne.

Aperçu et Partage

C’est super, on arrive à créer des tables, ajouter des colonnes, ajouter des données, etc. Mais comment les visualiser et ensuite les partager avec d’autres utilisateurs?

Sur le panneau de gauche en bas :

1__eM4sgThBPC0va__A__eQT2rA

On peut choisir le mode d’aperçu que l’on souhaite visualiser. C’est vraiment très pratique. Là je vous laisse tester car un test vaut mieux qu’un long discours :)

Une fois que vous avez testé vos différentes vues, il vous faut les partager. Pour cela, tout se passe dans le menu situé en bas à droite (“Advanced”) :

1__bhXjFZjZJnAfUQV9a26TWA

En cliquant sur “Partager la vue”, vous aurez accès à une URL :

1__Er744snZXMSdYrRR9LLewQ

En choisissant ce mode, je partage ma table avec un mot de passe. Je peux donc partager ce lien par mail, twitter, …

Voilà ce que donne l’affichage (navigateur en mode privé) :

1__Iqm7aA2BIxDAoU7NlSXIfg

Utilisation de l’API REST pour communiquer avec d’autres services

Une API REST, c’est une fonctionnalité qui vous permet d’exposer les données de vos tableaux à des services tiers.

 Mais est-ce accessible à tout le monde ?

Bien sûr que non! Vous allez créer un Jeton (Token) auquel vous pourrez ensuite associer différents droits d’accès.

Pour créer un Jeton, il faut se rendre dans “Equipe et Authentification” puis dans “API Token Management”:

1__vqD1fLEllniq__e46y5SGBQ

Il vous faudra créer un nouveau Token que vous allez garder sous le coude pour être utilisé dans nos services tiers.

Ensuite, il faut se rendre dans “Swagger APIs Doc”

1__UeG9N644kUGvxGXO3xbyLQ

La liste de toutes vos URLs à appeler par des services tiers apparait ainsi :

1__tWRaKKOqUYDiKpsZ6DKjmQ

Par exemple, si je veux obtenir l’ensemble des données de ma table “UneTable”, je vais utiliser l’URL suivante :

http://192.168.43.30:8080/nc/tuto_LwM4/api/v1/UneTable

Il faut donc spécifier au service tiers d’utiliser cette URL avec le Token 

xc-auth: XXXXXXXXXXXXXXXXXXXXX que l'on passe dans le header

Par exemple, si vous utiliser le logiciel POSTMAN(qui permet de tester vos API REST), il faut entrer les paramètres suivants :

1__cdMQ5UPsKRs6M847acIFDg

Depuis l’API, on peut modifier les données d’une ligne, ajouter, filtrer, etc,…

Note : il est également possible de configurer les droits des différentes APIs dans le menu ACL des Webhook (il faut se rendre dans une table et aller dans le menu en bas à droite).

1__3dpwFjTHdOUsCFLBXM7RoA

A quoi sert l’Audit dans NocoDB ?

Ce menu permet de retracer l’ensemble des évènements d’un projet, comme :

  • l’ajout d’une table
  • l’exportation du project
  • la création d’un utilisateur ,…

Par exemple, l’affichage suivant retrace les quelques modifications apportées à notre table d’exemple :

1__XfKzHl8vzn0otrAaYdz73w

Pour les plus avancés, il est possible de voir les requêtes SQL qui sont effectuées lors de la création ou modification d’une table ( Onglet SQL Migrations)

Les meta-données du votre projet

C’est grâce à ce menu que vous allez pouvoir importer, exporter vos données, synchroniser vos tables,…

Ce menu est accessible par le cheminement suivant :

1__kAp9bmw7u__zcq2S5AJQqmw

Depuis ce nouveau panel, il sera notamment possible de faire :

  • Une exportation du projet
  • Une importation d’un projet
  • D’effacer le projet

Dans les sous menus “Root_db Db MetaDate”, nous allons retrouver l’ensemble du flux SQL utilisé pour créer, modifier, supprimer une donnée ou une table. Il peut vous être proposé de “Synchroniser” vos données, faites-le !

Dans le sous menu “Root_db UI Access Control”, nous retrouvons l’ensemble des informations de connexion des utilisateurs sur les tables du projet.

Un dernier mot sur l’AppStore 

Pour la moment, cette partie n’est pas encore assez développée, je ne présenterai donc aucun outil en lien. Il faut juste que le système NocoDB permette de se connecter à un ou plusieurs services tiers pour notifier des informations lors de changements de données.

Conclusion 

Woaw, cet article était long et nous n’avons pas eu le temps de couvrir toutes les notions; mais je pense que c’est déjà suffisant pour commencer de petits projets.

Nous n’avons pas abordé :

  • les différents types de données d’une colonne
  • les différents accès pour les APIs REST de type Webhook
  • la connexion avec une base de données existantes
  • l’utilisation des Apps comme Slack, Teams, ..

Allez, je vous laisse travailler et je m’en vais préparer un autre article !

Note : au moment de l’écriture de ce tutorial, une traduction en français a été proposée. Cette traduction n’est pas encore finalisée. Il se peut donc qu’il y ait des différences par rapport aux Screenshot proposés.

Article précédent Article suivant