Par défaut Mayan stocke tout sur le système de fichiers local. Cette page explique comment basculer sur un stockage objet compatible S3 — plus adapté à un déploiement distribué ou à la réplication.
Mayan inclut déjà les dépendances nécessaires (boto3 et django-storages) dans son image Docker de production. Aucune installation supplémentaire n'est requise.
boto3==1.40.24
django-storages==1.14.6
Le backend Django à utiliser est storages.backends.s3boto3.S3Boto3Storage.
MinIO est toujours activement maintenu. La confusion vient d'un changement de licence en 2021 : l'édition communautaire est passée sous AGPL-3.0. En usage privé (self-hosted, sans redistribution du logiciel), l'AGPL n'impose aucune contrainte.
minio/minioGarage est un serveur S3 écrit en Rust, conçu pour être simple et résistant aux pannes réseau. Plus léger que MinIO, idéal pour une installation mono-nœud ou multi-sites.
dxfleurs/garage| Logiciel | Pour | Contre |
|---|---|---|
| SeaweedFS | Très performant, FS distribué | Configuration plus complexe |
| Ceph RGW | Enterprise, très complet | Infrastructure lourde |
| LocalStack | Développement/test uniquement | Non adapté à la production |
# À ajouter dans docker-compose.yml (ou docker/stack.yml)
minio:
image: minio/minio:latest
command: server /data --console-address ":9001"
environment:
MINIO_ROOT_USER: mayan
MINIO_ROOT_PASSWORD: un-mot-de-passe-fort
volumes:
- minio_data:/data
ports:
- "9000:9000" # API S3
- "9001:9001" # Console web
healthcheck:
test: ["CMD", "mc", "ready", "local"]
interval: 30s
timeout: 5s
retries: 3
restart: unless-stopped
volumes:
minio_data:
Créer les buckets avant de démarrer Mayan (via la console web http://localhost:9001 ou mc) :
mc alias set local http://localhost:9000 mayan un-mot-de-passe-fort
mc mb local/mayan-documents
mc mb local/mayan-cache
mc mb local/mayan-shared
mc mb local/mayan-downloads
Mayan a quatre backends de stockage à configurer indépendamment.
| Clé de config | Contenu stocké | Importance |
|---|---|---|
DOCUMENTS_FILE_STORAGE_BACKEND |
Les fichiers documents (PDF, images…) | Critique |
DOCUMENTS_FILE_PAGE_IMAGE_CACHE_STORAGE_BACKEND |
Cache des miniatures de pages | Régénérable |
DOCUMENTS_VERSION_PAGE_IMAGE_CACHE_STORAGE_BACKEND |
Cache des pages de versions | Régénérable |
STORAGE_DOWNLOAD_FILE_STORAGE |
Fichiers temporaires de téléchargement | Éphémère |
STORAGE_SHARED_STORAGE |
Fichiers partagés entre workers | Critique en multi-worker |
# ──────────────────────────────────────────────────
# Fichiers documents (bucket dédié — données critiques)
# ──────────────────────────────────────────────────
DOCUMENTS_FILE_STORAGE_BACKEND: storages.backends.s3boto3.S3Boto3Storage
DOCUMENTS_FILE_STORAGE_BACKEND_ARGUMENTS:
bucket_name: mayan-documents
access_key: mayan
secret_key: un-mot-de-passe-fort
endpoint_url: http://minio:9000 # URL interne Docker; https:// si TLS activé
region_name: us-east-1 # valeur arbitraire, requise par boto3
default_acl: private
file_overwrite: false # IMPORTANT : éviter d'écraser des fichiers
use_ssl: false # true si endpoint_url est https://
verify: false # true sauf si certificat auto-signé
# ──────────────────────────────────────────────────
# Cache des miniatures de pages de fichiers
# (régénérable automatiquement, peut rester en filesystem)
# ──────────────────────────────────────────────────
DOCUMENTS_FILE_PAGE_IMAGE_CACHE_STORAGE_BACKEND: storages.backends.s3boto3.S3Boto3Storage
DOCUMENTS_FILE_PAGE_IMAGE_CACHE_STORAGE_BACKEND_ARGUMENTS:
bucket_name: mayan-cache
access_key: mayan
secret_key: un-mot-de-passe-fort
endpoint_url: http://minio:9000
region_name: us-east-1
default_acl: private
file_overwrite: false
# ──────────────────────────────────────────────────
# Cache des miniatures de pages de versions
# ──────────────────────────────────────────────────
DOCUMENTS_VERSION_PAGE_IMAGE_CACHE_STORAGE_BACKEND: storages.backends.s3boto3.S3Boto3Storage
DOCUMENTS_VERSION_PAGE_IMAGE_CACHE_STORAGE_BACKEND_ARGUMENTS:
bucket_name: mayan-cache
access_key: mayan
secret_key: un-mot-de-passe-fort
endpoint_url: http://minio:9000
region_name: us-east-1
default_acl: private
file_overwrite: false
# ──────────────────────────────────────────────────
# Fichiers partagés entre workers (import, staging…)
# Obligatoire en S3 si plusieurs workers Celery tournent
# sur des machines différentes (pas de filesystem partagé)
# ──────────────────────────────────────────────────
STORAGE_SHARED_STORAGE: storages.backends.s3boto3.S3Boto3Storage
STORAGE_SHARED_STORAGE_ARGUMENTS:
bucket_name: mayan-shared
access_key: mayan
secret_key: un-mot-de-passe-fort
endpoint_url: http://minio:9000
region_name: us-east-1
default_acl: private
file_overwrite: false
# ──────────────────────────────────────────────────
# Fichiers de téléchargement temporaires
# ──────────────────────────────────────────────────
STORAGE_DOWNLOAD_FILE_STORAGE: storages.backends.s3boto3.S3Boto3Storage
STORAGE_DOWNLOAD_FILE_STORAGE_ARGUMENTS:
bucket_name: mayan-downloads
access_key: mayan
secret_key: un-mot-de-passe-fort
endpoint_url: http://minio:9000
region_name: us-east-1
default_acl: private
file_overwrite: false
| Paramètre | Valeur typique | Note |
|---|---|---|
endpoint_url |
http://minio:9000 |
Obligatoire pour tout S3 non-AWS |
region_name |
us-east-1 |
Valeur arbitraire mais requise |
file_overwrite |
false |
Évite les collisions de noms de fichiers |
default_acl |
private |
Les documents ne doivent pas être publics |
use_ssl |
false / true |
Selon si TLS est activé sur MinIO |
verify |
false |
Désactive la vérification TLS (certificat auto-signé) |
signature_version |
s3v4 |
Parfois nécessaire avec MinIO ou Garage |
addressing_style |
path |
À forcer si MinIO ne supporte pas le virtual-hosted style |
Le backend EncryptedPassthroughStorage peut s'enchaîner avec S3 :
DOCUMENTS_FILE_STORAGE_BACKEND: mayan.apps.storage.backends.encryptedstorage.EncryptedPassthroughStorage
DOCUMENTS_FILE_STORAGE_BACKEND_ARGUMENTS:
password: votre-passphrase-aes256
next_storage_backend: storages.backends.s3boto3.S3Boto3Storage
next_storage_backend_arguments:
bucket_name: mayan-documents
access_key: mayan
secret_key: un-mot-de-passe-fort
endpoint_url: http://minio:9000
region_name: us-east-1
default_acl: private
file_overwrite: false
Les fichiers sont chiffrés côté Mayan avant d'être envoyés dans le bucket — MinIO ne voit que des blobs opaques.
Mayan fournit la commande storage_process pour migrer les données existantes :
# Migrer les fichiers documents
./manage.py storage_process \
--log-level=INFO \
--storage-name=documents__documentfile
# Migrer le cache des pages
./manage.py storage_process \
--log-level=INFO \
--storage-name=documents__documentfileimage
Les noms de storage sont définis dans STORAGE_NAME_* dans les literals.py de chaque app.
Important : effectuer la migration avant de basculer la configuration, ou accepter un downtime. Les fichiers existants restent accessibles depuis l'ancien emplacement tant que la migration n'est pas terminée.
Après démarrage, vérifier dans les logs Mayan qu'aucune erreur de connexion S3 n'apparaît, puis uploader un document test et confirmer qu'il apparaît dans le bucket MinIO (via la console web ou mc ls local/mayan-documents).