Django Storages
Stockage de fichiers dans le Cloud (AWS S3, Google Cloud, Azure).
Guide d'implémentation pour la production.
Introduction & Concepts
Pourquoi ne peut-on pas stocker les fichiers localement en production ? Comprendre le systĂšme de stockage de Django.
Installation de base
Installer le package principal et les librairies spécifiques (boto3, google-cloud, azure...).
Amazon S3
Le standard de l'industrie. Configuration complÚte avec boto3, Buckets, IAM et régions.
S3 Compatible / MinIO
Utiliser l'API S3 avec d'autres fournisseurs : DigitalOcean Spaces, Scaleway Object Storage, MinIO.
Google Cloud Storage
Configuration pour GCP. Gestion des clés JSON de compte de service et des buckets.
Azure Storage
Stocker vos blobs sur Azure. Connection strings, Account Keys et conteneurs.
Static vs Media
Configuration avancée : séparer les fichiers statiques (assets) des fichiers médias (uploads utilisateurs) dans des buckets/dossiers différents.
Dropbox & SFTP
Backends alternatifs : Utiliser Dropbox comme CDN ou un vieux serveur SFTP pour le stockage.
Bonnes Pratiques
URLs signées (liens privés), Cache-Control pour les performances, ACLs publics vs privés.
Le problĂšme du stockage local
En développement (DEBUG=True), Django stocke les fichiers uploadés dans un dossier local (ex: media/). C'est simple et ça marche.
Mais en production (Docker, Heroku, Kubernetes) :
- Le systÚme de fichiers est souvent éphémÚre (détruit au redémarrage).
- Si vous avez plusieurs serveurs, un fichier uploadé sur le Serveur A n'est pas visible sur le Serveur B.
- Servir des gros fichiers via Django/Gunicorn tue les performances.
L'API Storage de Django
Django possÚde une API d'abstraction pour le stockage. django-storages implémente cette API pour connecter Django aux services Cloud (S3, Azure, etc.) sans changer votre code métier.
Installation des paquets
Installez django-storages ET la librairie spécifique à votre fournisseur cloud.
Base + AWS S3
Base + Google Cloud
Base + Azure
Déclaration de l'App
Ajoutez simplement storages dans vos applications installées.
Variables d'environnement
Ne stockez jamais ces clés en dur dans le code ! Utilisez os.environ ou python-dotenv.
Nouvelle Configuration (Django 4.2+)
Utilisez le dictionnaire STORAGES. C'est la méthode moderne.
Ancienne Configuration (Legacy)
Encore trÚs utilisée dans les tutoriels.
Changer le Endpoint
Les services comme DigitalOcean Spaces, Scaleway Object Storage ou MinIO utilisent le protocole S3. Il suffit de spécifier l'URL personnalisée.
Le backend reste storages.backends.s3boto3.S3Boto3Storage.
Service Account (JSON)
GCP fonctionne généralement avec un fichier clé JSON.
- Créez un Service Account dans la console GCP.
- Téléchargez la clé JSON.
- Placez-la (hors du code !) ou définissez son chemin.
Configuration
Azure Blob Storage
La distinction vitale
- Static : CSS, JS, Images du thĂšme. DĂ©ployĂ©s par le dĂ©veloppeur (`collectstatic`). Doivent ĂȘtre publics et trĂšs cachĂ©s.
- Media : Uploads des utilisateurs (Avatars, PDF). Peuvent ĂȘtre privĂ©s.
Si vous mettez tout dans le mĂȘme bucket Ă la racine, ça devient vite le chaos.
Classes Custom
La bonne pratique est de créer deux classes héritant de S3Boto3Storage pour définir des sous-dossiers.
SFTP Storage
Utile pour les architectures legacy ou le stockage sur NAS.
Dropbox
Peut servir de stockage gratuit pour des petits projets.
URLs Signées (Signed URLs)
Par défaut sur S3, si default_acl = 'private', Django génÚre des URLs temporaires signées pour accéder aux fichiers.
- Avantage : Sécurité. Le lien expire aprÚs X secondes.
- Configuration :
AWS_QUERYSTRING_AUTH = True(défaut).
Pour des fichiers publics (images de profil), mettez AWS_QUERYSTRING_AUTH = False et configurez le bucket en lecture publique.
Cache Control (Performance)
Pour les fichiers statiques (CSS/JS), il faut dire au navigateur de les garder en cache longtemps.
