Installation et setup local
Prérequis
Section intitulée « Prérequis »| Outil | Version minimale |
|---|---|
| Node.js | 22 (LTS, moteur ESM natif) |
| pnpm | 10.18.2 (corepack enable && corepack use pnpm@10.18.2) |
| Docker + Docker Compose | v26+ (Compose v2) |
| Git | toute version récente |
Cloner et installer
Section intitulée « Cloner et installer »git clone <repo> logmiscd logmiscorepack enablepnpm install # installe toutes les dépendances workspaceL’ordre de build est important : les packages doivent être construits avant les apps.
pnpm -r run build # build topo : packages → apps (api + fronts)Stack de développement (docker-compose)
Section intitulée « Stack de développement (docker-compose) »Le fichier docker-compose.dev.yml à la racine du monorepo démarre tous les services avec des healthchecks :
docker compose -f docker-compose.dev.yml up -d| Service | Image | Port hôte | Description |
|---|---|---|---|
| postgres | postgres:17.4-alpine | 5432 | Base principale (RLS activée) |
| redis | redis:7.4-alpine | 6379 | Sessions, cache RBAC, idempotence |
| nats | nats:2.10-alpine | 4222 / 8222 | JetStream (outbox, consumers) |
| temporal | temporalio/auto-setup:1.25.2 | 7233 | Orchestrateur de workflows |
| temporal-ui | temporalio/ui:2.31.2 | 8233 | UI Temporal (http://localhost:8233) |
| minio | minio/minio:RELEASE.2025-01-20T14-49-07Z | 9000 / 9001 | Stockage objet (docs chiffrés, WORM staging) |
| meilisearch | getmeili/meilisearch:v1.12 | 7700 | Recherche full-text |
Credentials docker-compose
Section intitulée « Credentials docker-compose »Postgres : user=pms_owner password=dev_only_change_me db=pms_devMinIO : user=pms_minio password=dev_only_change_meMeilisearch: MEILI_MASTER_KEY=dev_only_change_meVariables d’environnement
Section intitulée « Variables d’environnement »Copier le fichier d’exemple et adapter :
cp apps/api/.env.example apps/api/.envVariables obligatoires minimales pour démarrer en local :
| Variable | Description |
|---|---|
DATABASE_URL | postgres://pms_app:<pwd>@localhost:5432/pms_dev |
CONTROL_PLANE_DATABASE_URL | Pool pms_control_plane (même DB, rôle différent) |
REDIS_URL | redis://localhost:6379 |
NATS_URL | nats://localhost:4222 |
TEMPORAL_ADDRESS | localhost:7233 |
MINIO_ENDPOINT | localhost:9000 |
MINIO_ACCESS_KEY | pms_minio |
MINIO_SECRET_KEY | dev_only_change_me |
MEILI_HOST | http://localhost:7700 |
MEILI_API_KEY | dev_only_change_me |
JWT_SECRET | Chaîne ≥ 32 caractères (local: n’importe quoi) |
MFA_ENCRYPTION_KEY_BASE64 | Clé AES-256 en base64 (32 octets) — générer : node -e "console.log(require('crypto').randomBytes(32).toString('base64'))" |
CP_KEY_HASH_SECRET | Secret HMAC base64 pour les clés API control-plane |
HMAC_AUDIT_SECRET | Secret HMAC pour la chaîne d’audit NF203 |
Le module platform/config/ valide toutes ces variables via Zod au démarrage — si une variable manque ou est malformée, l’API refuse de démarrer avec un message explicite.
Migrations de base de données
Section intitulée « Migrations de base de données »Les migrations se lancent séquentiellement avec psql. Un script CI les applique dans l’ordre 0001 → 0124 :
# Exemple en local (adapter le DSN)for f in apps/api/src/migrations/*.sql; do psql "$DATABASE_URL" -f "$f"done5 rôles DB sont requis (créés par les premières migrations) :
pms_owner— propriétaire des tablespms_app— rôle runtime API (NOBYPASSRLS)pms_control_plane— rôle provisioning/entitlements/audit CPpms_fiscal_reader— lecture pour export FECpms_migration— rôle dédié aux migrations CI
Lancer l’API en développement
Section intitulée « Lancer l’API en développement »pnpm --filter @pms/api run devL’API démarre sur le port 3000 (Fastify) avec tsx --watch pour le rechargement automatique.
Points de terminaison de santé :
GET /health— livenessGET /health/ready— readiness (vérifie Postgres + Redis + NATS)
Voir la page Staging & credentials pour le détail des personas et des données de jeu.
# Tenant de démonstration minimal (idempotent)DATABASE_URL=<...> pnpm --filter @pms/api seed:tenant
# Opérateur control-plane (requis pour la console admin)CONTROL_PLANE_DATABASE_URL=<...> MFA_ENCRYPTION_KEY_BASE64=<...> \ OPERATOR_EMAIL=admin@platform.internal OPERATOR_PASSWORD=<pwd> \ CP_KEY_HASH_SECRET=<base64> \ pnpm --filter @pms/api seed:operator
# Jeu de données UAT complet (hôtel + camping + 6 comptes + réservations)DATABASE_URL=<...> MFA_ENCRYPTION_KEY_BASE64=<...> \ pnpm --filter @pms/api seed:uatVérifications post-installation
Section intitulée « Vérifications post-installation »# Typecheck tous les projets (12 en V1)pnpm -r run typecheck
# Tests unitaires APIpnpm --filter @pms/api run test
# Fitness functions (toutes CI-bloquantes)pnpm -w run lint:archpnpm -w run lint:jsonbpnpm -w run lint:rlspnpm -w run lint:payment-pcipnpm -w run lint:auditpnpm -w run lint:openapipnpm -w run lint:fiscal-accounts# ... (10 au total, voir CLAUDE.md)