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, DB_URL |
| postgresql | postgres:16 | 5432 | DB_HOST, DB_PORT, DB_NAME, DB_USER, DB_PASSWORD, DB_URL |
| redis | redis:7 | 6379 | DB_HOST, DB_PORT, DB_PASSWORD, DB_URL |
Attention
Ces noms portent le préfixe choisi à l'attachement,
DB_ par dĂ©faut. La variable d'URL s'appelle donc DB_URL, et non DATABASE_URL ni REDIS_URL. Une application qui attend un nom prĂ©cis, ce qui est le cas de Prisma avec DATABASE_URL, ne le trouvera pas : posez-le vous-mĂȘme par set_site_env (voir Variables d'environnement), en le composant Ă partir des variables ci-dessus.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, régénÚre l'override compose sans les env vars mortes, etcompose up le site pour appliquer.
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
delete_database({
db_id: "db_xxx",
confirm_slug: "mon-projet-db-main-db",
force: false, // true = force mĂȘme avec sites attachĂ©s
})Ce que fait Iridflow :
- Refuse par défaut si des sites y sont attachés (liste les slugs). Passe
force=truepour cascade. - Pour chaque site attaché : purge la row attachment, régénÚre l'override sans les env vars mortes,
compose up compose down -vde la DB : wipe container + volume Docker- Purge le dossier
/opt/iridflow/<projet>/dbs/<name>/ - Delete la row en DB (cascade FK sur
db_attachments)
Attention
Opération DESTRUCTIVE : le volume est wipé. Fais un backup du site attaché avant si tu veux garder les données (le
create_backup cÎté site dump les DBs attachées).