Skip to content

Déploiement — Superviseur ​

Scripts et ressources pour compiler, packager et générer l'installateur Windows de la solution.

Prérequis sur la machine de build ​

OutilRequisNotes
.NET 9 SDKOuiPour compiler backend, client, manager
Node.js 20.19+ ou 22.12+OuiPour compiler le frontend Vue (voir engines dans vue/package.json)
Inno Setup 6OuiPour générer l'installateur .exe
InternetRecommandéPour télécharger WebView2 automatiquement

Inno Setup 6 : C:\Program Files (x86)\Inno Setup 6\ ou %LocalAppData%\Programs\Inno Setup 6\

Lancer le build ​

powershell
cd deployment
.\build-all.ps1

Options :

OptionEffet
-SkipFrontendSaute la construction Vue, utile si le frontend est inchangé
-SkipWebView2Saute le téléchargement du runtime WebView2 (~150 Mo)
-SkipPostgreSQLSaute la copie des binaires PostgreSQL portables
-RequireSigningRefuse de produire un installateur non signé, et sort avant toute compilation si aucun certificat n'est configuré

Sans -RequireSigning, un build sans certificat affiche un avertissement puis se termine par « SUCCESS » : un livrable non signé est alors facile à ne pas remarquer.

Étapes du build ​

#ÉtapeDescription
0Contrôles de déploiement58 contrôles Pester de deployment.tests.ps1 — cohérence des versions entre app.config.json, les manifestes et le changelog, remplacement des marqueurs de setup.iss, dépendance du service à PostgreSQL, installation à l'échelle de la machine. Un échec interrompt le build ; Pester absent, l'étape est ignorée
1Génération setup.issDepuis app.config.json via generate-setup.ps1
2NettoyageSuppression de staging/ et Installer/
3CompilationBackend, Client, Manager (autonomes), Frontend (npm run build) ; signature Authenticode horodatée des binaires et de l'installateur si un certificat est configuré
3bWebView2Téléchargement du runtime Standalone depuis Microsoft (optionnel, ~150 Mo)
3cPostgreSQLCopie des binaires PostgreSQL portables dans staging/pgsql/
3dOutil de licencesPublication en fichier unique dans staging/license-tool/ — hors installateur
4InstallateurGénération via Inno Setup → Installer/Superviseur-Setup-<version>.exe
5RésuméTailles des artefacts produits

Mécanismes non évidents ​

Le build réécrit les manifestes de version ​

Avant toute compilation, build-all.ps1 lit AppVersion dans app.config.json et réaligne en place les fichiers qui portent une version en dur :

FichierChamp réécrit
vue/package.json"version"
dotnet/backend/backend.csproj<Version>
dotnet/manager/ServiceManager.csproj<Version>

Ces manifestes ne commandent rien — la ligne de publication passe -p:Version — mais les contrôles de l'étape 0 les confrontent à app.config.json. Le réalignement évite qu'une version oubliée dans l'un d'eux arrête le build. Corollaire : ces trois fichiers ne s'éditent pas à la main pour changer de version, app.config.json faisant seul foi, et un build laisse un dépôt modifié.

La signature de code est pilotée par variables d'environnement ​

VariableEffet
SUPERVISEUR_CODESIGN_THUMBPRINTEmpreinte SHA-1 d'un certificat du magasin — signtool /sha1
SUPERVISEUR_CODESIGN_PFXChemin d'un fichier .pfx — signtool /f
SUPERVISEUR_CODESIGN_PFX_PASSWORDMot de passe du .pfx, facultatif

Horodatage RFC 3161 systématique, empreinte SHA-256. signtool.exe est cherché dans le PATH, puis dans le SDK Windows 10/11.

Le runtime C de Visual C++ est embarqué à la main ​

La distribution PostgreSQL ne livre pas le runtime dont tous ses exécutables dépendent. Le build le prend dans le dossier redistribuable de Visual Studio et le dépose auprès des binaires ; un contrôle de l'étape 0 vérifie sa présence.

Artefacts produits ​

staging/
├── backend/        Superviseur-Service.exe (autonome)
│                   app.config.json, appsettings*.json, wwwroot/
├── client/         Superviseur.exe (autonome), wwwroot/
├── manager/        Superviseur-ServiceManager.exe (autonome)
├── license-tool/   Superviseur-Licences.exe — INTERNE, jamais livré
├── pgsql/          Binaires PostgreSQL portables (si non sauté)
└── webview2/       MicrosoftEdgeWebView2RuntimeInstallerX64.exe (si téléchargé)

