Products Manager APP

Integrations

MinIO

Vue d'ensemble

MinIO est un serveur de stockage objet compatible avec l'API Amazon S3. Products Manager l'utilise comme alternative locale à S3 en environnement de développement et de staging, sans dépendance à un service cloud externe.

En production, OVH Object Storage (compatible S3) remplace MinIO avec exactement la même interface applicative — seules les variables d'environnement changent. Cette compatibilité garantit que le code applicatif n'a pas à distinguer l'environnement : tout passe par le client S3 unifié.

MinIO est utilisé dans Products Manager pour stocker :

  • Les images produits (originales et variantes redimensionnées)
  • Les fichiers d'import (CSV, Excel uploadés par les fournisseurs)
  • Les exports générés (flux produits, rapports)
  • Les assets média (fiches techniques, documents)

Lancer MinIO avec Docker Compose

Ajoutez le service MinIO à votre docker-compose.yml :

services:
  minio:
    image: minio/minio:latest
    container_name: pm_minio
    command: server /data --console-address ":9001"
    ports:
      - "9000:9000"   # API S3
      - "9001:9001"   # Console web
    environment:
      MINIO_ROOT_USER: minioadmin
      MINIO_ROOT_PASSWORD: minioadmin
    volumes:
      - minio_data:/data
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:9000/minio/health/live"]
      interval: 30s
      timeout: 20s
      retries: 3

volumes:
  minio_data:

Démarrage :

docker compose up -d minio

Variables d'environnement

Configurez ces variables dans votre fichier .env local :

MINIO_ENDPOINT=http://localhost:9000
MINIO_ACCESS_KEY=minioadmin
MINIO_SECRET_KEY=minioadmin
MINIO_BUCKET=products-manager
MINIO_USE_SSL=false
VariableDescriptionExemple
MINIO_ENDPOINTURL du serveur MinIO (sans trailing slash)http://localhost:9000
MINIO_ACCESS_KEYClé d'accès (identifiant)minioadmin
MINIO_SECRET_KEYClé secrèteminioadmin
MINIO_BUCKETNom du bucket principalproducts-manager
MINIO_USE_SSLtrue si HTTPS activéfalse en dev

Interface web MinIO (Console)

La console d'administration MinIO est accessible à l'adresse :

http://localhost:9001

Identifiants par défaut (Docker Compose) :

  • Login : minioadmin
  • Mot de passe : minioadmin

Depuis la console, vous pouvez :

  • Créer et gérer les buckets
  • Parcourir les fichiers stockés
  • Gérer les politiques d'accès (ACL)
  • Créer des clés d'accès supplémentaires
  • Monitorer l'utilisation du stockage

Initialisation du bucket

Au premier démarrage, le bucket products-manager n'existe pas encore. Deux options pour l'initialiser :

Option 1 — Via la console web

  1. Connectez-vous sur http://localhost:9001
  2. Cliquez sur Buckets > Create Bucket
  3. Nommez le bucket products-manager
  4. Activez le mode Public si vous avez besoin d'URLs publiques (images produits)

Option 2 — Via MinIO Client (mc)

# Installer mc
brew install minio/stable/mc        # macOS
# ou
curl https://dl.min.io/client/mc/release/linux-amd64/mc -o /usr/local/bin/mc && chmod +x /usr/local/bin/mc

# Configurer l'alias
mc alias set local http://localhost:9000 minioadmin minioadmin

# Créer le bucket
mc mb local/products-manager

# Optionnel : rendre le bucket public (lecture)
mc anonymous set public local/products-manager

Option 3 — Script d'initialisation automatique

Products Manager inclut une commande de management pour initialiser le bucket au démarrage :

python manage.py init_storage

Cette commande crée le bucket s'il n'existe pas et configure les politiques d'accès requises.


Différences avec S3 en production

En production, Products Manager utilise OVH Object Storage (compatible S3). Quelques différences à connaître :

AspectMinIO (dev)OVH S3 (prod)
SSLDésactivé (MINIO_USE_SSL=false)Obligatoire (HTTPS)
Signed URLsGénérées localement, expiration courteSignées avec les credentials OVH, TTL configurable
ACL public-readConfiguré via mc anonymous set publicConfiguré via la politique bucket OVH
Endpointhttp://localhost:9000https://s3.<region>.perf.cloud.ovh.net
Credentialsminioadmin / minioadminClés OVH S3 dédiées

Les URLs d'objets suivent le même format dans les deux environnements : <endpoint>/<bucket>/<path/to/file>. Les signed URLs sont transparentes pour l'application.


Migration dev vers prod

Pour passer de MinIO (dev) aux variables S3 OVH (production), remplacez dans vos variables d'environnement :

# Développement (MinIO)
MINIO_ENDPOINT=http://localhost:9000
MINIO_ACCESS_KEY=minioadmin
MINIO_SECRET_KEY=minioadmin
MINIO_BUCKET=products-manager
MINIO_USE_SSL=false

# Production (OVH S3)
MINIO_ENDPOINT=https://s3.gra.perf.cloud.ovh.net
MINIO_ACCESS_KEY=<ovh_access_key>
MINIO_SECRET_KEY=<ovh_secret_key>
MINIO_BUCKET=products-manager-prod
MINIO_USE_SSL=true

Aucun changement de code n'est nécessaire. Le client S3 interne de Products Manager utilise ces variables de manière transparente.


Dépannage

Le bucket n'est pas créé automatiquement

Products Manager ne crée pas le bucket à la volée. Exécutez python manage.py init_storage ou créez le bucket manuellement via la console ou mc.

Access denied (403) sur les fichiers

  • Vérifiez que les credentials MINIO_ACCESS_KEY / MINIO_SECRET_KEY sont corrects.
  • Si vous tentez d'accéder à un fichier public, vérifiez que le bucket est bien configuré en lecture publique (mc anonymous set public local/products-manager).
  • En mode développement, certains services (Celery workers, conteneurs Docker) peuvent utiliser http://minio:9000 plutôt que http://localhost:9000 — vérifiez que MINIO_ENDPOINT reflète le nom du service Docker si l'accès se fait depuis un conteneur.

Erreur SSL en développement

Assurez-vous que MINIO_USE_SSL=false est bien défini. Si le client tente une connexion HTTPS sur le port 9000 sans certificat, la connexion échouera.

Données perdues après redémarrage Docker

Vérifiez que le volume minio_data est bien déclaré dans docker-compose.yml. Si MinIO est lancé sans volume persistant, toutes les données sont perdues à chaque docker compose down.