Démonstration & évaluation

Vaks PM · Données de démonstration & évaluation · juin 2026

Objet de ce guide. Ce document explique comment préparer un jeu de données de démonstration réaliste sur une instance Vaks PM déjà en service, afin qu'un évaluateur puisse se connecter et essayer l'application sur des projets, des tâches et des personnes représentatifs. Il décrit ensuite comment tout effacer proprement une fois l'évaluation terminée. Il s'adresse à un administrateur système qui découvre le produit et reste entièrement autonome. Il ne couvre pas l'installation de l'application elle-même ; pour cela, voir les guides de déploiement liés dans la section Prérequis.

Vue d'ensemble

Vaks PM est une application web multi-utilisateurs de gestion de projet (PM, de l'anglais project management) qui s'exécute entièrement sur une infrastructure contrôlée par l'organisation (on-premise, c'est-à-dire hébergée chez le client). Pour permettre à quelqu'un de l'évaluer sans saisir de données à la main, le produit est livré avec un seed : un jeu de données d'amorçage qui remplit une base de données avec le portrait crédible d'une entreprise en activité, à savoir équipes, personnel, catalogue de compétences, clients et un portefeuille de projets en cours avec leurs tâches, plannings, saisies de temps et charge de travail.

La démonstration entière vit à l'intérieur d'un unique tenant (locataire) dédié, c'est-à-dire une organisation isolée servie par l'instance, où chaque tenant possède sa propre base de données. Grâce à cette isolation, deux opérations couvrent l'ensemble du cycle de vie :

Le seed est idempotent (il peut être exécuté à répétition sans créer de doublons : chaque exécution purge puis reconstruit), de sorte qu'une démonstration peut être rafraîchie à tout moment et réinitialisée sans risque pour les autres données.

Prérequis

Le seed ne déploie pas l'application ; il se contente de remplir la base de données d'une instance déjà en service. Le point de départ attendu est :

La chaîne de connexion à la base de données (DATABASE_URL) est lue à l'exécution depuis un secret du cluster, jamais saisie en clair. Sur Docker Swarm il s'agit du secret database_url ; dans d'autres environnements elle est fournie via l'environnement. Les commandes ci-dessous la lisent depuis là.

Dans quel mode suis-je, et que faut-il saisir exactement ?

Deux axes déterminent les étapes exactes. Ils sont indépendants — choisissez votre ligne dans chacun.

AxeValeurs & ce qui change pour la démo
Mode de tenancy
(DEPLOYMENT_MODE)
Mutualisé (pooled) (recommandé pour une démo) — chaque organisation vit dans sa propre base et est résolue depuis le nom d'hôte de la requête. La démo tourne comme son propre tenant : une base séparée <dbName>_demo, atteinte au sous-domaine demo.<baseDomain>, proprement isolée de toute organisation réelle.
Dédié (dedicated) — l'instance sert une seule organisation depuis une base globale unique, et il n'y a pas d'endroit propre pour ajouter une démo : la seeder greffe une deuxième organisation dans cette base partagée, atteignable seulement en se connectant avec l'e-mail de l'admin de démo, ce qui prête à confusion à côté d'une org réelle. Pour évaluer avec des données de démo, déployer plutôt une instance mutualisée (pooled).
Topologie Mono-hôte vs haute disponibilité (HA) ne change rien au jeu de données ni à la connexion — seulement la façon d'atteindre le conteneur api : docker exec en local sur un mono-hôte, ou via SSH vers l'hôte applicatif qui l'exécute en HA. La HA peut être dans l'un ou l'autre mode de tenancy.

La démo utilise toujours les mêmes valeurs fixes : slug d'organisation demo, administrateur admin@vaks-demo.local, mot de passe Demo1234! (partagé par tous les comptes initialisés). Les comptes du seed arrivent prêts à l'emploi (chacun détient déjà un siège), donc la démo fonctionne dès son chargement — rien n'a à être attribué à la main.

Initialiser l'organisation de démonstration

Les scripts de seed sont livrés avec l'image api et sont présents dans /app/api/prisma/ à l'intérieur du conteneur. Deux d'entre eux sont exécutés directement :

ScriptRôle
seed-demo.jsConstruit (ou reconstruit) le jeu de données de démonstration. Idempotent : purge puis reconstruit.
reset-demo.jsVide l'organisation de démonstration, ou la supprime entièrement (voir Tout effacer).

Option A — seed au déploiement (depuis le manifeste, pooled)

La façon la plus propre d'avoir une démo prête à l'instant où l'instance démarre est de la déclarer dans le manifeste de déploiement (infra/cluster.json), pour que l'orchestrateur la provisionne et l'initialise pendant bash out/deploy-ssh.sh — aucune étape manuelle ensuite. Ajouter un tenant au tableau tenants portant un champ "seed" :

