Dateispeicher: lokal oder S3
Anhänge, eingebettete Bilder, Profilfotos und Datenexporte werden von einem von zwei Treibern gespeichert. Die Metadaten der Dateien liegen in der Datenbank, die Dateien selbst auf der Festplatte oder in einem Bucket. Für ein vollständiges Backup brauchen Sie beides.
Lokales Volume (Standard)
STORAGE_DRIVER=local
STORAGE_LOCAL_DIR=/data/uploads
Die Beispiel-compose.yml bindet das Volume uploads unter /data/uploads ein. Dateien werden immer nur über die App
ausgeliefert, nach einer Zugriffsprüfung. Weitere Konfiguration ist nicht nötig.
S3-kompatibler Objektspeicher
Jede S3-API funktioniert: AWS S3, Cloudflare R2, Hetzner Object Storage, Garage, SeaweedFS und andere. Der Speicher muss Multipart-Uploads und vorsignierte Download-URLs unterstützen.
So verwenden Sie ihn:
- Legen Sie einen Bucket an (privat; kein öffentlicher Zugriff nötig).
- Legen Sie Zugangsdaten an, die Objekte in diesem Bucket lesen, schreiben und löschen dürfen, einschließlich Multipart-Uploads.
- Setzen Sie die Variablen und starten Sie mit
docker compose up -dneu:
STORAGE_DRIVER=s3
S3_ENDPOINT=https://s3.eu-central-1.amazonaws.com
S3_REGION=eu-central-1
S3_BUCKET=sol2flow-files
S3_ACCESS_KEY_ID=…
S3_SECRET_ACCESS_KEY=…
S3_FORCE_PATH_STYLE=false
| Anbieter | S3_ENDPOINT | S3_REGION | S3_FORCE_PATH_STYLE |
|---|---|---|---|
| AWS S3 | leer, oder https://s3.<region>.amazonaws.com | die Region des Buckets | false |
| Cloudflare R2 | https://<account id>.r2.cloudflarestorage.com | auto | true |
| Selbst gehostet (Garage, SeaweedFS, …) | die S3-API-Adresse des Speichers | wie konfiguriert | true |
Downloads gehen direkt an den Bucket
Wenn jemand eine Datei herunterlädt, prüft die App den Zugriff und leitet den Browser dann auf einen kurzlebigen,
signierten Link zum Bucket weiter. Die API-Adresse des Buckets muss daher von den Browsern Ihrer Nutzer erreichbar
sein. Erreicht die App den Speicher unter einem internen Namen (zum Beispiel http://garage:3900), setzen Sie
S3_PUBLIC_ENDPOINT auf die öffentliche Adresse, die Browser verwenden. Eine CORS-Regel ist nicht nötig.
Upload-Blöcke und S3
Uploads werden in Blöcken gesendet (Admin → Allgemein → Uploads → Blockgröße, standardmäßig 8 MB). S3 verlangt Teile von mindestens 5 MB (außer dem letzten), daher lässt sich die Blockgröße bei S3 nicht unter 5 MB setzen. Eine Datei kann höchstens 10.000 Teile haben.
Nicht abgeschlossene Uploads aufräumen
sol2flow bricht verwaiste Uploads täglich ab. Als zweites Sicherheitsnetz fügen Sie dem Bucket eine Lifecycle-Regel hinzu, die unvollständige Multipart-Uploads nach 2 bis 3 Tagen abbricht.
Treiber wechseln
Sie können jederzeit von lokal auf S3 wechseln (oder zurück). Neue Dateien landen im neuen Speicher; vorhandene Dateien
werden von dort gelesen, wo sie gespeichert wurden, solange beide konfiguriert und erreichbar bleiben (lassen Sie das
Volume eingebunden und die S3_*-Variablen gesetzt). Vorhandene Dateien werden nicht in den neuen Speicher verschoben.
Upload-Limits
Die maximale Dateigröße und die Blockgröße legen Sie unter Admin → Allgemein → Uploads fest (siehe Instanz-Einstellungen). Denken Sie an das Body-Limit des Proxys, wenn Sie die Blockgröße erhöhen.