
分散サーバーデプロイのための 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 サービスにデプロイし、ロードバランサの背後で実行します。各インスタンスがページアーティファクト用に構成した共有ストレージに到達できれば、ビューアは任意のノードからページを取得し、アップロード/変換はノード間のホップを超えて維持されます。
ロードバランサ背後でのデプロイ
- 同一のベース URL を公開する(例:
http://example.comを各ノードで同じように設定)。 - スティッキーセッションを無効化する – Doconut の分散モードにより、セッションアフィニティは不要になります。
- ヘルスモニタリングを確保する – アプリケーションの基本エンドポイント(例:
/health)をチェックし、ロードバランサが稼働中のノードにのみトラフィックをルーティングするようにします。 - 共有フォルダーの容量を監視する – デフォルトの 30 分 TTL によりストレージ使用量が抑えられますが、コンプライアンス要件に応じて調整可能です。
これらの手順により、ドキュメント集約型の .NET アプリケーションは数千人の同時ビューアに対応し、すべてのページを保存時に暗号化し、各サーバーに Office をインストールするオーバーヘッドを回避できます。
試してみませんか? Doconut の 無料トライアル を取得し、数個のコンテナを起動して共有 UNC パスを指すように設定すれば、ビューアがスティッキーセッションクッキーなしでスケールする様子を確認できます。