Docker et base de données persistantes pour Directus

Bonjour a tous !

Dans la branche Reflection du git de Directus, Maxime nous donne son docker-compose.yml ainsi que la base de données database/data.db
(directus_api_manager/example_directus_server at reflection · maxbritto/directus_api_manager · GitHub).

A la racine de mon nouveau projet, j’ai donc créé un dossier database où j’y ai placé le fichier data.db téléchargé du git, ainsi qu’un fichier docker-compose.yml contenant le code suivant :

version: '3'
services:
  directus:
    container_name: directus
    image: directus/directus:latest
    ports:
      - 1234:8055
    volumes:
      - ./directus/database:/directus/database
      - ./directus/uploads:/directus/uploads
      - ./directus/extensions:/directus/extensions
    environment:
      KEY: '255d861b-5ea1-5996-9aa3-922530ec40b1'
      SECRET: '6116487b-cda1-52c2-b5b5-c8022c45e263'

      DB_CLIENT: 'sqlite3'
      DB_FILENAME: './database/data.db'

      ADMIN_EMAIL: '[email protected]'
      ADMIN_PASSWORD: 'd1r3ctu5'

Je navigue à partir du Terminal au dossier racine de mon application et fait un docker-compose up, en omettant délibérément l’option -d pour avoir le log :

docker-compose up
[+] Running 1/0
 ⠿ Container directus  Created                                                                                                                     0.0s
Attaching to directus
directus  | [14:03:39.295] INFO: Initializing bootstrap...
directus  | [14:03:39.317] INFO: Installing Directus system tables...
directus  | [14:03:39.444] INFO: Running migrations...
directus  | [14:03:39.449] INFO: Applying Remove Collection Foreign Keys...
directus  | [14:03:39.596] INFO: Applying Remove System Relations...
directus  | [14:03:39.604] INFO: Applying Remove System Collections...
directus  | [14:03:39.615] INFO: Applying Remove System Fields...
directus  | [14:03:39.626] INFO: Applying Add Cascade System Relations...
directus  | [14:03:40.233] INFO: Applying Change Webhook URL Type...
directus  | [14:03:40.257] INFO: Applying Add Relations Sort Field...
directus  | [14:03:40.272] INFO: Applying Remove Locked Fields...
directus  | [14:03:40.300] INFO: Applying Webhooks Collections Text...
directus  | [14:03:40.321] INFO: Applying Add Refresh Interval...
directus  | [14:03:40.336] INFO: Applying Make Filesize Nullable...
directus  | [14:03:40.364] INFO: Applying Add Collections Accountability...
directus  | [14:03:40.382] INFO: Applying Remove Files Interface...
directus  | [14:03:40.390] INFO: Applying Rename Interfaces...
directus  | [14:03:40.430] INFO: Applying Restructure Relations...
directus  | [14:03:40.503] INFO: Applying Add Foreign Key Constraints...
directus  | [14:03:40.523] INFO: Applying Add System Fk Triggers...
directus  | [14:03:40.780] INFO: Applying Add Collections Icon Color...
directus  | [14:03:40.795] INFO: Applying Add Insights...
directus  | [14:03:40.832] INFO: Applying Add Deep Clone Config...
directus  | [14:03:40.858] INFO: Applying Change Filesize Bigint...
directus  | [14:03:40.891] INFO: Applying Add Conditions to Fields...
directus  | [14:03:40.908] INFO: Applying Add Default Folder...
directus  | [14:03:40.944] INFO: Applying Replace Groups...
directus  | [14:03:40.956] INFO: Applying Add Required to Fields...
directus  | [14:03:40.980] INFO: Applying Update Groups...
directus  | [14:03:40.993] INFO: Applying Change Image Metadata Structure...
directus  | [14:03:41.006] INFO: Applying Add Geometry Config...
directus  | [14:03:41.040] INFO: Applying Remove Limit Column...
directus  | [14:03:41.074] INFO: Applying Add Auth Provider...
directus  | [14:03:41.157] INFO: Applying Webhooks Collections Not Null...
directus  | [14:03:41.183] INFO: Applying Move Module Setup...
directus  | [14:03:41.228] INFO: Applying Webhooks URL Not Null...
directus  | [14:03:41.266] INFO: Applying Add Collection Organization...
directus  | [14:03:41.331] INFO: Applying Replace Fields Group...
directus  | [14:03:41.412] INFO: Applying Replace M2M Interface...
directus  | [14:03:41.425] INFO: Applying Rename Login Action...
directus  | [14:03:41.436] INFO: Applying Update Presets...
directus  | [14:03:41.480] INFO: Applying Add Auth Data...
directus  | [14:03:41.502] INFO: Applying Add Webhook Headers...
directus  | [14:03:41.526] INFO: Applying Set Unique to User Token...
directus  | [14:03:41.562] INFO: Applying Update Special Geometry...
directus  | [14:03:41.572] INFO: Applying Remove Collections Listing...
directus  | [14:03:41.609] INFO: Applying Add Notifications...
directus  | [14:03:41.652] INFO: Applying Add Shares...
directus  | [14:03:41.741] INFO: Applying Add Project Descriptor...
directus  | [14:03:41.757] INFO: Applying Remove Default Project Color...
directus  | [14:03:41.781] INFO: Applying Add Bookmark Icon and Color...
directus  | [14:03:41.803] INFO: Applying Add Translation Strings...
directus  | [14:03:41.822] INFO: Applying Rename Field Typecast Flags...
directus  | [14:03:41.833] INFO: Applying Add Field Validation...
directus  | [14:03:41.861] INFO: Applying Fix Typecast Flags...
directus  | [14:03:41.873] INFO: Applying Add Default Language...
directus  | [14:03:41.938] INFO: Applying Remove Default Value Panel Icon...
directus  | [14:03:41.968] INFO: Applying Add Flows...
directus  | [14:03:42.020] INFO: Applying Add Color to Insights Icon...
directus  | [14:03:42.035] INFO: Applying Drop Non Null From IP of Activity...
directus  | [14:03:42.068] INFO: Applying Drop Non Null From Sender of Notifications...
directus  | [14:03:42.098] INFO: Applying Rename Hook Trigger to Event...
directus  | [14:03:42.109] INFO: Applying Update Notifications Timestamp Column...
directus  | [14:03:42.140] INFO: Applying Add Custom Aspect Ratios...
directus  | [14:03:42.159] INFO: Applying Add Origin to Accountability...
directus  | [14:03:42.267] INFO: Setting up first admin role...
directus  | [14:03:42.281] INFO: Adding first admin user...
directus  | [14:03:42.367] INFO: Done
directus  | [14:03:43.818] WARN: PUBLIC_URL should be a full URL
directus  | [14:03:43.843] WARN: Spatialite isn't installed. Geometry type support will be limited.
directus  | [14:03:43.925] INFO: Server started at http://0.0.0.0:8055