Installer/
└── Superviseur-Setup-<version>.exe   ← Installateur final livrable

staging/ et Installer/ sont gitignorés.

Ce que fait l'installateur chez le client ​

  1. Fermeture automatique des instances en cours (taskkill /f, arrêt service)
  2. Copie des fichiers dans C:\Program Files\Superviseur\
  3. Installation silencieuse de WebView2 (si embarqué dans l'installateur)
  4. PostgreSQL embarqué : initialisation de la base (initdb), enregistrement du service Superviseur-Service-PostgreSQL, création du rôle applicatif et de la base (mot de passe dérivé du secret applicatif). Une mise à jour préserve la base existante.
  5. Certificat HTTPS : génération d'un certificat auto-signé (CN=localhost), installation dans le magasin racine de confiance de la machine (pour un accès navigateur local), et écriture de son chemin/mot de passe dans appsettings.Crypto.prod.json (provision-https-cert.ps1). Le client de bureau accorde par ailleurs sa confiance au certificat directement pour la boucle locale (WebView2), sans dépendre du magasin racine. En cas d'échec, le service retombe sur un certificat auto-signé généré en mémoire.
  6. Création du service Windows Superviseur-Service (démarrage auto, redémarrage auto sur crash)
  7. Raccourcis bureau et menu Démarrer
  8. Registre : démarrage automatique du gestionnaire à l'ouverture de session

Données utilisateur — jamais modifiées par l'installateur ​

Stockées dans C:\ProgramData\Superviseur\ :

  • pgdata/ — cluster PostgreSQL embarqué (centrales, utilisateurs, logs, plans)
  • logs/ — journaux du service
  • Uploads/ — images de plans interactifs

Une mise à jour par-dessus une installation existante préserve toutes ces données.

Désinstallation ​

Panneau de configuration → Programmes → Superviseur → Désinstaller

L'installateur ferme l'application, supprime le service et les fichiers programme. C:\ProgramData\Superviseur\ est conservé pour permettre une réinstallation sans perte.

Fichiers de configuration ​

FichierRôleVersionné
app.config.jsonNoms, version, éditeur et contacts, service Windows, port, configuration de l'installateur, marques, paramètres PostgreSQL, chemins de donnéesOui
backend/appsettings.jsonConfig runtime ASP.NET (Jwt, Auth, Https, logs, polling)Oui
backend/appsettings.Crypto.prod.jsonClés revendeurs. Le SuperAdminPassword en est neutralisé au staging : il est saisi à l'installation. Scellé au premier démarrage en appsettings.Crypto.prod.protected (DPAPI, portée machine) puis suppriméNon (gitignored)

appsettings.Crypto.prod.json doit être présent dans backend/ au moment du dotnet publish — il est inclus automatiquement dans le build.

Le SDK .NET embarque tous les appsettings*.json à la publication : build-all.ps1 retire donc explicitement du staging tout fichier appsettings.Crypto.* autre que le prod, les fichiers dev portant de vraies clés revendeurs en clair.

Contraintes actives ​

ContrainteConséquence si elle est ignorée
setup.iss est généré, jamais édité à la mainLe build suivant écrase la modification
setup.iss, staging/ et Installer/ ne sont pas versionnés—
Aucun secret applicatif n'entre dans l'installateurLe mot de passe est saisi à la première installation et propagé de là au rôle PostgreSQL
C:\ProgramData\Superviseur\ survit à une mise à jour comme à une désinstallationLa base, les journaux et les téléversements sont conservés pour permettre une réinstallation sans perte
Trois fichiers de version sont réécrits par le buildvue/package.json, backend.csproj et ServiceManager.csproj : un build laisse un dépôt modifié
Inno Setup 6 est cherché dans C:\Program Files (x86)\Inno Setup 6\ ou %LocalAppData%\Programs\Inno Setup 6\L'étape 4 échoue si l'outil est ailleurs

Modifier le nom ou la version ​

Éditer app.config.json à la racine du projet, puis relancer build-all.ps1. Le setup.iss est régénéré automatiquement à chaque build via generate-setup.ps1.

Documentation Technique