Devora Cloud · Blog
Un S3 privé pour votre application : images et fichiers hors de la base
Pourquoi stocker images, PDF et vidéos dans S3 et seulement la clé dans la base, comment fonctionne le bucket privé par projet de Devora Cloud, les URL signées, l’espace inclus et les packs supplémentaires.
Toute application commence petite : un formulaire avec envoi de photo, un champ pour joindre un PDF. La solution la plus rapide consiste souvent à écrire le fichier sur le disque du serveur ou directement dans une colonne de la base. Ça marche le premier jour — et ça devient un problème au premier déploiement, au premier réplica ou à la première sauvegarde géante.
Ce guide explique pourquoi les fichiers doivent vivre dans un stockage objet S3, comment fonctionne le S3 privé de chaque projet sur Devora Cloud, et comment montrer ces fichiers aux visiteurs sans rien rendre public.
Pourquoi ne pas stocker les fichiers dans la base ou sur le disque
La base de données est parfaite pour les informations structurées : utilisateurs, commandes, prix. Stocker le contenu binaire d’images et de vidéos dans les tables la fait grossir vite, ralentit sauvegardes et restaurations, et dispute la mémoire aux requêtes qui comptent.
Le disque du conteneur pose un autre problème : il n’est ni permanent ni partagé. Chaque déploiement crée un environnement neuf, et les réplicas de répartition de charge ne voient pas le disque des autres. Un fichier envoyé sur une copie n’existe tout simplement pas sur l’autre.
La règle pratique est simple :
- Le fichier va dans S3.
- La base ne garde que la référence : la clé de l’objet (par exemple produits/123/photo.png), le nom d’origine, la taille, le type et le propriétaire.
- L’application génère le lien au moment de l’afficher.
Un bucket privé par projet, avec sa propre clé
Sur Devora Cloud, chaque projet peut avoir son propre bucket S3 privé, avec sa propre clé d’accès. Cette clé ne fonctionne que sur ce bucket : un projet ne peut ni lire ni supprimer les fichiers d’un autre, même au sein du même compte.
À la création du stockage, le projet reçoit des variables d’environnement prêtes à l’emploi :
- S3_ENDPOINT=https://s3.devoracloud.com
- S3_REGION=us-east-1
- S3_BUCKET, avec le nom du bucket du projet
- S3_ACCESS_KEY et S3_SECRET_KEY
- S3_FORCE_PATH_STYLE=true
Tout SDK compatible S3 fonctionne — AWS SDK v3 en Node.js, boto3 en Python, le driver S3 de Laravel et d’autres — à condition d’utiliser l’adressage par chemin (path-style). Dans le bucket, créez les dossiers que vous voulez, comme uploads/2026/ ou factures/.
Les identifiants ne doivent être lus que côté serveur. Ne placez jamais la clé secrète dans des variables exposées au navigateur, comme celles qui commencent par NEXT_PUBLIC_.
URL signées : afficher sans rendre public
Si le bucket est privé, comment le visiteur voit-il la photo du produit ? Grâce à une URL signée (presigned URL). L’application génère, côté serveur, un lien temporaire vers un objet précis — valable une heure, par exemple. Quiconque possède le lien peut télécharger ce fichier jusqu’à l’expiration ; ensuite, le lien ne fonctionne plus.
- Photos de produits et avatars : générez l’URL au rendu de la page.
- Factures, contrats et examens médicaux : générez l’URL seulement après avoir vérifié que l’utilisateur connecté a droit au fichier.
- Logo, CSS et icônes du site : livrez-les avec le code, pas dans le bucket.
La clé d’accès n’arrive jamais dans le navigateur. Le visiteur ne reçoit que le lien signé, qui expire.
Quel espace est inclus
| Forfait | Prix mensuel | S3 inclus |
|---|---|---|
| Hobby | 5 US$ | 1 Go |
| Pro | 20 US$ | 5 Go |
| Enterprise | 59 US$ | 25 Go |
L’espace appartient au compte, pas à chaque projet : il est partagé entre tous les projets du compte. S’il vous en faut plus, achetez un pack dans le tableau de bord :
- 100 Go pour 3 US$ par mois
- 250 Go pour 4 US$ par mois
- 1 To pour 12 US$ par mois
Les packs payants s’ajoutent à la limite du forfait. Le paiement se fait par carte, ou par Pix en reais pour les clients au Brésil.
Que se passe-t-il quand l’espace est plein
Quand l’usage atteint la limite, les nouveaux envois sont refusés (S3 répond par l’erreur QuotaExceeded). Les fichiers déjà stockés restent conservés et accessibles ; rien n’est supprimé.
Pour envoyer à nouveau, supprimez les fichiers inutiles, achetez un pack ou passez à un forfait avec plus d’espace. Pensez à gérer cette erreur dans le code pour afficher un message clair plutôt qu’un échec générique.
Si vous utilisez le jeton IA, votre IA vérifie l’usage S3 avant d’envoyer beaucoup de fichiers et vous prévient au-delà de 80 %.
Checklist pour migrer les envois vers S3
- Créez le stockage S3 du projet dans le tableau de bord, ou demandez-le à votre IA.
- Remplacez l’écriture sur disque par un envoi vers S3 avec les variables du projet.
- Ajoutez dans la base une colonne pour la clé de l’objet et cessez d’y stocker des binaires.
- Générez des URL signées pour afficher les fichiers privés.
- Copiez les anciens fichiers : ajouter S3 ne migre pas l’existant.
- Si votre forfait le permet, testez avec deux réplicas pour vérifier que rien ne dépend du disque.
Questions fréquentes
Le S3 de Devora fonctionne-t-il avec les SDK AWS ?
Oui. Il utilise l’API S3 et fonctionne donc avec les SDK courants (AWS SDK, boto3, Laravel et d’autres) en indiquant l’endpoint https://s3.devoracloud.com et le mode path-style.
Puis-je rendre un fichier public ?
Le bucket est privé. Pour montrer des fichiers aux visiteurs, générez des URL signées temporaires dans l’application ; n’exposez jamais la clé d’accès.
L’espace du forfait est-il par projet ?
Non. L’espace inclus (1, 5 ou 25 Go) et les packs supplémentaires sont partagés entre tous les projets du compte.
Est-ce que je perds des fichiers si l’espace est plein ?
Non. Seuls les nouveaux envois s’arrêtent. Les fichiers stockés restent en place jusqu’à ce que vous libériez de l’espace ou augmentiez la limite.