MinIO-Server für S3-kompatiblen Objektspeicher nutzen
MinIO ist eine Objektspeicher-Serverlösung, die S3-kompatibel ist und standardmäßig cloud-nativ konzipiert wurde. Sie lässt sich jedoch problemlos auf lokalen Servern, VPS-Instanzen oder Cloud-Servern bereitstellen und eignet sich als Alternative zu Amazon AWS S3 oder anderen Systemen. Bei korrekter Konfiguration ist sie mit Discourse kompatibel.
Dieser Abschnitt geht davon aus, dass in Ihrer Umgebung folgende Voraussetzungen erfüllt sind:
Sie verfügen über eine vollständig konfigurierte MinIO-Server-Instanz.
Die Unterstützung für Domains ist in der MinIO-Konfiguration aktiviert.
Die DNS-Konfiguration für MinIO ist ordnungsgemäß eingerichtet, sodass Bucket-Subdomains korrekt auf den MinIO-Server aufgelöst werden.
Der Bucket discourse-data existiert auf dem MinIO-Server und verfügt über eine „public“-Richtlinie.
Der Bucket discourse-backups existiert auf dem MinIO-Server und ist ein privater Bucket, in den Uploads abgelegt werden (nicht öffentlich erreichbar – die Standardrichtlinie für neue Buckets).
Ihre S3-CDN-URL ist eine ordnungsgemäß konfigurierte CDN, die auf den Bucket zeigt und Anfragen zwischenspeichert, wie zuvor in diesem Dokument beschrieben.
Wenn alle oben genannten Anforderungen erfüllt sind, können Sie sofort loslegen.
Ein Beispiel für eine Konfiguration sieht wie folgt aus:
Es funktioniert seit geraumer Zeit sowohl mit Subdomain- als auch mit Pfad-basierten Buckets. Die DNS-Konfiguration ist jedoch die schmerzhafteste Komponente – sie benötigt spezielle Wildcard-DNS-Regeln oder einen angepassten DNS-Server, der aktiv über alle vorhandenen Buckets Bescheid weiß. Ich habe dies in bind9 mit Wildcard-Zonen umgesetzt, doch bei Diensten wie Cloudflare oder anderen scheitert die Subdomain-Variante hart daran.
Falls du der Ansicht bist, dass das oben Genannte für diesen Abschnitt geeignet ist, kann ich es gerne einfügen. Es würde jedoch den Abschnitt zu ‘Einschränkungen’ enthalten – und ich würde mich über jegliche Vorschläge oder Reviews freuen, die du mir bezüglich der Formulierung usw. machen möchtest. (Hinweis: Ich habe keine CDN-URL aufgenommen, da ich in meiner Bereitstellung kein CDN verwende, weil Geld ($) etwas ist, womit ich nicht experimentieren kann.)
Können Nutzer, die MinIO nur für Discourse betreiben, die DNS-Einträge für die beiden Discourse-Buckets auch manuell erstellen?
Die Einschränkung in diesem Thema sollte ausreichen. Die Konfiguration von MinIO liegt außerhalb des Rahmens dieses Forums, aber vorausgesetzt, MinIO funktioniert, ist die Nutzung durch Discourse ein gültiger Anwendungsfall.
Richtig, aber wie du bereits sagtest, ist die Konfiguration nicht im Geltungsbereich. Daher werde ich lediglich festhalten, dass die Bucket-Subdomain-Pfade aufgelöst werden müssen (und die DNS-Konfiguration den ${ADMINS} der Instanz überlassen).
Ja, und ich habe das Wiki entsprechend bearbeitet. Allerdings betreibt MinIO (sofern mir bekannt ist) keinen Cloud-Service, daher habe ich den Eintrag „Dienstname" im Inhaltsverzeichnis des Wikis am Anfang leer gelassen. Passe ihn bei Bedarf entsprechend an.
Ich habe es ebenfalls angepasst: Der Anbieter ist selbst gehostet, aber der Abschnitt zu MinIO ist weiterhin verlinkt. Das sollte das Problem lösen, dass ich derzeit keine Cloud-Lösung des Anbieters finden konnte. (Du kannst diesen Thread jetzt schließen, wenn du möchtest, da er in den Wiki-Beitrag integriert ist.)
Zusätzlich wurde entdeckt (danke an den Open-Source-Code und die gute Dokumentation von MinIO!), dass CORS standardmäßig für alle MinIO-HTTP-Aktionsverben aktiviert ist – es müssen also keine CORS-Regeln installiert werden, da diese bereits vorhanden sind. Der Abschnitt zum selbst gehosteten MinIO wurde ebenfalls aktualisiert, sowie einige Grammatikverbesserungen vorgenommen.
Vielen Dank an @Falco für die Unterstützung bei der Fehlersuche in dem Problem, das mir während des Build- bzw. Rebuild-Vorgangs der App aufgefallen ist, sowie für die grundlegenden Hinweise zur CDN-Konfiguration mit StackPath (da ich einen voll funktionsfähigen Test durchführen wollte und ohnehin ein StackPath-CDN für etwas anderes nutze, konnte ich mit dem CDN-Stack verifizieren, dass alles funktioniert hat!)
Ich verstehe nicht, wie ich den Force Path Style einrichte. Wenn ich Version 2.6.8 mit Minio über die S3-Einstellungen konfiguriere, wird der Bucket-Name immer dem S3-Endpunkt vorangestellt, obwohl er als Pfad nach dem S3-Endpunkt angehängt werden sollte.
Es sieht auch aus den Konfigurationsbeispielen auf GitHub so aus, als ob die Option s3_force_path_style entfernt wurde. Übersehe ich etwas? Vielen Dank.
@ceelian
Discourse verwendet den DNS-Modus, nicht den Pfadmodus, für S3. Das ist schon SEIT EINER GANZEN WEILE so, deshalb erwähne ich nichts über den Pfadmodus in der Anleitung ODER auf der S3-Speicher-Anleitungsseite. Du solltest auch lernen, wie man neue Threads erstellt, anstatt einen alten Thread für etwas Unrelated wiederzubeleben.
@teward Danke für das Feedback. Entschuldigung für das Necromancing, ich bin den GitHub Issues gewohnt Ich werde einen neuen Thread starten, wie wir Discourse S3 im Pfadmodus verwenden können.
Sie haben Domain Support in der MinIO-Konfiguration aktiviert, für Domain-gesteuerte Bucket-URLs. Dies ist zwingend erforderlich und keine Option, es gibt keine pfadbasierten Unterstützung in Discourse für Bucket-Pfade.
Vor langer Zeit, als ich zum ersten Mal mit Discourse gearbeitet habe, gab es diese Option, dann wurde sie entfernt und ich musste MinIO als Backend nicht mehr verwenden. JETZT, da es in MinIO Dokumentationen gibt, wie man den DNS-Modus zum Laufen bringt (d. h. Bucket[.]server[.]com-Pfade jetzt wie S3), funktioniert es, wenn Sie MinIO richtig konfigurieren. (Vielen Dank an das Personal/die Moderatoren/das System, dass mein Vertrauenslevel erhöht wurde, um die Wiki selbst bearbeiten zu können.)