Skip to content

Latest commit

 

History

History
299 lines (209 loc) · 6.84 KB

File metadata and controls

299 lines (209 loc) · 6.84 KB

Configuration MinIO - Stockage S3

Ce document décrit la configuration du stockage S3 (MinIO) pour le projet CAL POC.

📦 Bucket unique

L'application utilise un seul bucket : cal-uploads

Organisation par préfixes

cal-uploads/
├── registrations/     # Certificats médicaux (PDF)
│   └── {random-id}-{filename}.pdf
├── gallery/          # Photos de la galerie
│   └── {random-id}-{filename}.jpg
├── sponsors/         # Logos des sponsors
│   └── {random-id}-{filename}.png
└── images/           # Autres images (fallback)
    └── {random-id}-{filename}.jpg

🚀 Démarrage automatique

Le bucket cal-uploads est créé automatiquement au démarrage de Docker Compose via le service minio-init.

Script d'initialisation

Fichier : scripts/init-minio.sh

Actions effectuées :

  1. ✅ Attend que MinIO soit prêt (healthcheck)
  2. ✅ Configure le client MinIO (mc)
  3. ✅ Crée le bucket cal-uploads (si inexistant)
  4. ✅ Configure l'accès public en lecture (s3:GetObject)
  5. ✅ Affiche un résumé de la configuration

Exécution

# Démarrer tous les services (inclut minio-init)
docker compose up -d

# Voir les logs d'initialisation
docker compose logs minio-init

# Redémarrer uniquement l'initialisation
docker compose restart minio-init

🔧 Configuration manuelle (alternative)

Si vous préférez créer le bucket manuellement :

Via la console MinIO

  1. Ouvrir http://localhost:9001
  2. Se connecter avec minioadmin / minioadmin123
  3. Aller dans BucketsCreate Bucket
  4. Nom : cal-uploads
  5. Access Policy : Public (lecture seule)

Via le client mc

# Installer le client MinIO
brew install minio/stable/mc  # macOS
# ou
wget https://dl.min.io/client/mc/release/linux-amd64/mc  # Linux

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

# Créer le bucket
mc mb local/cal-uploads

# Configurer l'accès public
mc anonymous set download local/cal-uploads

🔒 Politique d'accès

Lecture publique (GET)

Permet aux utilisateurs de voir les images/fichiers uploadés (galerie, sponsors) :

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": { "AWS": ["*"] },
      "Action": ["s3:GetObject"],
      "Resource": ["arn:aws:s3:::cal-uploads/*"]
    }
  ]
}

Upload privé (PUT/POST)

Les uploads sont protégés :

  • Authentification via credentials MinIO (API backend uniquement)
  • Rate limiting (10 uploads/minute par IP)
  • Validation des fichiers (type MIME, taille, extension)

📝 Variables d'environnement

Fichier : .env.local

# MinIO / S3 Configuration
S3_ENDPOINT=http://localhost:9000        # Endpoint MinIO (dev)
S3_REGION=eu-west-1                      # Région fictive (MinIO)
S3_BUCKET_NAME=cal-uploads               # Nom du bucket
S3_ACCESS_KEY_ID=minioadmin              # Access Key
S3_SECRET_ACCESS_KEY=minioadmin123       # Secret Key

# URL publique pour les fichiers (frontend)
NEXT_PUBLIC_S3_PUBLIC_URL=http://localhost:9000/cal-uploads

Production (AWS S3)

Pour utiliser AWS S3 en production :

S3_ENDPOINT=                                    # Laisser vide pour AWS
S3_REGION=eu-west-1                             # Région AWS
S3_BUCKET_NAME=cal-uploads-prod
S3_ACCESS_KEY_ID=AKIAXXXXXXXXXXXXX
S3_SECRET_ACCESS_KEY=xxxxxxxxxxxxxxxxxxxxxxxxx
NEXT_PUBLIC_S3_PUBLIC_URL=https://cal-uploads-prod.s3.eu-west-1.amazonaws.com

🧪 Tester le stockage

Upload via API

# Upload d'une image (galerie)
curl -X POST http://localhost:3000/api/uploads/image \
  -F "file=@photo.jpg" \
  -F "context=gallery"

# Upload d'un certificat médical
curl -X POST http://localhost:3000/api/uploads/registration \
  -F "file=@certificat.pdf" \
  -F "turnstile-token=dev-bypass"

Vérifier le bucket

# Lister les fichiers
mc ls local/cal-uploads

# Lister par préfixe
mc ls local/cal-uploads/gallery/
mc ls local/cal-uploads/registrations/
mc ls local/cal-uploads/sponsors/

# Télécharger un fichier
mc cp local/cal-uploads/gallery/abc123-photo.jpg ./

📊 Monitoring

Console MinIO

URL : http://localhost:9001

Métriques disponibles :

  • Espace disque utilisé
  • Nombre d'objets par bucket
  • Trafic réseau (upload/download)
  • API calls

Logs

# Logs du service MinIO
docker compose logs -f minio

# Logs de l'application (uploads)
docker compose logs -f web | grep upload

🛠️ Maintenance

Nettoyer les anciens fichiers

# Supprimer les fichiers de test
mc rm --recursive --force local/cal-uploads/test/

# Supprimer un fichier spécifique
mc rm local/cal-uploads/gallery/old-photo.jpg

Backup du bucket

# Backup local
mc mirror local/cal-uploads ./backups/cal-uploads/

# Backup vers S3 AWS
mc mirror local/cal-uploads s3-prod/cal-uploads-backup/

Restaurer le bucket

# Depuis backup local
mc mirror ./backups/cal-uploads/ local/cal-uploads/

# Depuis S3 AWS
mc mirror s3-prod/cal-uploads-backup/ local/cal-uploads/

🐛 Dépannage

Le bucket n'existe pas

Erreur : NoSuchBucket: The specified bucket does not exist

Solution :

# Relancer l'initialisation
docker compose restart minio-init

# Ou créer manuellement
mc mb local/cal-uploads

Accès refusé (403)

Erreur : AccessDenied: Access Denied

Solutions :

  1. Vérifier les credentials dans .env.local
  2. Vérifier la politique d'accès du bucket
  3. Vérifier que le bucket est bien public en lecture
mc anonymous get local/cal-uploads
# Devrait afficher : download

Fichiers non accessibles publiquement

Problème : Les URLs retournent 403 Forbidden

Solution : Configurer l'accès public

mc anonymous set download local/cal-uploads

Script d'initialisation échoue

Erreur : Permission denied sur /init-minio.sh

Solution :

# Rendre le script exécutable (Linux/macOS)
chmod +x scripts/init-minio.sh

# Ou reconstruire le service
docker compose down minio-init
docker compose up -d minio-init

📚 Références

🔗 Liens utiles


Dernière mise à jour : 2025-01-23