Bases de données

3 types de DB provisionnables : MariaDB, PostgreSQL, Redis. Standalones (pas embarquées dans un site), attachables à N sites du même projet avec injection auto des env vars.

Types supportés

TypeImagePort interneEnv vars injectées (prefix DB_)
mariadbmariadb:113306DB_HOST, DB_PORT, DB_NAME, DB_USER, DB_PASSWORD
postgresqlpostgres:165432DB_HOST, DB_PORT, DB_NAME, DB_USER, DB_PASSWORD, DATABASE_URL
redisredis:76379DB_HOST, DB_PORT, DB_PASSWORD, REDIS_URL

Créer une DB

// Via MCP / REST
create_database({ project_id: "proj_xxxxxxxx", // optional (auto si un seul project) name: "main-db", // nom lisible type: "postgresql", // mariadb | postgresql | redis db_name: "app" // optional, default: "app" })

Retour :

{
  "db_id": "db_xxxxxxxx",
  "slug": "mon-projet-db-main-db",
  "type": "postgresql",
  "status": "running",
  "port": 20000,             // port host 127.0.0.1
  "credentials": {
    "host": "iridflow_mon-projet-db-main-db",  // via network attach
    "port_internal": 5432,
    "port_localhost": 20000,
    "db_name": "app",
    "db_user": "iridflow",
    "db_password": "generated_random",
    "root_password": "..."   // sauf redis
  },
  "secrets_file": "/opt/iridflow/mon-projet/dbs/main-db/.secrets.txt"
}
Attention
Les credentials sont retournés en clair une seule fois à la création. Note-les. Ils sont aussi persistés dans .secrets.txt (chmod 600) et récupérables via get_database.

Attacher une DB à un site

// Via MCP / REST
attach_db_to_site({ db_id: "db_xxxxxxxx", site_id: "site_xxxxxxxx", env_prefix: "DB_" // default: "DB_" })

Ce que fait Iridflow :

  1. Docker network connect : le container du site rejoint le network de la DB
  2. Écrit un docker-compose.override.yml avec les env vars + le network external
  3. Restart le container du site pour prendre en compte les env vars

Résultat : dans ton code, les variables d'env DB_HOST, DB_USER, etc. sont disponibles. Adapte ton code pour les lire :

// Node.js
const dbUrl = `postgresql://${process.env.DB_USER}:${process.env.DB_PASSWORD}@${process.env.DB_HOST}:${process.env.DB_PORT}/${process.env.DB_NAME}`;
// Python
import os DB_URL = f"postgresql://{os.environ['DB_USER']}:{os.environ['DB_PASSWORD']}@{os.environ['DB_HOST']}:{os.environ['DB_PORT']}/{os.environ['DB_NAME']}"

Attacher plusieurs DBs à un même site

Utilise un env_prefix différent pour chaque DB attachée :

attach_db_to_site({ db_id: "db_a", site_id: "site_x", env_prefix: "APP_DB_" })
attach_db_to_site({ db_id: "db_b", site_id: "site_x", env_prefix: "CACHE_" })

// Dans ton code :
// process.env.APP_DB_HOST + process.env.CACHE_HOST

Detach

detach_db_from_site({ db_id: "db_xxx", site_id: "site_xxx" })

Retire l'attachment. Note : l'override compose reste, il faut deploy_sitepour propager le retrait des env vars.

Isolation multi-tenant

  • Chaque DB appartient à un project unique (comme les sites)
  • Un client ne peut créer/attach/get que ses propres DBs
  • Les credentials ne sont visibles que par l'owner (RBAC assertCanAccessDatabase)

Backup des DBs

Quand tu fais create_backup sur un site, les DBs attachées sont dumpées automatiquement (mariadb-dump, pg_dump) et incluses dans le tarball. Voir la page Backups & Export.

Delete d'une DB

Note
Un tool delete_database n'existe pas encore en V1. Pour supprimer une DB : docker compose down du container + purge du dossier + suppression manuelle en DB SQLite. À demander à un admin.