Comment utiliser le serveur de stockage MinIO que vous gérez pour votre instance Discourse

Utilisation du serveur MinIO pour le stockage d’objets compatible S3

MinIO est une solution de serveur de stockage d’objets compatible S3, conçue nativement pour le cloud, mais facile à déployer sur des serveurs locaux, des VPS ou des serveurs cloud. Elle constitue une alternative à Amazon AWS S3 ou à d’autres systèmes et est compatible avec Discourse lorsqu’elle est correctement configurée.

Cette section suppose que les conditions suivantes sont réunies dans votre environnement :

  1. Vous disposez d’une instance de serveur MinIO entièrement configurée.
  2. La prise en charge des domaines est activée dans la configuration de MinIO.
  3. La configuration DNS pour MinIO est correctement définie afin que les sous-domaines des buckets résolvent correctement vers le serveur MinIO.
  4. Le bucket discourse-data existe sur le serveur MinIO et possède une stratégie « public ».
  5. Le bucket discourse-backups existe sur le serveur MinIO et est un bucket privé destiné aux uploads (non accessible publiquement – stratégie par défaut pour les nouveaux buckets).
  6. Votre URL CDN S3 est un CDN correctement configuré pointant vers le bucket et mettant en cache les requêtes, comme indiqué précédemment dans ce document.

Si toutes les exigences ci-dessus sont satisfaites, vous êtes prêt à commencer.

Voici un exemple de configuration :

DISCOURSE_USE_S3: true
DISCOURSE_S3_REGION: anything
DISCOURSE_S3_ENDPOINT: https://minio.example.com
DISCOURSE_S3_ACCESS_KEY_ID: myaccesskey
DISCOURSE_S3_SECRET_ACCESS_KEY: mysecretkey
DISCOURSE_S3_CDN_URL: https://discourse-data-cdn.example.com
DISCOURSE_S3_BUCKET: discourse-data
DISCOURSE_S3_BACKUP_BUCKET: discourse-backups
DISCOURSE_BACKUP_LOCATION: s3

Cela vous fournira une configuration MinIO de base, avec un serveur MinIO remplaçant Amazon S3.

4 « J'aime »

C’est une excellente nouvelle que MinIO fonctionne désormais correctement avec les buckets en style sous-domaine et soit à nouveau compatible avec Discourse.

Pourriez-vous modifier le wiki Utilisation du stockage objet pour les téléchargements (S3 et clones) afin d’y inclure les instructions pour MinIO ?

3 « J'aime »

Cela fonctionne depuis un certain temps avec les deux styles de buckets : sous-domaine et chemin. Cependant, le composant de configuration DNS est le plus douloureux : il nécessite des règles DNS wildcards spécifiques pour fonctionner, ou un serveur DNS personnalisé qui soit activement conscient de tous les buckets réels ou non. Je l’ai réalisé dans bind9 avec des zones wildcards, mais en le faisant sur Cloudflare ou d’autres, les éléments de style sous-domaine échouent lamentablement.

Si vous pensez que ce qui précède convient à cette section, je serai ravi de l’ajouter. Cela inclura cependant une section « avertissements », et j’apprécierais toute sortie ou révision que vous souhaiteriez que j’effectue au préalable pour la formulation, etc. (Notez que je n’ai pas inclus d’URL CDN car je n’ai pas de CDN dans mon déploiement, car l’argent n’est pas quelque chose avec quoi je peux expérimenter).

3 « J'aime »

Les utilisateurs qui exécutent MinIO uniquement pour Discourse peuvent-ils également créer manuellement les entrées DNS pour les deux buckets de Discourse, n’est-ce pas ?

La mise en garde dans ce sujet devrait suffire. La configuration de MinIO est complètement hors du champ d’application de ce forum, mais, étant donné un MinIO fonctionnel, faire en sorte que Discourse l’utilise constitue un cas d’usage valide.

2 « J'aime »

C’est exact, mais comme vous l’avez dit, la configuration est hors du périmètre. Je me contenterai donc de préciser que les chemins de sous-domaines des buckets doivent être résolus (et je laisserai la configuration DNS aux ${ADMINS} de l’instance).

