- 公開日:
ConoHa VPSでDifyをセルフホストした記録——RAGからTavily連携ワークフローまで
はじめに
クラウドのDifyや単体の生成AIツールだけでは、データの置き場所や他サービスとの連携に制約を感じる場面があります。一方で、セルフホストは初期構築とサーバー保守の負担が乗ります。私は、既存のNext.js運用のコストを抑えつつ、ConoHa VPS上にDify用の環境を新設し、ナレッジ検索と外部検索を組み込んだワークフローまで試しました。
この記事では、その手順の要約、メモリ不足への対処、RAGとワークフローでつまずいた点、運用上の注意をまとめます。同じ規模感で試したい方のチェックリストとして使えることを目指します。
クラウド版のDifyは手軽ですが、データの保管場所や社内規程での利用可否、カスタムドメインやVPC連携など、要件によってはセルフホストの方が説明しやすい場面もあります。逆に、アップデートの追従や可用性の設計は自分で担うことになるため、「安さだけ」で選ぶと後から苦しくなるタイプの選択だと私は感じています。
結論から——自前Difyで得られたもの
結論として、 自サーバーでDify(セルフホスト)を持つと、ナレッジを載せたチャット、複数ステップのワークフロー、サイト埋め込みやAPI経由の利用まで、一つの基盤に寄せやすくなりました。Google Opalのような単体ツールとは異なり、バックエンドとしての自由度がメリットだと私は捉えています。
理由は、コンテナでアプリ本体を動かし、外部にはOpenAI等のAPIキーを渡す形にできるため、フロント(たとえばNext.js)とAIロジックの役割分担がしやすいからです。
具体として、私は次のような段取りで進めました。
Dify専用サーバー(ConoHa VPS 2GB)の立ち上げ
新規に Ubuntu 24.04 の2GBプランを用意し、Docker と Docker Compose を入れて、公式手順に沿ってDifyをクローン・コンテナ起動し、ブラウザから管理者登録まで完了させました。既存のNext.jsサーバーと役割を分けたのは、負荷と障害の切り分けのためです。AIまわりでメモリを食う処理が走っても、公開サイト全体を巻き込みにくくなります。
メモリが足りないのはこの規模ではよくある話です。私はスワップ領域を大きく確保し(合計で約9GB)、物理メモリのピークを吸収する形にしました。スワップ依存はレスポンスを鈍くするので万能ではありませんが、インデックス作成の一度きりの山や同時利用が少ない検証環境では、落ちないことの価値が上回ることもあります。重い処理のときは、free -h で実メモリとスワップの消費を見る習慣を付けています。小規模プランで運用するなら、「常時余裕」ではなく「限界時に落ちない」方向の設計が現実的です。
公開URLやHTTPSの扱いは、リバースプロキシ(CaddyやNginxなど)を前段に置く構成が一般的です。私のメモでは証明書まわりは各環境で差があるため、ここでは「公式の推奨構成に寄せる」に留めます。
ナレッジ(RAG)で押さえたこと
制作実績のPDFなどをナレッジに載せ、検索方式(ベクトル・ハイブリッド)とRerank(再ランク)の違いを整理しながら調整しました。ざっくり言えば、ベクトル検索は「意味の近さ」で候補を出し、ハイブリッドはキーワード寄りの要素も混ぜます。Rerankは、その候補の並びを質問に対してより適した順に直すステップで、ナレッジが増えてきたときに体感差が出やすいです。設定値はデータの性質(短文中心か、規約の長文か)で最適解が変わるため、小さなサンプルでA/Bするのが現実的でした。
実装で特にハマったのは、{{#context#}} のようなコンテキスト変数の取り回しです。ナレッジをアプリに紐付けただけでは、プロンプト側に文脈が渡らず、期待した回答にならないことがあります。「検索結果を本文に渡すブロックまで繋がっているか」を、ワークフロー/チャットアプリの両方で確認するのがポイントでした。同系のミスは、後から見ると単純ですが、画面が増えるほど見落としやすいタイプです。
自前ホストにしたことで、詳細な実績データを外部SaaSに丸ごと預けずに試す選択肢は広がります。ただしバックアップは自分の責任です。VPSのイメージ保存や、Difyのエクスポート(DSL等)で、ワークフローとナレッジの消失リスクに備える必要があります。
ワークフロー例——検索APIとLLMをつなぐ
別の検証として、企業名や業界名を入力 → 検索APIで情報取得 → LLMで要約という流れを組みました。構成は、開始ノードで入力を受け取り、Tavily Search のような検索ツールでJSONを取得し、変数でLLMが読みやすいテキストだけを抜き出してから、GPT-4o系などで分析する、という形です。検索ツールの返却はライブラリやバージョンでキー名が変わることがあるため、一度デバッグ出力で中身を見てからテンプレートに埋めるのが安全でした。
ここで学んだのは次の二点です。ひとつは、{{ノード名.フィールド}} の指定を一つでも誤ると、空の入力がLLMに渡ること。もうひとつは、Invalid context structure のようなエラーが出たときは、JSONとプレーンテキストの期待のずれを疑うと早い、ということです。LLMは空入力でもそれらしい一般論を返しがちなので、「根拠が検索結果に基づいているか」は出力だけ見ても誤認しやすい点に注意しました。
コスト面では、高性能モデルを常時使うとAPI料金が積み上がります。gpt-4o-mini のような軽めのモデルへの切り替えや、出力トークン上限の設定は、本番運用前に試しておく価値があります。
実際に、特定NPOのニュースレターについて調べさせたところ、配信頻度や内容の傾向が要約として返り、メルマガ企画のたたき台に使える粒度の結果が得られました。精度はプロンプトと検索結果の質に依存するため、一次情報の確認は人間側が必要です。

運用で気を付けていること
- APIキー(OpenAI、Claude、検索APIなど)の利用量と上限。Dify側の制限設定も併用できる場合があります。
- 2GB+スワップでも、同時に重いジョブを走らせるとレスポンスが不安定になることがあります。処理は分散か、時間帯を分ける、が無難です。
- バックアップを忘れない。構築にかけた時間が一瞬で消えないよう、イメージ保存やエクスポートを月次などのリズムで入れるのがよいです。
おわりに——次に試せそうなこと
私の環境では、Next.jsでフロントを作り、DifyでAIロジックとナレッジを持つという分業が現実的なラインまで来ました。次の一手としては、調査ワークフローのモデル料金最適化、出力をメルマガの構成案まで伸ばすテンプレ化、複数組織の比較を同じフローで回すなどが考えられます。サイトへの埋め込みやAPI化は、Dify側の公開設定と、フロントの認証・レート制限の設計がセットになります。小さく始めるなら、社内限定のトークンやIP制限から入ると安全です。
自前運用は楽ではありませんが、どこまでを自社で握るかを決める材料にはなります。検索エンジン最適化(SEO)や生成AI検索(いわゆるLLMO)の文脈でも、一次情報を整え、引用しやすい形で公開する土台は変わりません。Difyはその土台の「裏側」で、要約や下書き、社内向けQ&Aを速く回す用途と相性がよいと感じています。同じ道を検討している方の参考になれば幸いです。✍️
参考URL(出典・公式)
- Dify(公式サイト・セルフホスト手順はドキュメントを参照)
- ConoHa VPS(各種プラン・料金)
- Tavily(検索APIの提供元。利用時は公式ドキュメントを参照)
執筆者
astroboy
Webデザイナー&コーダー。HTML/CSS/JavaScript/Vue.js/WebGL/ECサイトなど手広くWeb制作に従事する。現在は東京で活動中。