"tenants": [
  {
    "slug": "demo",
    "domain": "demo.<baseDomain>",
    "seed": "demo"
  }
]

Au déploiement, l'orchestrateur lance provision-tenant.js demo --seed demo, qui crée la base tenant <dbName>_demo, applique le schéma et charge le jeu de données de démo. Le champ "seed" est la seule valeur spécifique à la démo ; tous les autres champs sont une entrée de tenant ordinaire (voir Provisionner les tenants pour le schéma complet). Ce chemin est pour la tenancy mutualisée (pooled) — la démo s'atteint ensuite à demo.<baseDomain>. Pour ajouter une démo à une instance mutualisée déjà en marche, utiliser plutôt le chemin post-déploiement ci-dessous.

Domaine vs identifiant de connexion — deux choses différentes. Le domain (par exemple demo.vaks.fr) est le nom d'hôte que vous ouvrez dans le navigateur ; il doit résoudre en DNS vers le cluster et disposer d'un certificat TLS. L'identifiant de connexion est un compte fixe que le seed de démo crée toujours — admin@vaks-demo.local / Demo1234! — où l'e-mail est un simple identifiant de compte, pas un nom d'hôte (le .local ne résout rien). Un adminEmail sur l'entrée de tenant est ignoré quand "seed": "demo" est défini, car le seed de démo code en dur son propre administrateur. Donc : ouvrir https://demo.vaks.fr, se connecter comme admin@vaks-demo.local.

Option B — post-déploiement, tenancy mutualisée (une base de démo dédiée)

Lorsque plusieurs organisations partagent l'instance, la démonstration obtient sa propre base de données. Deux étapes : provisionner le tenant, puis initialiser sa base de données. C'est l'équivalent manuel de l'Option A, pour ajouter une démo après que l'instance est déjà en marche. Dans une installation multi-hôtes (HA), le conteneur api s'exécute généralement sur un hôte applicatif plutôt que sur l'hôte manager ; l'atteindre via SSH en utilisant les paramètres d'accès conservés dans le fichier d'environnement local.

Mutualisé uniquement. Ce chemin suppose que l'instance tourne en tenancy mutualisée (pooled), pour que la démo obtienne sa propre base et son sous-domaine. Sur une instance dédiée qui sert déjà une organisation réelle, ne pas seeder de démo — cela déposerait une deuxième organisation dans la base partagée, sans moyen propre de l'atteindre ni de la supprimer. Utiliser plutôt un déploiement mutualisé pour l'évaluation.

Étape 1, provisionner le tenant de démonstration. Ceci crée la base de données <dbName>_demo, applique le schéma et amorce le compte administrateur :

source .env.local
# resolve the api container id on the application host
CID=$(ssh -i "$SSH_KEY" "$VM_USER@$APP_HOST" \
  "echo '$VM_PASS' | sudo -S docker ps -q -f name=vaks-pm_api | head -1")

ssh -i "$SSH_KEY" "$VM_USER@$APP_HOST" "echo '$VM_PASS' | sudo -S \
  docker exec $CID sh -c 'export DATABASE_URL=\$(cat /run/secrets/database_url) \
  && cd /app/api && node prisma/provision-tenant.js demo admin@vaks-demo.local'"

Étape 2, initialiser la base de données de démonstration. Faire pointer DATABASE_URL vers la base _demo, puis exécuter le seed :

