Zum Hauptinhalt springen

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:

  1. Legen Sie einen Bucket an (privat; kein öffentlicher Zugriff nötig).
  2. Legen Sie Zugangsdaten an, die Objekte in diesem Bucket lesen, schreiben und löschen dürfen, einschließlich Multipart-Uploads.
  3. Setzen Sie die Variablen und starten Sie mit docker compose up -d neu:
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
AnbieterS3_ENDPOINTS3_REGIONS3_FORCE_PATH_STYLE
AWS S3leer, oder https://s3.<region>.amazonaws.comdie Region des Bucketsfalse
Cloudflare R2https://<account id>.r2.cloudflarestorage.comautotrue
Selbst gehostet (Garage, SeaweedFS, …)die S3-API-Adresse des Speicherswie konfigurierttrue

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.