Installation de Softic.GED sur Windows Server (IIS, hors ligne)
1. Architecture cible
| Composant | Machine | Port | Service |
|---|---|---|---|
| Softic.GED.App (GED + Elsa Server + API + MCP) | Serveur applicatif | 443 | IIS, pool SofticGED-App |
| Softic.GED.Studio (designer) | Serveur applicatif | 443 | IIS, pool SofticGED-Studio |
| SQL Server | Serveur BDD | 1433 | base SofticGED (schéma ged + tables Elsa) |
| Apache Solr 9 | Serveur applicatif ou dédié | 8983 | service SofticGED-Solr (NSSM) |
| Ollama | Machine GPU (RTX 3080) | 11434 | service ou tâche planifiée |
| Blobs | Partage ou disque local | — | D:\SofticGED\blobs (sauvegardé par SofticPRT) |
2. Préparer le dossier hors ligne
Voir deploy/README-DEPLOY.txt pour la liste des binaires à télécharger sur un poste connecté.
Publication de l'application :
dotnet publish src\Softic.GED.App -c Release -r win-x64 --self-contained false -o deploy\offline\publish\App
dotnet publish src\Softic.GED.Studio -c Release -r win-x64 --self-contained false -o deploy\offline\publish\Studio
Modèles Ollama : sur le poste connecté, ollama pull bge-m3 et ollama pull qwen2.5:7b-instruct, puis copier %USERPROFILE%\.ollama\models dans offline\models.
3. Exécuter les scripts (PowerShell administrateur)
Set-ExecutionPolicy Bypass -Scope Process
cd D:\deploy
.\install-prereqs.ps1 -OfflineDir D:\offline -DataRoot D:\SofticGED
.\install-solr.ps1 -OfflineDir D:\offline -SolrHome D:\SofticGED\solr -JavaHome "C:\Program Files\Java\jdk-17"
.\create-solr-core.ps1 -SolrUrl http://localhost:8983/solr -Core softic_ged -SchemaFile D:\deploy\schema-fields.json
.\install-ollama.ps1 -OfflineDir D:\offline
.\copy-tessdata.ps1 -OfflineDir D:\offline -DataRoot D:\SofticGED
.\install-iis.ps1 -OfflineDir D:\offline -SiteRoot D:\SofticGED\www -AppHost ged.softic.local -StudioHost ged-studio.softic.local -CertThumbprint <empreinte>
Tous les scripts sont en ASCII pur (compatibles PowerShell 5.1 et 7).
4. Base de données
- Créer la base
SofticGEDet donnerdb_ownerau compte du poolSofticGED-App(ou utiliser un compte SQL dédié dans la chaîne de connexion). - Au premier démarrage, l'App applique les migrations EF Core (
ged.*) et Elsa crée ses propres tables. - Générer la migration initiale avant la publication si ce n'est pas fait :
dotnet ef migrations add Initial -p src/Softic.GED.Data -s src/Softic.GED.App -o Migrations
5. Configuration (appsettings.json de l'App)
| Clé | Rôle |
|---|---|
ConnectionStrings:Ged |
SQL Server |
Auth:Mode |
Windows en production |
Auth:RoleGroups |
groupe AD → rôle (Admin, Validateurs, DAF, …) ; les rôles sont utilisés dans les activités (role:DAF) et les règles d'accès |
Storage:RootPath |
dossier des blobs ; EncryptionKeyBase64 = clé AES-256 (32 octets base64) pour chiffrer au repos |
Solr:* |
URL, core, dimension des vecteurs |
AI:ChatProvider / AI:EmbeddingProvider |
Ollama (local) ou AzureOpenAI |
AI:Ocr:TessDataPath |
dossier des .traineddata |
Pipeline:Workers |
parallélisme du traitement (2 sur une RTX 3080 10 Go avec qwen2.5:7b) |
Workflows:SigningKey, AdminApiKey, AllowedOrigins |
sécurité Elsa ; AllowedOrigins doit contenir l'URL du Studio |
Studio:Url |
URL affichée dans la page Workflows |
Notifications:* |
SMTP et correspondance rôle → liste de diffusion |
Studio : Backend:Url = https://ged.softic.local/elsa/api. Connexion initiale admin / password (fournisseur admin d'Elsa) : changez-le dès la mise en service (voir la doc Elsa Identity, ou remplacez UseAdminUserProvider par un fournisseur d'utilisateurs).
6. Polices hors ligne (optionnel)
Le thème utilise Inter et IBM Plex Mono si elles sont disponibles, sinon Segoe UI / Consolas. Pour les servir localement : placer les .woff2 dans wwwroot/fonts et ajouter dans app.css :
@font-face { font-family: "Inter"; src: url("../fonts/Inter-Variable.woff2") format("woff2"); font-weight: 100 900; font-display: swap; }
@font-face { font-family: "IBM Plex Mono"; src: url("../fonts/IBMPlexMono-Regular.woff2") format("woff2"); font-display: swap; }
7. Figer les versions NuGet
Après le premier dotnet restore sur un poste connecté :
dotnet list src\Softic.GED.App package --include-transitive:$false
Reporter les versions résolues dans Directory.Packages.props à la place des 8.* / 3.* / 9.*, puis alimenter un flux NuGet local (nuget.config → dossier offline\nuget) avec dotnet nuget push ou une copie du cache %USERPROFILE%\.nuget\packages.
8. Vérifications après installation
https://ged.softic.local/: page d'accueil (authentification Windows automatique).- Déposer un PDF dans Documents : la colonne Traitement passe à ✓ ; la fiche affiche le résumé IA.
https://ged.softic.local/api/search?q=facture: JSON de résultats.https://ged-studio.softic.local/: designer ; créer un workflow Document déposé → Attendre validation → Changer l'état, le publier, déposer un document : la tâche apparaît dans Validations.- Solr :
http://localhost:8983/solr/#/softic_ged/query; Ollama :http://127.0.0.1:11434/api/tags.
9. Exemple de workflow « Facture »
[Document déposé (type=FACTURE)]
│
▼
[Lire le document] ──► Amount
│
▼
<Amount > 10000 ?>
oui │ │ non
▼ ▼
[Attendre validation [Attendre validation
role:DAF] role:Comptabilite]
Approuvé│Rejeté Approuvé│Rejeté
▼ ▼
[Changer l'état = Validated] [Changer l'état = Rejected] → [Notifier user:{{ CreatedBy }}]
▼
[Déplacer vers /Comptabilite/Factures/{{ "now" | date: "%Y" }}]
▼
[Appliquer rétention 10 ans]
Les expressions Liquid/JavaScript/C# d'Elsa sont utilisables dans chaque champ (ex. {{ Variables.DocumentId }}).