分散サーバーデプロイのための Doconut 設定方法
← Back to Blog••2 min read

分散サーバーデプロイのための Doconut 設定方法

分散サーバー構成で Doconut を使用する

分散モードでは、PDF、Office ファイル、CAD 図面、画像などを ASP.NET Core のクラスターから提供する必要がある場合、Doconut の 分散モード により、すべてのノードが同じページアーティファクトを共有場所から読み取ることができます。その結果、ロードバランサの背後でスティッキーセッションなしに動作する、水平スケーラブルで安全なビューアが実現します。

分散モードが重要な理由

  • スケーラビリティ – 各ノードはページを UNC またはクラウド共有に公開でき、他のノードは即座にそれらを提供できます。
  • セキュリティ – アーティファクトは共有フォルダーに暗号化して保存され、ビューアはすべてのリクエストを ASP.NET セッショントークンと照合して検証します。
  • Office 依存なし – コンバータプラグインはサーバー側で動作し、Microsoft Office をインストールせずに Word、Excel、PowerPoint、CAD、画像を PDF または画像に変換します。

これらの特性により、エンタープライズ向け DMS、CRM、または eラーニング ポータルは、ドキュメント処理を .NET バックエンド内に保ちつつ、数十個のコンテナへスケールできます。

分散モードのための共有ストレージ

分散モードでは、Doconut はページアーティファクト(PDF ページ、画像タイルなど)がすべてのノードからアクセス可能なストレージ場所に書き込まれることを想定しています。ネットワーク共有、Azure Blob コンテナ、S3 バケット、または Progressive Cloud Publishing 機能がサポートするその他の共有ストレージが利用できます。ビューアは自動的にドキュメントごとのセキュリティトークンに一致するアーティファクトフォルダーを探すため、選択したストレージへの読み書き権限がすべてのノードで同じであることを除き、追加のコードは不要です。

ヒント: すべてのインスタンスの構成で同じ UNC パス(例: \\fileserver\doconut)またはクラウド URL を使用し、フォルダーの権限を一貫させてください。UsePerTokenSubfolders の動作はデフォルトで有効になっており、各ドキュメントのページを分離します。

Doconut とセッションミドルウェアの登録

Doconut はドキュメント単位のセキュリティのために ASP.NET Core のセッションステートに依存しています。分散キャッシュは、最小 API プロジェクトを使用する場合にのみ必要で、MVC や Razor Pages では自動的に追加されます。

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

builder.Services.AddDistributedMemoryCache(); // セッションにはキャッシュが必要です
builder.Services.AddSession();                 // Doconut はセッションに対して検証します

app.UseSession();               // UseDoconut() の前に実行する必要があります
app.UseDoconutResources();      // 静的ビューアのアセットを登録します
app.Map("/doconut", branch => branch.UseDoconut());

カスタムパス(オプション)

別のルートが /doconut と競合する場合、パスを 一度 変更し、クライアント BasePath と同期させてください:

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

MiddlewarePath または ResourcesPath の前にスラッシュを付加しないでください。ビューアが自動的にスラッシュを追加します。

すべてをまとめる: Minimal‑API の例

以下は、共有ストレージ要件、セッション処理、Doconut の登録を組み合わせた、コンパクトで本番環境向けのセットアップです。

var builder = WebApplication.CreateBuilder(args);

// 1️⃣ コア Doconut 登録
builder.Services.AddDoconut(options =>
{
    options.LicensePath = Path.Combine(
        AppContext.BaseDirectory, "wwwroot", "Doconut.Viewer.lic");
    options.MiddlewarePath = "/doconut";
    options.ResourcesPath  = "/doconut-res";
});

// 2️⃣ セッションとキャッシュ (セキュリティのために必須)
builder.Services.AddDistributedMemoryCache();
builder.Services.AddSession();

var app = builder.Build();

app.UseRouting();
app.UseSession();
app.UseDoconutResources();                     // 静的ビューア バンドル
app.Map("/doconut", branch => branch.UseDoconut());

app.Run();

このバイナリを任意の数の Docker コンテナまたは Windows サービスにデプロイし、ロードバランサの背後で実行します。各インスタンスがページアーティファクト用に構成した共有ストレージに到達できれば、ビューアは任意のノードからページを取得し、アップロード/変換はノード間のホップを超えて維持されます。

ロードバランサ背後でのデプロイ

  1. 同一のベース URL を公開する(例: http://example.com を各ノードで同じように設定)。
  2. スティッキーセッションを無効化する – Doconut の分散モードにより、セッションアフィニティは不要になります。
  3. ヘルスモニタリングを確保する – アプリケーションの基本エンドポイント(例: /health)をチェックし、ロードバランサが稼働中のノードにのみトラフィックをルーティングするようにします。
  4. 共有フォルダーの容量を監視する – デフォルトの 30 分 TTL によりストレージ使用量が抑えられますが、コンプライアンス要件に応じて調整可能です。

これらの手順により、ドキュメント集約型の .NET アプリケーションは数千人の同時ビューアに対応し、すべてのページを保存時に暗号化し、各サーバーに Office をインストールするオーバーヘッドを回避できます。

試してみませんか? Doconut の 無料トライアル を取得し、数個のコンテナを起動して共有 UNC パスを指すように設定すれば、ビューアがスティッキーセッションクッキーなしでスケールする様子を確認できます。

#dotnet#distributed#web‑farm#document‑viewer#scaling#分散#ウェブファーム#ドキュメントビューア#スケーリング