Aller au contenu principal

Stockage des fichiers : local ou S3

Les pièces jointes, les images intégrées, les photos de profil et les exports de données sont stockés par l’un de deux pilotes. Les métadonnées des fichiers sont dans la base de données ; les fichiers eux-mêmes sont sur disque ou dans un bucket. Les deux sont nécessaires pour une sauvegarde complète.

Volume local (par défaut)​

STORAGE_DRIVER=local
STORAGE_LOCAL_DIR=/data/uploads

Le compose.yml d’exemple monte le volume uploads sur /data/uploads. Les fichiers ne sont jamais servis que par l’application, après une vérification d’accès. Rien d’autre à configurer.

Stockage objet compatible S3​

Toute API S3 convient : AWS S3, Cloudflare R2, Hetzner Object Storage, Garage, SeaweedFS et d’autres. Le stockage doit prendre en charge les envois multipart et les URL de téléchargement pré-signées.

Pour l’utiliser :

  1. Créez un bucket (privé ; aucun accès public n’est nécessaire).
  2. Créez des identifiants autorisés à lire, écrire et supprimer des objets dans ce bucket, envois multipart compris.
  3. Définissez les variables et redémarrez avec docker compose up -d :
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
FournisseurS3_ENDPOINTS3_REGIONS3_FORCE_PATH_STYLE
AWS S3vide, ou https://s3.<region>.amazonaws.comla région du bucketfalse
Cloudflare R2https://<account id>.r2.cloudflarestorage.comautotrue
Auto-hébergé (Garage, SeaweedFS, …)l’adresse de l’API S3 du stockageselon la configurationtrue

Les téléchargements passent directement par le bucket​

Quand quelqu’un télécharge un fichier, l’application vérifie l’accès puis redirige le navigateur vers un lien signé de courte durée sur le bucket. L’adresse de l’API du bucket doit donc être joignable depuis les navigateurs de vos utilisateurs. Si l’application accède au stockage sous un nom interne (par exemple http://garage:3900), définissez S3_PUBLIC_ENDPOINT sur l’adresse publique qu’utilisent les navigateurs. Aucune règle CORS n’est nécessaire.

Blocs d’envoi et S3​

Les fichiers sont envoyés par blocs (Admin → Général → Envoi de fichiers → Taille des blocs (Mo), 8 Mo par défaut). S3 exige des parties d’au moins 5 Mo (sauf la dernière) : sur S3, la taille des blocs ne peut donc pas être inférieure à 5 Mo. Un fichier peut comporter au plus 10 000 parties.

Nettoyer les envois inachevés​

sol2flow annule chaque jour les envois abandonnés. Comme filet de sécurité supplémentaire, ajoutez au bucket une règle de cycle de vie qui interrompt les envois multipart incomplets au bout de 2 à 3 jours.

Changer de pilote​

Vous pouvez passer du stockage local à S3 (ou inversement) à tout moment. Les nouveaux fichiers vont dans le nouveau stockage ; les fichiers existants sont lus là où ils ont été stockés, tant que les deux restent configurés et joignables (gardez le volume monté et les variables S3_* définies). Les fichiers existants ne sont pas déplacés vers le nouveau stockage.

Limites d’envoi​

La taille maximale des fichiers et la taille des blocs se règlent dans Admin → Général → Envoi de fichiers (voir Paramètres de l’instance). Pensez à la limite de taille des requêtes du proxy quand vous augmentez la taille des blocs.