Stockage S3
MinIO pour les images produits, PDF et fichiers importes.
Qovans utilise MinIO (compatible S3) pour stocker les fichiers. MinIO tourne en conteneur Docker avec un volume persistant.
Structure du bucket
Tout est dans un seul bucket qovans avec des prefixes :
qovans/
├── images/{filename} ← images produits (.png, .webp)
├── invoices/{customer_id}/{invoice_number}.pdf ← factures PDF
├── orders/{order_number}/{filename}.pdf ← documents commande
├── imports/products/{timestamp}_{filename}.xlsx ← imports Excel
├── imports/linked/{timestamp}_{filename}.csv ← imports articles lies
└── exports/{filename} ← exports diversConfiguration
| Variable | Valeur prod |
|---|---|
MINIO_ENDPOINT | 127.0.0.1:9000 |
MINIO_ACCESS_KEY | (dans .env.prod) |
MINIO_SECRET_KEY | (dans .env.prod) |
MINIO_BUCKET | qovans |
MINIO_USE_SSL | false (acces local uniquement) |
Proxy images
Les images produits sont servies aux clients via un proxy dans le backend (/fichiersimages/{filename}). Ce proxy :
- Telecharge l'image depuis MinIO
- Ajoute un header
ETag(hash MD5 du contenu) - Renvoie un
304 Not Modifiedsi le navigateur a deja la bonne version
Cela evite d'exposer MinIO directement sur internet.
Console MinIO
La console d'administration MinIO est accessible en local sur le port 9001 :
# Depuis le VPS, ouvrir un tunnel SSH
ssh -L 9001:localhost:9001 -i ~/.ssh/vps_qovans root@81.22.222.96
# Puis ouvrir dans le navigateur : http://localhost:9001
# Login avec MINIO_ROOT_USER / MINIO_ROOT_PASSWORDService
Le service S3StorageService dans backend/app/services/s3_storage_service.py fournit des methodes pour upload, download, list et delete de fichiers. Il cree automatiquement le bucket au premier usage.
Sauvegarde
Pour sauvegarder les fichiers MinIO, copier le volume Docker ou utiliser le client mc :
# Installer mc (MinIO Client)
docker run --rm -it --network host minio/mc alias set local http://localhost:9000 $MINIO_ACCESS_KEY $MINIO_SECRET_KEY
docker run --rm -it --network host minio/mc mirror local/qovans /backup/minio/