Dify
Dify-Uploads, Knowledge-Base-Dateien und Systemzustand in einem RustFS-Bucket speichern.
In dieser Anleitung verbinden Sie Dify — die Open-Source-Plattform für LLM-Anwendungen — über sein OpenDAL-Storage-Backend mit RustFS. Sie stellen die Dateispeicherung von lokalen Datenträgern auf einen RustFS-Bucket um, starten den Stack, laden ein Dokument in eine Knowledge Base hoch und bestätigen das Objekt im Bucket. Der Ablauf wurde mit Dify 1.18.0 in Docker Compose verifiziert.
Sie benötigen Docker Compose. Dieses Setup ist für lokale Integrationstests gedacht, nicht für den Produktivbetrieb.
Architektur
Dify persistiert hochgeladene Dokumente, Knowledge-Base-Dateien und seinen Bootstrap-Secret (.dify_secret_key, Workspace-Schlüssel) über das konfigurierte Storage-Backend. Ist das Backend ein Bucket, liegt nichts davon auf Container-Festplatten.
Storage für RustFS konfigurieren
Schalten Sie in docker/.env (kopiert aus .env.example) OpenDAL auf das S3-Schema um:
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=/Legen Sie den Bucket an, bevor Sie den Stack starten:
aws s3 mb s3://dify --endpoint-url http://<your-rustfs-endpoint>:9000RustFS an das Compose-Netzwerk anbinden
Der Compose-Stack läuft in seinem eigenen Bridge-Netzwerk, und Docker isoliert Bridges voneinander — ein Endpunkt wie http://172.17.0.2:9000 läuft im api-Container in einen Timeout. Verbinden Sie den RustFS-Container mit einem Alias zum Compose-Netzwerk und verwenden Sie den Alias als Endpoint-Host:
docker network connect --alias rustfs <compose-network> <rustfs-container>Erstellen Sie den Stack nach der .env-Änderung neu — docker compose restart übernimmt die alten Umgebungsvariablen.
Stack starten und einrichten
cd dify/docker
docker compose up -dWarten Sie auf den Health-Check des api-Dienstes und legen Sie das Admin-Konto in der Web-UI an (http://localhost:80). Dify schreibt sofort seinen Bootstrap-Zustand in den Bucket:
aws s3 ls s3://dify/ --recursive \
--endpoint-url http://<your-rustfs-endpoint>:90002026-11-01 14:31:00 65 .dify_secret_key
2026-11-01 14:33:06 1674 privkeys/<tenant-id>/private.pemSecret-Schlüssel und Workspace-Schlüssel liegen jetzt in RustFS — in den Containern bleibt kein relevanter Zustand.
Knowledge-Base-Dokument hochladen
Erstellen Sie eine Knowledge Base im UI und laden Sie ein Dokument hoch. Der Upload landet im Bucket unter upload_files/<tenant-id>/:
aws s3 ls s3://dify/upload_files/ --recursive \
--endpoint-url http://<your-rustfs-endpoint>:90002026-11-01 15:25:53 128 upload_files/<tenant-id>/0ae369a1-70ed-40e8-b3d9-0f12d0b7c699.txtDas Objekt erscheint im Moment des Upload-Abschlusses — die Indizierung läuft gegen die Bucket-Kopie.

Anhalten oder Zurücksetzen
Stack abbauen und die Bucket-Objekte behalten:
docker compose downDify-Daten löschen:
aws s3 rm s3://dify --recursive \
--endpoint-url http://<your-rustfs-endpoint>:9000Beim Zurücksetzen Bind-Mounts leeren
Difys Compose-Datei bind-mountet Datenbank und Storage unter docker/volumes/. docker compose down -v entfernt Bind-Mounts nicht — löschen Sie docker/volumes/ explizit, wenn Sie einen sauberen Zustand brauchen, sonst überleben das alte Admin-Konto und der Verschlüsselungszustand.
Fehlerbehebung
Startup-Logs zeigen tcp connect error: Connection timed out gegen den Bucket
Der Stack erreicht die RustFS-Adresse nicht — Netzwerkisolation zwischen Docker-Bridges. Verbinden Sie RustFS wie in Schritt 1 mit einem Alias zum Compose-Netzwerk.
Login schlägt mit Invalid encrypted data fehl
Das Admin-Passwortfeld wird vom Frontend Base64-kodiert; ein Klartext-Passwort über die Console-API scheitert. Nutzen Sie das Web-UI für Konto- und Passwortoperationen, oder kodieren Sie das Feld wie das Frontend.
Default model not found for text-embedding beim Anlegen von Dokumenten
Der high-quality-Indizierungsmodus braucht einen in Dify konfigurierten Embedding-Modell-Provider. Für einen reinen Storage-Test economy-Indizierung verwenden oder zuerst einen Model-Provider konfigurieren.
Uploads landen weiterhin auf lokaler Festplatte
Die Container api und worker stammen aus der Zeit vor der .env-Änderung. Erstellen Sie den ganzen Stack mit docker compose up -d --force-recreate neu, damit jeder Dienst die neue Storage-Konfiguration liest.
Nächste Schritte
- Lesen Sie vor großen Knowledge Bases die S3-Kompatibilitätshinweise.
- Erstellen Sie dedizierte Produktionszugangsdaten mit Zugangsdatenverwaltung.
- Folgen Sie der Dify-Umgebungsvariablen-Referenz für die separaten S3-Einstellungen des Plugin-Daemons und Multipart-Tuning auf demselben Bucket.