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à.

Si l'instance sert plusieurs organisations

Une instance peut fonctionner dans l'un de deux modes de tenancy (gestion des locataires). Le mode dedicated (dédié) héberge une seule organisation ; la démonstration cible simplement cette unique base de données. Le mode pooled (mutualisé) héberge plusieurs organisations sur une même instance, chacune résolue depuis son nom d'hôte et isolée dans sa propre base de données. Dans ce mode, la démonstration obtient sa propre base de données (nommée <dbName>_demo), qui doit être provisionnée avant l'initialisation. La section d'initialisation couvre les deux cas.

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).

Machine unique : organisation dédiée

Avec une seule organisation sur l'instance, le seed cible l'unique base de données. Repérer d'abord le conteneur api, puis exécuter le seed à l'intérieur :

# find the api container id
docker ps | grep api

# seed (DATABASE_URL is read from the cluster secret)
docker exec <api-cid> sh -c 'export DATABASE_URL=$(cat /run/secrets/database_url) \
  && cd /app/api && node prisma/seed-demo.js'

Le script affiche un résumé au format JSON (JavaScript Object Notation, un format texte structuré) : l'organisation, les comptes créés et des compteurs par projet.

Mode pooled : une base de données de démonstration 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. Dans une installation multi-hôtes, 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.

É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.

En mode dedicated, la connexion est globale sur le nom d'hôte de l'instance. En mode pooled, la connexion se fait sur le sous-domaine du tenant de démonstration (par exemple demo.<domain>) ; le point d'entrée partagé résout le tenant depuis l'en-tête Host de la requê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 en mode pooled :

# 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