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
| Type | Image | Port interne | Env vars injectées (prefix DB_) |
|---|---|---|---|
| mariadb | mariadb:11 | 3306 | DB_HOST, DB_PORT, DB_NAME, DB_USER, DB_PASSWORD |
| postgresql | postgres:16 | 5432 | DB_HOST, DB_PORT, DB_NAME, DB_USER, DB_PASSWORD, DATABASE_URL |
| redis | redis:7 | 6379 | DB_HOST, DB_PORT, DB_PASSWORD, REDIS_URL |
Créer une DB
// Via MCP / RESTcreate_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 / RESTattach_db_to_site({ db_id: "db_xxxxxxxx", site_id: "site_xxxxxxxx", env_prefix: "DB_" // default: "DB_" })
Ce que fait Iridflow :
- Docker
network connect: le container du site rejoint le network de la DB - Écrit un
docker-compose.override.ymlavec les env vars + le network external - 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.jsconst dbUrl = `postgresql://${process.env.DB_USER}:${process.env.DB_PASSWORD}@${process.env.DB_HOST}:${process.env.DB_PORT}/${process.env.DB_NAME}`;
// Pythonimport 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_HOSTDetach
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.