2 « J'aime »

Oui, et j’ai modifié le wiki en conséquence. Cependant, à ma connaissance, MinIO ne propose pas de service cloud, donc j’ai laissé le champ « Nom du service » dans la table des matières du wiki au début vide. N’hésitez pas à l’ajuster si vous le souhaitez.

2 « J'aime »

Super ! Merci pour votre contribution !

1 « J'aime »

De rien !

Je l’ai également ajusté : le fournisseur est en auto-hébergement, mais la section MinIO reste liée. Cela devrait résoudre le fait qu’ils n’ont pas de solution cloud fournie que j’ai pu trouver pour le moment. (Vous pouvez fermer ce fil maintenant si vous le souhaitez, car il est intégré dans le message du wiki.)

3 « J'aime »

J’ai également découvert (merci au code open source et à la documentation de qualité de MinIO !) que CORS est déjà activé par défaut pour tous les verbes d’action HTTP de MinIO : il n’est donc pas nécessaire d’installer les règles CORS, elles sont déjà présentes. J’ai également mis à jour la section MinIO auto-hébergée, ainsi que quelques ajustements grammaticaux.

Merci à @Falco pour son aide dans le suivi du problème que j’avais remarqué pendant la construction/reconstruction de l’application, ainsi que pour les conseils de base concernant la configuration CDN avec StackPath (car je souhaitais un test pleinement fonctionnel, et j’utilise déjà le CDN StackPath pour autre chose, ce qui m’a permis de vérifier que tout fonctionnait bien avec la pile CDN !)

2 « J'aime »

Je ne comprends pas comment définir le style de chemin de force. Lorsque j’ai configuré la version 2.6.8 avec Minio via les paramètres S3, il ajoute toujours le nom du bucket au début du point de terminaison S3, alors qu’il devrait l’ajouter comme chemin après le point de terminaison S3.

Il semble également, d’après l’exemple de configuration sur GitHub, que l’option s3_force_path_style ait été supprimée. Est-ce que je manque quelque chose ? Merci.

@ceelian

Discourse utilise le mode DNS et non le mode chemin pour S3. C’est comme ça depuis LONGTEMPS, c’est pourquoi je ne spécifie rien sur le mode chemin dans le guide OU la page du guide de stockage S3. Vous devriez également apprendre à créer de nouveaux fils de discussion plutôt que de déterrer un vieux fil pour quelque chose d’inapproprié.

1 « J'aime »

@teward Merci pour vos commentaires. Désolé pour le déterrage, j’ai l’habitude de la façon d’écrire sur les problèmes GitHub :slight_smile: Je vais lancer un nouveau fil de discussion sur la façon dont nous pouvons utiliser Discourse en mode chemin S3.

Pour information : vous ne pouvez pas. Je ne pense pas que le mode chemin soit encore pris en charge, c’est pourquoi l’option permettant de forcer le mode chemin pour Discourse a disparu. C’est aussi pourquoi la section que j’avais initialement ajoutée à la page de configuration du stockage d’objets compatible S3 indique maintenant sous les mises en garde et les exigences :

  1. Vous avez activé la prise en charge des domaines dans la configuration MinIO, pour les URL de compartiments pilotées par domaine. Ceci est obligatoire et non une option, il n’y a pas de prise en charge basée sur les chemins dans Discourse pour les chemins de compartiments.

Il y a longtemps, lorsque j’ai commencé à travailler avec Discourse, ils avaient cette option, puis elle a été supprimée, et j’ai dû arrêter d’utiliser MinIO comme backend. MAINTENANT, comme il existe une documentation dans MinIO sur la façon de faire fonctionner le mode DNS (c’est-à-dire les chemins bucket[.]server[.]com comme S3 le fait), cela fonctionne lorsque vous configurez correctement MinIO. (Merci au personnel/modérateurs/système d’avoir augmenté mon niveau de confiance pour modifier le wiki lui-même maintenant).

2 « J'aime »

Merci pour la clarification et l’indice sur la façon de résoudre le problème !

Ce sujet a été automatiquement fermé 24 heures après la dernière réponse. Les nouvelles réponses ne sont plus autorisées.