Aller au contenu

Installation et setup local

OutilVersion minimale
Node.js22 (LTS, moteur ESM natif)
pnpm10.18.2 (corepack enable && corepack use pnpm@10.18.2)
Docker + Docker Composev26+ (Compose v2)
Gittoute version récente
Fenêtre de terminal
git clone <repo> logmis
cd logmis
corepack enable
pnpm install # installe toutes les dépendances workspace

L’ordre de build est important : les packages doivent être construits avant les apps.

Fenêtre de terminal
pnpm -r run build # build topo : packages → apps (api + fronts)

Le fichier docker-compose.dev.yml à la racine du monorepo démarre tous les services avec des healthchecks :

Fenêtre de terminal
docker compose -f docker-compose.dev.yml up -d
ServiceImagePort hôteDescription
postgrespostgres:17.4-alpine5432Base principale (RLS activée)
redisredis:7.4-alpine6379Sessions, cache RBAC, idempotence
natsnats:2.10-alpine4222 / 8222JetStream (outbox, consumers)
temporaltemporalio/auto-setup:1.25.27233Orchestrateur de workflows
temporal-uitemporalio/ui:2.31.28233UI Temporal (http://localhost:8233)
miniominio/minio:RELEASE.2025-01-20T14-49-07Z9000 / 9001Stockage objet (docs chiffrés, WORM staging)
meilisearchgetmeili/meilisearch:v1.127700Recherche full-text
Postgres : user=pms_owner password=dev_only_change_me db=pms_dev
MinIO : user=pms_minio password=dev_only_change_me
Meilisearch: MEILI_MASTER_KEY=dev_only_change_me

Copier le fichier d’exemple et adapter :

Fenêtre de terminal
cp apps/api/.env.example apps/api/.env

Variables obligatoires minimales pour démarrer en local :

VariableDescription
DATABASE_URLpostgres://pms_app:<pwd>@localhost:5432/pms_dev
CONTROL_PLANE_DATABASE_URLPool pms_control_plane (même DB, rôle différent)
REDIS_URLredis://localhost:6379
NATS_URLnats://localhost:4222
TEMPORAL_ADDRESSlocalhost:7233
MINIO_ENDPOINTlocalhost:9000
MINIO_ACCESS_KEYpms_minio
MINIO_SECRET_KEYdev_only_change_me
MEILI_HOSThttp://localhost:7700
MEILI_API_KEYdev_only_change_me
JWT_SECRETChaîne ≥ 32 caractères (local: n’importe quoi)
MFA_ENCRYPTION_KEY_BASE64Clé AES-256 en base64 (32 octets) — générer : node -e "console.log(require('crypto').randomBytes(32).toString('base64'))"
CP_KEY_HASH_SECRETSecret HMAC base64 pour les clés API control-plane
HMAC_AUDIT_SECRETSecret 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.

Les migrations se lancent séquentiellement avec psql. Un script CI les applique dans l’ordre 0001 → 0124 :

Fenêtre de terminal
# Exemple en local (adapter le DSN)
for f in apps/api/src/migrations/*.sql; do
psql "$DATABASE_URL" -f "$f"
done

5 rôles DB sont requis (créés par les premières migrations) :

  • pms_owner — propriétaire des tables
  • pms_app — rôle runtime API (NOBYPASSRLS)
  • pms_control_plane — rôle provisioning/entitlements/audit CP
  • pms_fiscal_reader — lecture pour export FEC
  • pms_migration — rôle dédié aux migrations CI
Fenêtre de terminal
pnpm --filter @pms/api run dev

L’API démarre sur le port 3000 (Fastify) avec tsx --watch pour le rechargement automatique.

Points de terminaison de santé :

  • GET /health — liveness
  • GET /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.

Fenêtre de terminal
# 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:uat
Fenêtre de terminal
# Typecheck tous les projets (12 en V1)
pnpm -r run typecheck
# Tests unitaires API
pnpm --filter @pms/api run test
# Fitness functions (toutes CI-bloquantes)
pnpm -w run lint:arch
pnpm -w run lint:jsonb
pnpm -w run lint:rls
pnpm -w run lint:payment-pci
pnpm -w run lint:audit
pnpm -w run lint:openapi
pnpm -w run lint:fiscal-accounts
# ... (10 au total, voir CLAUDE.md)