ssh -i "$SSH_KEY" "$VM_USER@$APP_HOST" "echo '$VM_PASS' | sudo -S \
  docker exec $CID sh -c '
    BASE=\$(cat /run/secrets/database_url)
    export DATABASE_URL=\$(node -e \"const u=new URL(process.argv[1]);u.pathname=u.pathname+\\\"_demo\\\";console.log(u.toString())\" \"\$BASE\")
    cd /app/api && node prisma/seed-demo.js'"
$APP_HOST, $SSH_KEY, $VM_USER et $VM_PASS sont des espaces réservés pour l'adresse de l'hôte, le chemin de la clé SSH et les identifiants de connexion/sudo conservés dans le fichier d'environnement local de l'administrateur. Ce fichier n'est jamais versionné dans le gestionnaire de sources.

Se connecter et vérifier

Tous les comptes initialisés partagent le mot de passe Demo1234!. L'administrateur créé au moment de l'initialisation est admin@vaks-demo.local.

Changer le mot de passe par défaut avant d'exposer la démonstration. Les identifiants du seed (admin@vaks-demo.local / Demo1234!) sont publics et destinés uniquement à une évaluation jetable. Si l'instance est joignable au-delà d'un environnement fermé, se connecter une fois et changer le mot de passe, ou désactiver le compte, immédiatement. Ne jamais réutiliser ces identifiants pour autre chose que la démonstration.

La connexion se fait sur le sous-domaine du tenant de démonstration (par exemple demo.<baseDomain>) ; le point d'entrée partagé résout le tenant depuis l'en-tête Host de la requête. L'identifiant est toujours admin@vaks-demo.local / Demo1234! — l'e-mail est un identifiant de compte, pas le nom d'hôte. Une connexion réussie renvoie un jeton d'accès et les projets de la démonstration sont visibles. Une vérification rapide en ligne de commande :

# resolve the demo subdomain to the entry point and sign in → expect a token
curl -sk --resolve demo.<domain>:443:<entry-point-ip> \
  -X POST https://demo.<domain>/api/v1/auth/login \
  -H 'Content-Type: application/json' \
  -d '{"email":"admin@vaks-demo.local","password":"Demo1234!"}'
Résultat attendu : un accessToken dans la réponse. Le présenter ensuite dans un en-tête Authorization: Bearer <token> sur GET /api/v1/projects liste alors les projets de la démonstration.

Contenu du jeu de données

Le seed simule une entreprise de services informatiques (IT, de l'anglais Information Technology) avec des équipes, du personnel et un portefeuille de projets réalistes. Il exerce les principaux domaines du produit afin qu'un évaluateur puisse explorer un tableau Kanban (tableau de tâches avec colonnes de statut), un diagramme de Gantt (planning avec dépendances et chemin critique), le suivi du temps, la charge de travail et la capacité, le catalogue de compétences, les clients et le cycle de vie complet d'un projet. Le contenu est en anglais et reste confiné au tenant de démonstration.

ÉlémentDétail
OrganisationUne seule entreprise de services informatiques de démonstration, isolée dans son propre tenant.
UtilisateursUne vingtaine de comptes (personnel plus un administrateur), tous avec le mot de passe Demo1234!.
ÉquipesPlusieurs équipes (par exemple Infrastructure, Développeurs, Sécurité informatique, RH, Commercial, Gestion de projet, Direction), avec leurs leads d'équipe.
CompétencesUn catalogue de compétences peuplé, avec des niveaux par personne et une couverture par équipe.
ClientsUne poignée de clients et de contacts, rattachés à des projets.
ProjetsPlusieurs projets répartis sur les statuts du cycle de vie.
TâchesDes dizaines de tâches datées avec estimations, priorités, jalons, et un groupe de tâches avec sous-tâches.
DépendancesDes liens Finish-to-Start (fin-à-début) qui pilotent le planning de Gantt et le chemin critique.
Temps & chargeDes saisies de temps (y compris heures supplémentaires et temps facturable), des allocations de charge et des entrées d'absence.
CollaborationDes commentaires avec @mentions.
Demandes de compétenceDes demandes d'un chef de projet vers un lead d'équipe, à travers les états ouverte / accusée de réception / résolue.
Jours fériésUn pays par défaut plus des surcharges de pays par utilisateur, pour illustrer les avertissements de capacité.
Quelques comptes portent des rôles d'organisation distincts afin de pouvoir observer le contrôle d'accès basé sur les rôles : un portfolio manager (gestionnaire de portefeuille) et un report viewer (lecteur de rapports), par exemple, aux côtés de l'administrateur et des membres standard. Tous partagent le même mot de passe de démonstration.

Tout effacer

Lorsque l'évaluation est terminée, reset-demo.js supprime le contenu de la démonstration. Il agit strictement sur l'organisation de démonstration ; aucune autre organisation de l'instance n'est affectée.

# soft reset: empty the org (content + users), keep the empty organization
docker exec <api-cid> sh -c 'export DATABASE_URL=… && cd /app/api && node prisma/reset-demo.js'

# hard reset: also remove the organization record
docker exec <api-cid> sh -c 'export DATABASE_URL=… && cd /app/api && node prisma/reset-demo.js --hard'

Pour ré-initialiser ensuite, réexécuter seed-demo.js ; il est idempotent.

En mode pooled, le tenant de démonstration est une base de données distincte ; la manière la plus propre de s'en débarrasser est donc de supprimer entièrement cette base de données et, si une démonstration redevient nécessaire plus tard, de la re-provisionner et de la ré-initialiser. Ceci ne comporte aucun risque pour les autres organisations de l'instance.
La réinitialisation supprime les données définitivement. S'assurer que la cible est bien l'organisation de démonstration (ou la base de données <dbName>_demo en mode pooled) et non une vraie organisation avant de lancer une réinitialisation complète (hard reset) ou de supprimer une base de données.

Pour aller plus loin

Une fois la démonstration initialisée et un administrateur connecté, l'application est prête à être explorée. Pour comprendre ce que fait chaque domaine et comment mener une visite guidée pertinente (Kanban, Gantt, suivi du temps, charge de travail, compétences, clients, reporting et le reste), voir le guide produit. Pour l'exploitation de l'instance qui sous-tend la démonstration, voir exploitation et sécurité.


Voir aussi : Guide produit · Déploiement Docker Swarm · Déploiement Kubernetes · Exploitation · Sécurité · Accueil de la documentation