Skip to content

BDD-82 — Architecture de stockage fichiers sur S3

Contexte

Refactoring de l'architecture S3 pour normaliser les variables d'environnement et le chemin de stockage des fichiers. L'ancienne architecture utilisait des noms de variables hérités de Strapi (ENDPOINT_PJ, UPLOAD_S3_BUCKET_PJ, PRIVATE_FOLDER_PJ) avec un chemin de type strapi-private/{nom}_{uuid}.{ext}. Ces noms étaient obsolètes et le chemin n'était pas structuré par entreprise.

Changements

Variables d'environnement

AvantAprès
ENDPOINT_PJUPLOAD_S3_ENDPOINT
UPLOAD_S3_BUCKET_PJUPLOAD_S3_BUCKET
PRIVATE_FOLDER_PJsupprimée

UPLOAD_S3_ENDPOINT doit être le base endpoint Scaleway sans nom de bucket : https://s3.fr-par.scw.cloud. Le SDK AWS ajoute le bucket en préfixe en virtual-hosted style pour construire {bucket}.s3.fr-par.scw.cloud, qui correspond au wildcard TLS de Scaleway.

Chemin S3

AvantAprès
strapi-private/{nom}_{uuid_court}.{ext}enterprises/{enterpriseUuid}/{documentUuid}

Le chemin est maintenant structuré par entreprise et utilise l'UUID du document comme nom de fichier, ce qui permet un cloisonnement naturel par entreprise dans le bucket.

Schéma Prisma

La colonne uuid a été ajoutée à la table enterprises (String @unique @default(uuid())). Elle est utilisée comme premier segment du chemin S3, ce qui garantit que les fichiers sont isolés par entreprise.

Impact

  • Tous les fichiers déposés avant cette migration ont un chemin S3 sous l'ancien format (strapi-private/…). Ils restent accessibles car bucket et path sont stockés dans documents ; le service génère les URLs pré-signées à partir de ces valeurs stockées.
  • Les nouveaux uploads utilisent le nouveau format.
  • Mettre à jour UPLOAD_S3_ENDPOINT dans tous les environnements (staging, prod).