Wir haben in einer Datei im Verzeichnis /var/www/discourse/app/views/layouts im App-Container einige Änderungen vorgenommen.
Dann dachten wir (wie Dummköpfe), wir könnten den Container einfach mit /var/discourse/launcher rebuild app neu aufbauen (falsch!), aber jedes Mal, wenn wir das tun, werden unsere Änderungen überschrieben.
Wir möchten Discourse nicht forken, aber wir möchten die App mit dem Launcher neu aufbauen, ohne dass unsere lokalen Änderungen überschrieben werden.
Es sieht so aus, als hätten wir herausgefunden, warum bei jedem Versuch unsere Dateien während des Neuaufbauprozesses in der App überschrieben wurden:
Der Grund scheint darin zu liegen, dass launcher das Basis-Discourse-Image herunterlädt. Dieses Image enthält ein Verzeichnis namens .git, und die Git-Konfigurationsdatei zeigt natürlich auf das Haupt-Discourse-Repository, was dann unsere Änderungen überschreibt:
launcher
pull_image() {
# Füge einen einzelnen Wiederholungsversuch hinzu, um DockerHub-TLS-Fehler zu umgehen
$docker_path pull $image || $docker_path pull $image
}
Zuvor haben wir fälschlicherweise angenommen, dass launcher das Image erstellt (wie haben wir das übersehen?!). Es ist nun klar, dass es ein Basis-Image von Docker Hub herunterlädt.
Zurück an den Zeichentisch!
Gibt es einen Flag, den wir setzen können, damit launcher das Basis-Image nicht herunterlädt, sondern stattdessen selbst erstellt?
Ich stimme dir absolut zu: Plugins und Theme-Komponenten sind der richtige Weg! Diese Methode wird vollständig unterstützt und sorgt dafür, dass man mit dem Meta-Entwicklungsteam synchron bleibt.
Es ist auch gut, neugierig zu sein, Möglichkeiten zu erkunden und ein tieferes Verständnis für Discourse zu entwickeln. Nachdem ich gestern diesen Beitrag gelesen hatte, habe ich ein lokales Docker-Registry eingerichtet, das Discourse-Basis-Image lokal getaggt, dieses Image in mein neues Docker-Registry (localhost) gepusht und anschließend eine Discourse-App neu erstellt, die das Discourse-Basis-Image aus dem lokalen Registry zieht.
Ich finde es spannend, zu experimentieren und mehr über Discourse zu lernen. Von dieser Systemadministrator-Exploration habe ich viel gelernt. Natürlich ist das nicht die Art und Weise, wie wir eine Produktionsanwendung betreiben würden. Aber ich habe viel daraus mitgenommen, wie man das Discourse-Basis-Image aus localhost statt remote zieht, und es war überraschend einfach. Deshalb habe ich diesen Experimentaufbau für andere neugierige Systemadministratoren dokumentiert:
Ich hoffe, andere Systemadministrator-Entdecker können auf irgendeine kleine Weise von diesem Experiment profitieren.
Es gibt eine super einfache Möglichkeit, dies umzusetzen, ohne sich um Bilder zu kümmern oder ein Plugin zu entwickeln. Wenn Sie nur vorhandene statische Dateien ändern, können Sie diese in der app.yml anpassen.
Suchen Sie nach hooks und pups. Mehrere andere Anleitungen verwenden bereits diesen Ansatz.
Selbst nach Experimenten mit dem lokalen Docker-Registry und dem lokalen Discourse-Basis-Image konnte ich keine konsistenten Ergebnisse erzielen (ich bin mir nicht sicher warum; ich muss wahrscheinlich ein wichtiges Detail in der Konfiguration übersehen haben).
Andererseits habe ich mehr über lokale Docker-Registries gelernt und wie man eine erstellt und verwaltet.
Nur ein kurzer Seitenblick auf ein Docker-Experiment… habe auf jeden Fall viel gelernt!