Dify

Dify のアップロードファイル・ナレッジベース文書・システム状態を RustFS バケットに保存する。

このガイドは、オープンソースの LLM アプリケーションプラットフォーム Dify を、OpenDAL ストレージバックエンド経由で RustFS に接続します。ファイルストレージをローカルディスクから RustFS バケットに切り替え、スタックを起動し、ナレッジベースにドキュメントをアップロードして、バケット内のオブジェクトを確認します。このワークフローは Dify 1.18.0(Docker Compose)で検証しました。

Docker Compose が必要です。このデプロイはローカルでの統合テスト用であり、本番環境向けではありません。

アーキテクチャ

Dify は、アップロードされた文書・ナレッジベースのファイル・ブートストラップシークレット(.dify_secret_key、ワークスペース鍵)を、設定されたストレージバックエンド経由で永続化します。バックエンドがバケットなら、これらはコンテナのディスクには残りません。

RustFS 向けにストレージを設定する

docker/.env(.env.example からコピー)で OpenDAL を S3 スキームに切り替えます:

docker/.env
STORAGE_TYPE=opendal
OPENDAL_SCHEME=s3
OPENDAL_S3_ENDPOINT=http://<your-rustfs-endpoint>:9000
OPENDAL_S3_BUCKET=dify
OPENDAL_S3_ACCESS_KEY_ID=<your-access-key>
OPENDAL_S3_SECRET_ACCESS_KEY=<your-secret-key>
OPENDAL_S3_REGION=us-east-1
OPENDAL_S3_ENABLE_PATH_STYLE=true
OPENDAL_S3_ROOT=/

スタック起動前にバケットを作成します:

aws s3 mb s3://dify --endpoint-url http://<your-rustfs-endpoint>:9000

RustFS を Compose ネットワークに接続する

Compose スタックは独自のブリッジネットワークで動き、Docker はブリッジ同士を分離します。http://172.17.0.2:9000 のようなエンドポイントは api コンテナからタイムアウトします。RustFS コンテナをエイリアス付きで Compose ネットワークに接続し、エンドポイントのホストにはエイリアスを使ってください:

docker network connect --alias rustfs <compose-network> <rustfs-container>

.env を変更した後はスタックを再作成してください。docker compose restart は古い環境変数を使い続けます。

スタックを起動して初期化する

cd dify/docker
docker compose up -d

api のヘルスチェックが通るのを待ち、Web UI(http://localhost:80)で管理者アカウントを作成します。Dify は直ちにブートストラップ状態をバケットへ書き込みます:

aws s3 ls s3://dify/ --recursive \
  --endpoint-url http://<your-rustfs-endpoint>:9000
2026-11-01 14:31:00         65 .dify_secret_key
2026-11-01 14:33:06       1674 privkeys/<tenant-id>/private.pem

シークレットキーとワークスペース鍵は RustFS 上にあります。コンテナには残すべき状態がありません。

ナレッジベースに文書をアップロードする

UI でナレッジベースを作成し、文書をアップロードします。アップロードはバケットの upload_files/<tenant-id>/ の下に着地します:

aws s3 ls s3://dify/upload_files/ --recursive \
  --endpoint-url http://<your-rustfs-endpoint>:9000
2026-11-01 15:25:53        128 upload_files/<tenant-id>/0ae369a1-70ed-40e8-b3d9-0f12d0b7c699.txt

オブジェクトはアップロード完了の瞬間に現れます。インデックス作成はバケット上のコピーに対して実行されます。

RustFS コンソールに保存された Dify のアップロード

停止またはリセット

バケットのオブジェクトを残したままスタックを解体するには:

docker compose down

Dify のデータを削除するには:

aws s3 rm s3://dify --recursive \
  --endpoint-url http://<your-rustfs-endpoint>:9000

リセット時は bind mount も消す

Dify の Compose ファイルはデータベースとストレージを docker/volumes/ 以下にバインドマウントします。docker compose down -v はバインドマウントを削除しません。クリーンな状態にするには docker/volumes/ を明示的に削除してください。そうしないと旧管理者アカウントと暗号化状態が残ります。

トラブルシューティング

起動ログがバケットに対して tcp connect error: Connection timed out を表示する

スタックから RustFS のアドレスに到達できていません。Docker ブリッジ間のネットワーク分離です。手順 1 のとおり RustFS をエイリアス付きで Compose ネットワークに接続してください。

ログインが Invalid encrypted data で失敗する

管理者のパスワードフィールドはフロントエンドが Base64 エンコードします。console API に平文を送ると失敗します。アカウント操作には Web UI を使うか、フロントエンドと同じ方法でフィールドをエンコードしてください。

文書作成時に Default model not found for text-embedding

high-quality インデックスモードには Dify で設定済みの embedding モデルプロバイダーが必要です。ストレージだけの検証なら economy インデックスを使うか、先にモデルプロバイダーを設定してください。

アップロードがローカルディスクに落ち続ける

api と worker コンテナが .env 変更前の古いインスタンスです。docker compose up -d --force-recreate でスタック全体を再作成し、全サービスに新しいストレージ設定を読ませてください。

次のステップ

このページの内容