Les dossers /directus/database, /directus/uploads et /directus/extensions sont bien ajoutés, ainsi que le fichier /directus/database/data.db et j’arrive bien à me connecter à l’admin de Directus en me rendant à l’adresse http://localhost:1234/ en utilisant l’email [email protected] et le mot de passe d1r3ctu5 mais la base de données est vide…

Si je crée un nouvel utilisateur, quelques tables (Collections) et que je quite Docker (docker-compose down, ou avec ^c dans le cas présent), le container est détruit, la base de données avec - ce qui est normal.

Mais si, avant de quiter, je remplace le fichier de Maxime database/data.bd par mon fichier /directus/database/data.db et que je relance mon Docker, je me retrouve toujours avec une base vide !

Comment faire pour persister la base de donnée à chaque lancement, avec pour but de la partager avec le docker-compose final ?

Peut-être un futur petit cours sur Docker, @mbritto ? :wink:

Merci d’avance,
Cédric

Hello,

Normalement les fichiers présents dans tes volumes ne sont pas modifiés par docker, as tu vérifié le contenu de ton fichier /directus/database/data.db après avoir remarqué que la base de donnée était vide ?

Tu peux essayer de retirer le premier directus de tes points de montage dans les volumes :
./directus/database:/directus/database >>> ./database:/directus/database

Merci @isanforc pour ta réponse,

En effet - Je me suis emmêlé les pinceaux entre source et destination ! :sweat_smile:

En fait, je ne peux pas lire la base de données de Maxime… peut-être à cause de la version ?

Ce n’est pas bien grave dans mon cas, je sais que mon fichier est bien monté avec les modifications que je fais et je pourrais l’inclure au besoin à mon projet.

Cedric

Je crois avoir lu récemment dans la doc que ce fichier n’est utilisé que pour initialiser une base de données SQLite. Pour MySQL ou autre il est ignoré.
Info à vérifier car je pense avoir vu ça mais je ne suis pas certain à 100%