Hallo!
Wir haben ein Repository namens RPS Discourse Image Builder erstellt, das zum Erstellen eines Discourse OCI-Images verwendet wird. Ich denke, das könnte für einige Leute, die hier suchen, hilfreich sein. Wir haben dies hauptsächlich getan, damit wir nicht auf das langwierige Discourse-Deployment warten müssen und um Discourse-Versionen zuverlässig festlegen zu können.
Wir haben ein Skript geschrieben, das das discourse_docker Repo verwendet, um das Image auf die stabilste und allgemeinste Weise zu erstellen.
Es gibt auch eine Docker-Compose-Datei, die die für den Build erforderlichen Datenbanken und das Discourse-Image zum Testen hochfährt und für die lokale Entwicklung ausführt. Dies kann auf einem GitLab-Runner mit dem shell-Executor ausgeführt werden, erfordert jedoch ein System mit einer docker-compose-Version, die Profile unterstützt.
Ansatz
Das Build-Skript sollte innerhalb unserer CI/CD-Pipelines ausgeführt werden, damit wir die Version einfach aktualisieren können. Weitere Anpassungen erfolgen in verschiedenen Repositories mit Dockerfiles, die auf dem von diesem Repository erstellten Image basieren.
Hintergrund
Discourse ist eine sehr gute Software, aber nicht sehr einfach bereitzustellen und Versionen festzulegen. Dieses Repository wird verwendet, um ein Docker-Image zu erstellen, das zur Bereitstellung von Discourse verwendet werden kann.
Das Problem ist, dass Discourse eine sehr einzigartige Methode zum Erstellen seiner Docker-Images hat. Die Discourse-Entwickler erwarten, dass Sie das Image auf der Zielmaschine mit ihrem discourse_docker-Repo erstellen.
Es gab dazu ausführliche Diskussionen im Forum, TL;DR: Die führenden Discourse-Entwickler weigern sich, ein öffentliches Docker-Image zu unterstützen, das zur Bereitstellung von Discourse verwendet werden kann. Sie möchten das discourse_docker-Repo als einzigen offiziellen Weg zur Bereitstellung von Discourse beibehalten.
Die Hauptnachteile dieses Ansatzes sind:
- Nach unserer Erfahrung ist es nicht möglich, Discourse-Versionen zuverlässig festzulegen.
- Es dauert lange, das Image zu erstellen, und wenn das Image erstellt ist, ist der Dienst nicht verfügbar. Außerdem hat Discourse den längsten DevOps-Iterationszyklus aller von uns unterstützten Dienste.
- Datenbanken werden anders verwaltet als bei üblichen Docker-basierten Projekten.
- Die offizielle Discourse-Bereitstellungsstrategie ist mit OCI-basierten Entwicklungs- und Bereitstellungsworkflows wie Kubernetes oder sogar Docker-Compose unvereinbar.
- Der offizielle Discourse-Launcher trifft viele Annahmen über die Umgebung, in der er ausgeführt wird. Zum Beispiel weigert er sich, auf rootless Podman mit einer Fehlermeldung über fehlende Speicher-Volumes zu laufen, ohne dies mit einem Argument oder einer Umgebungsvariable umgehen zu können.