La commande db:init dans Forge¶
Ce document décrit la commande forge db:init.
Elle provisionne la base de données du projet : création de la base et du compte applicatif.
Le module correspondant est forge_mvc_entities.db_init.
1. Rôle¶
db:init prépare la base de données du projet.
Sur un backend avec serveur (MariaDB par défaut), elle crée la base et le compte applicatif, puis lui accorde des privilèges minimaux.
Elle lit la configuration du projet et utilise les identifiants d'administration (DB_ADMIN_*).
Le compte applicatif (forge_app) reste un compte runtime à privilèges DML minimaux : SELECT, INSERT, UPDATE, DELETE par défaut (ADR-033).
Quand la table mysql.user n'est pas lisible, la commande bascule en mode dégradé (CREATE USER IF NOT EXISTS).
Sur un backend sans serveur (SQLite, ADR-054), il n'y a pas de provisioning de comptes.
2. Vue d'ensemble rapide¶
| Élément | Valeur |
|---|---|
| Commande forge | forge db:init |
| Module Python | forge_mvc_entities.db_init |
| Catégorie | base de données |
| Rôle | créer la base et le compte applicatif du projet |
| Entrées | configuration du projet, identifiants DB_ADMIN_* |
| Sorties | base créée, compte applicatif, table forge_migrations |
| Fichiers touchés | aucun fichier source (provisioning en base) |
| Mode Forge | lit la config, provisionne la base |
| ADR liés | ADR-033 (privilèges DML), ADR-054 (backends BDD) |
3. Schémas UML¶
3.1 Diagramme de séquence¶
sequenceDiagram
actor Dev as Développeur
participant Forge as forge db:init
participant Config as load_db_init_config
participant Admin as connexion DB_ADMIN_*
participant Db as Base de données
Dev->>Forge: forge db:init
Forge->>Config: charge la configuration du projet
Config-->>Forge: DbInitConfig
Forge->>Admin: connexion d'administration
Admin->>Db: crée la base si absente
Admin->>Db: crée le compte applicatif (privilèges minimaux)
Admin->>Db: crée la table forge_migrations
Db-->>Dev: base provisionnée
À retenir :
- la configuration est résolue avant toute connexion ;
- la connexion utilise les identifiants d'administration ;
- le compte applicatif reçoit des privilèges DML minimaux ;
- la table
forge_migrationsest créée pour le suivi des migrations.
4. API publique / Commande¶
| Symbole | Signature | Rôle |
|---|---|---|
load_db_init_config |
load_db_init_config() -> DbInitConfig |
charge la configuration d'initialisation depuis le projet |
init_project_database |
init_project_database() -> list[str] |
crée la base et le compte applicatif |
DbInitConfig |
dataclass | configuration résolue d'initialisation |
DbInitError |
exception | configuration ou connexion invalide |
main |
main(argv: list[str] \| None = None) -> None |
point d'entrée de forge db:init |
Invocation :
| Invocation | Effet |
|---|---|
forge db:init |
provisionne la base et le compte applicatif |
5. Contextes d'utilisation¶
| Besoin | Commande / Élément |
|---|---|
| Créer la base et le compte de l'application | forge db:init |
| Provisionner un environnement neuf | forge db:init |
| Appliquer ensuite le schéma | forge db:apply |
6. Exemples d'utilisation¶
Provisionner la base au premier déploiement :
Enchaînement complet sur un environnement neuf :
7. Privilèges et mode dégradé¶
Privilèges minimaux
Le compte applicatif reçoit par défaut les seuls privilèges DML : SELECT, INSERT, UPDATE, DELETE (ADR-033).
Les opérations DDL passent par les identifiants d'administration lors des migrations.
Table mysql.user illisible
Si la table mysql.user n'est pas lisible, db:init bascule en mode dégradé et crée le compte avec CREATE USER IF NOT EXISTS.
Voir aussi¶
- La commande db:apply : application du schéma SQL.
- Les commandes migration:* : suivi des migrations.