Comment configurer Doconut pour les déploiements de serveurs distribués
← Back to Blog••4 min read

Comment configurer Doconut pour les déploiements de serveurs distribués

Utiliser Doconut dans la configuration de serveur distribué

Lorsque vous devez servir des PDF, des fichiers Office, des dessins CAD ou des images depuis un cluster de nœuds ASP.NET Core, le mode distribué de Doconut permet à chaque nœud de lire les mêmes artefacts de page depuis un emplacement partagé. Le résultat est un visualiseur horizontalement évolutif et sécurisé qui fonctionne derrière un équilibreur de charge sans sessions persistantes.

Pourquoi le mode distribué est important

  • Scalabilité – Chaque nœud peut publier des pages vers un partage UNC ou cloud ; tout autre nœud peut les servir instantanément.
  • Sécurité – Les artefacts sont stockés chiffrés dans le dossier partagé ; le visualiseur valide chaque requête contre le jeton de session ASP.NET.
  • Aucune dépendance à Office – Le plugin Converter s’exécute côté serveur, convertissant Word, Excel, PowerPoint, CAD et images en PDF ou images sans installer Microsoft Office.

Ces caractéristiques permettent aux DMS, CRM ou portails d’e‑learning d’entreprise de conserver le traitement des documents dans le back‑end .NET tout en évoluant vers des dizaines de conteneurs.

Stockage partagé pour le mode distribué

En mode distribué, Doconut s’attend à ce que les artefacts de page (pages PDF, tuiles d’image, etc.) soient écrits dans un emplacement de stockage accessible par chaque nœud de la ferme – un partage réseau, un conteneur Azure Blob, un bucket S3 ou tout autre stockage partagé pris en charge par la fonctionnalité Progressive Cloud Publishing. Le visualiseur recherche automatiquement le dossier d’artefacts correspondant au jeton de sécurité par document, ainsi aucun code supplémentaire n’est requis au-delà de s’assurer que tous les nœuds disposent des mêmes droits de lecture‑écriture sur le stockage choisi.

Astuce : Utilisez le même chemin UNC (par ex., \\fileserver\doconut) ou URL cloud dans la configuration de chaque instance et maintenez les autorisations du dossier cohérentes. Le comportement UsePerTokenSubfolders est activé par défaut et isole les pages de chaque document.

Enregistrement de Doconut et du middleware de session

Doconut s’appuie sur l’état de session ASP.NET Core pour la sécurité par document. Un cache distribué n’est requis que lorsque vous utilisez un projet minimal‑API ; MVC ou Razor Pages en ajoutent déjà un.

builder.Services.AddDoconut(options =>
{
    options.LicensePath = "Doconut.Viewer.lic";
});

builder.Services.AddDistributedMemoryCache(); // la session nécessite un cache
builder.Services.AddSession();                 // Doconut valide par rapport à la session

app.UseSession();               // Doit être exécuté avant UseDoconut()
app.UseDoconutResources();      // Enregistre les ressources statiques du viewer
app.Map("/doconut", branch => branch.UseDoconut());

Chemins personnalisés (facultatif)

Si une autre route entre en conflit avec /doconut, modifiez les chemins une seule fois et maintenez le client BasePath synchronisé :

builder.Services.AddDoconut(options =>
{
    options.MiddlewarePath = "/docs-engine";
    options.ResourcesPath  = "/docs-assets";
});
app.UseDoconutResources();
app.Map("/docs-engine", branch => branch.UseDoconut());

Ne préfixez jamais un slash au début de MiddlewarePath ou ResourcesPath ; le visualiseur ajoute automatiquement le slash.

Assemblage complet : Exemple Minimal‑API

Voici une configuration compacte et prête pour la production qui combine l’exigence de stockage partagé, la gestion de session et l’enregistrement de Doconut.

var builder = WebApplication.CreateBuilder(args);

// 1️⃣ Enregistrement du cœur Doconut
builder.Services.AddDoconut(options =>
{
    options.LicensePath = Path.Combine(
        AppContext.BaseDirectory, "wwwroot", "Doconut.Viewer.lic");
    options.MiddlewarePath = "/doconut";
    options.ResourcesPath  = "/doconut-res";
});

// 2️⃣ Session et cache (requis pour la sécurité)
builder.Services.AddDistributedMemoryCache();
builder.Services.AddSession();

var app = builder.Build();

app.UseRouting();
app.UseSession();
app.UseDoconutResources();                     // bundle statique du viewer
app.Map("/doconut", branch => branch.UseDoconut());

app.Run();

Déployez ce binaire sur autant de conteneurs Docker ou services Windows derrière un équilibreur de charge. Tant que chaque instance peut atteindre l’emplacement de stockage partagé que vous avez configuré pour les artefacts de page, le visualiseur récupérera les pages depuis n’importe quel nœud, et les téléchargements/conversions survivront aux sauts de nœuds.

Déploiement derrière un équilibreur de charge

  1. Exposez la même URL de base (par ex., ` sur chaque nœud.
  2. Désactivez les sessions persistantes – Le mode distribué de Doconut supprime le besoin d’affinité de session.
  3. Assurez le monitoring de santé en vérifiant un point de terminaison basique de votre application (par ex., /health) afin que l’équilibreur ne dirige le trafic que vers les nœuds actifs.
  4. Surveillez le dossier partagé pour sa croissance ; le TTL par défaut de 30 minutes maintient le stockage limité, mais vous pouvez l’ajuster selon les exigences de conformité.

Avec ces étapes, votre application .NET axée sur les documents peut servir des milliers de visualiseurs simultanés, garder chaque page chiffrée au repos, et éviter la surcharge d’installation d’Office sur chaque serveur.

Prêt à essayer ? Obtenez un essai gratuit de Doconut, lancez quelques conteneurs, pointez‑les vers un chemin UNC partagé, et observez le visualiseur évoluer sans le moindre cookie de session persistante.

#dotnet#distributed#web‑farm#document‑viewer#scaling#distribué#ferme-web#visualiseur-de-documents#mise‑à‑l’échelle