Démonstration & évaluation
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 :
- Seed (initialisation) : remplir l'organisation de démonstration avec le jeu de données d'exemple et un compte administrateur connu.
- Reset (réinitialisation) : vider ou supprimer l'organisation de démonstration ensuite, sans toucher à quoi que ce soit d'autre sur l'instance.
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 :
- Une instance Vaks PM opérationnelle, déployée soit sur une seule machine (idéal pour l'évaluation), soit dans une topologie multi-hôtes à haute disponibilité. Pour en mettre une en place au préalable, voir les guides de déploiement : déploiement Docker Swarm ou déploiement Kubernetes.
- Le service
apiqui s'exécute dans un conteneur. Les scripts de seed s'exécutent à l'intérieur de ce conteneur, où les paramètres de connexion à la base de données sont déjà disponibles. - Un accès shell au conteneur
api: directement avecdocker execsur une seule machine, ou via SSH (Secure Shell, un protocole d'administration à distance chiffré) vers l'hôte qui exécute le conteneur dans une installation multi-hôtes.
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 :
| Script | Rôle |
|---|---|
seed-demo.js | Construit (ou reconstruit) le jeu de données de démonstration. Idempotent : purge puis reconstruit. |
reset-demo.js | Vide 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.
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!"}'
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ément | Détail |
|---|---|
| Organisation | Une seule entreprise de services informatiques de démonstration, isolée dans son propre tenant. |
| Utilisateurs | Une vingtaine de comptes (personnel plus un administrateur), tous avec le mot de passe Demo1234!. |
| Équipes | Plusieurs équipes (par exemple Infrastructure, Développeurs, Sécurité informatique, RH, Commercial, Gestion de projet, Direction), avec leurs leads d'équipe. |
| Compétences | Un catalogue de compétences peuplé, avec des niveaux par personne et une couverture par équipe. |
| Clients | Une poignée de clients et de contacts, rattachés à des projets. |
| Projets | Plusieurs projets répartis sur les statuts du cycle de vie. |
| Tâches | Des dizaines de tâches datées avec estimations, priorités, jalons, et un groupe de tâches avec sous-tâches. |
| Dépendances | Des liens Finish-to-Start (fin-à-début) qui pilotent le planning de Gantt et le chemin critique. |
| Temps & charge | Des saisies de temps (y compris heures supplémentaires et temps facturable), des allocations de charge et des entrées d'absence. |
| Collaboration | Des commentaires avec @mentions. |
| Demandes de compétence | Des 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és | Un pays par défaut plus des surcharges de pays par utilisateur, pour illustrer les avertissements de capacité. |
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.
<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é.