MinIO
Strapi
CMS
Mis à jour le 1 janvier 2023

Configurer le plugin AWS S3 provider pour Strapi uploads avec Minio

Nous allons voir dans cet article comment configurer Strapi pour charger les fichiers de la mediathèque directement dans Minio.

L'intérêt de cette configuration est de pouvoir stocker les fichiers sur un serveur indépendant de Strapi. Minio offre également la possibilité de répliquer les données automatiquement sur d'autres instances de types S3 Storage, offrant dès lors plus de sécurité sur la conservation des données.

Qu'est-ce que le gestionnaire de contenu Strapi ?

Strapi est un framework open source pour développer des applications de contenu (CMS) qui permet de créer, gérer et diffuser du contenu de manière flexible et personnalisée. Il est basé sur Node.js et utilise une base de données pour stocker les données de contenu. Strapi offre une interface de gestion de contenu (CMA) pour faciliter la création et la gestion de contenu, ainsi que des API pour accéder aux données de manière programmatique. Il est particulièrement utile pour les développeurs qui souhaitent créer des sites Web ou des applications qui nécessitent une gestion de contenu avancée, comme les blogs, les portails d'information, les sites de commerce électronique, etc.

Qu'est-ce que Minio Object Storage ?

MinIO est un logiciel de stockage d'objets open source qui permet de stocker et de gérer des objets de données à grande échelle sur des serveurs distribués. Il s'agit d'une solution de stockage de données orientée objet qui peut être utilisée pour stocker tout type de données, y compris du texte, des images, de la vidéo, de l'audio et d'autres types de médias. MinIO est conçu pour être évolutif, hautement disponible et facile à utiliser, et il prend en charge une variété de protocoles de stockage d'objets, notamment S3 d'Amazon, Azure Blob Storage et Google Cloud Storage. Il peut être utilisé comme une alternative à d'autres solutions de stockage d'objets commerciales, comme Amazon S3, Azure Blob Storage et Google Cloud Storage.

Qu'est-ce que Strapi Upload provider ?

Strapi Upload Provider est une extension de Strapi qui permet aux utilisateurs de gérer les fichiers téléchargés dans leur application Strapi. Il permet de configurer différents fournisseurs de téléchargement, tels que Amazon S3, Google Cloud Storage, Azure Blob Storage et MinIO, pour stocker les fichiers téléchargés. L'extension Upload Provider vous permet également de configurer des règles de téléchargement pour contrôler les fichiers qui peuvent être téléchargés dans votre application, telles que la taille maximale du fichier, le type de fichier autorisé, etc. Elle vous permet également de gérer les fichiers téléchargés dans une interface de gestion de contenu (CMA), ce qui est pratique pour les utilisateurs qui souhaitent ajouter ou supprimer des fichiers de leur application Strapi.

Installation du plugin AWS S3 pour Strapi

On peut se référer à la documentation officielle.

Installation du provider

# using yarn
yarn add @strapi/provider-upload-aws-s3

# using npm
npm install @strapi/provider-upload-aws-s3 --save

Configuration du provider

Sous le répertoire config/, dans le fichier plugins.js(le créer si inexistant), ajouter la configuration suivante :

module.exports = ({ env }) => ({

...

  upload: {
    config: {
      provider: "aws-s3",
      providerOptions: {
        accessKeyId: env("UPLOAD_S3_ACCESS_KEY"),
        secretAccessKey: env("UPLOAD_S3_SECRET_ACCESS_KEY"),
        endpoint: env("UPLOAD_S3_ENDPOINT"),
        s3BucketEndpoint: true,
        s3ForcePathStyle: true,
        params: {
          Bucket: env("UPLOAD_S3_BUCKET"),
        },
      },
    },
  },
  
  ...
  
});

s3BucketEndpoint: true et s3ForcePathStyle: true sont des paramètres directement issus de l'API S3, et vont permettre d'adapter notre configuration à notre instance Minio.

En considérant que Minio est disponible sous l'adresse minio.mondomaine.com , et que les images seront stockées dans le dossier strapi du bucket monsiteweb

Dans le cas où l'on souhaite stocker les images dans un dossier spécifique pour un bucket donné dans Minio, les valeurs des variables d'environnement peuvent être :

UPLOAD_S3_BUCKET=strapi
UPLOAD_S3_ENDPOINT=minio.mondomaine.com/monsiteweb.
UPLOAD_S3_SECRET_ACCESS_KEY=my_minio_secret_access_key
UPLOAD_S3_ACCESS_KEY=my_minio_access_key

Configuration supplémentaire

Dans le fichier middleware.js sous le répertoire config/, il faut mettre à jour la configuration pour strapi::security de la manière suivante :

module.exports = [

  ...
  
  {
    name: "strapi::security",
    config: {
      contentSecurityPolicy: {
        useDefaults: true,
        directives: {
          "connect-src": ["'self'", "https:"],
          "img-src": [
            "'self'",
            "data:",
            "blob:",
            "dl.airtable.com",
            "minio.mondomaine.com",
          ],
          "media-src": [
            "'self'",
            "data:",
            "blob:",
            "dl.airtable.com",
            "minio.mondomaine.com",
          ],
          upgradeInsecureRequests: null,
        },
      },
    },
  },
  
  ...
  
];

Réglage du Bucket Minio

Par défaut, les accès au bucket sont privés. Il faut donc créer une policy pour rendre les fichiers du dossier strapi accessible publiquement.

Cela est rapidement configuré en utilisant le client mc de Minio.

mc config host add myminio minio.mondomaine.com access_key private_access_key

mc anonymous set download myminio/monsiteweb/strapi

Pour aller plus loin

Découvrez dans notre blog comment configurer Minio pour répliquer les données automatiquement vers une autre solution de type S3 Storage.

Nous développons votre business en ligne.

Des projets made in Kalixys

Nous aimons la culture du partage. Et nous l'appliquons. Vous souhaitez suivre nos projets déployées pour nos différents clients, être informé de notre développement, ou connaître notre savoir-faire technique ? Laissez-nous votre email !

Abonnez-vous à notre newsletter

En cochant cette case, j'accepte que mon email soit utilisé pour recevoir la newsletter de Kalixys.

Aucun démarchage commercial ne sera effectué avec votre adresse email. Nous ne transmettrons pas votre email à nos partenaires. Lire notre politique de confidentialité