Install Discourse for development using Docker

Ich vermute, das sollte d/rake admin:create sein …

Leider nein :frowning:
OCI runtime exec failed: exec failed: unable to start container process: exec: "bin/rake": stat bin/rake: no such file or directory: unknown

Was war das Ergebnis von: d/boot_dev --init?

Verwende Quelle in: /home/martyn/discourse
Verwende Daten in:   /home/martyn/discourse/data/postgres
release: Ziehe von discourse/discourse_dev
Digest: sha256:b64199f510bd9831af81ba8268bef3beff2abb45d0a264a0e29b35cfc3986f05
Status: Image ist auf dem neuesten Stand für discourse/discourse_dev:release
docker.io/discourse/discourse_dev:release
docker: Fehlerantwort vom Daemon: Konflikt. Der Containername "/discourse_dev" wird bereits von Container "44c83548a9a9060716aa7d4fd803e239227f48375625f1d27da19b3d4162c56a" verwendet. Sie müssen diesen Container entfernen (oder umbenennen), um diesen Namen wiederverwenden zu können.
Siehe 'docker run --help'.

OK, Sie haben den Container erstellt.

Das ist sehr seltsam. Ich habe gerade WSL neu installiert und es hat bei mir funktioniert, obwohl ich d/exec yarn manuell ausführen musste.

Ich schlage vor, Sie stoppen, löschen Ihren Container und starten ihn neu und achten Sie auf Fehlermeldungen in der Konsole.

2 „Gefällt mir“

Ich arbeite daran, eine Discourse-Entwicklungsumgebung mit den Docker-Anweisungen einzurichten, und sehe Fehler, wenn ich Befehle von Yarn ausführe. Die Ruby-Befehle funktionieren einwandfrei, aber die Ausführung von d/yarn (und seinen Unterbefehlen) schlägt mit diesem Fehler fehl:

discours(v3.1.3) $ d/exec yarn -v

<--- Letzte GCs --->


<--- JS-Stacktrace --->


#
# Fatal javascript OOM in MemoryChunk allocation failed during deserialization.
#

Ich verwende Fedora 39 mit Docker 24.0.7. Ich habe nichts geändert, außer Discourse von Git auszuchecken und zum Tag v3.1.3 zu wechseln.

Hat jemand diesen Fehler schon einmal gesehen? Danke!

Es scheint, als ob ihm der Arbeitsspeicher ausgeht:

Wie viel RAM hat er?

Meine Maschine hat 64 GB RAM, und ich glaube nicht, dass ich irgendwelche Limits für die Speichernutzung von Docker festgelegt habe. Ich habe nur eine Standard-Docker-Installation laufen.


Bearbeiten: Es ist interessant, Node-Befehle funktionieren, aber Yarn schlägt fehl:

discourse(v3.1.3*) $ d/exec node -v
v18.17.1
discourse(v3.1.3*) $ d/exec yarn -v


<--- Last few GCs --->


<--- JS stacktrace --->


#
# Fatal javascript OOM in MemoryChunk allocation failed during deserialization.
#

Ein kurzes Update: Node-Befehle schlagen bei weiteren Tests ebenfalls fehl:

discourse(v3.1.3*) $ d/exec node --help

<--- Last few GCs --->


<--- JS stacktrace --->


#
# Fatal javascript OOM in MemoryChunk allocation failed during deserialization.
#

Alles andere als d/exec node -v wirft diesen Fehler. :thinking: Ich werde weiter untersuchen und versuchen, eine Lösung zu finden.

Ich habe eine Lösung für mein Problem gefunden. Es ist ein etwas umständlicher, hacky Prozess, aber er funktioniert. Zusammenfassend lässt sich sagen, dass ein Upgrade auf Node.js 20.x.x mein Problem behoben hat.

Ich habe ein Docker-Image erstellt, das Node.js v20.x.x anstelle des Standard-v18.x.x verwendet, das das Discourse-Entwickler-Docker-Image nutzt.

Ich habe damit begonnen, diese Dockerfile zu erstellen:

# NAME: discourse_node20
FROM discourse/discourse_dev:release

# Upgrade Node auf LTS 20.x.x
ENV NODE_MAJOR=20
RUN apt-get update
RUN apt-get install -y ca-certificates curl gnupg
RUN mkdir -p /etc/apt/keyrings
RUN curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg
RUN echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_$NODE_MAJOR.x nodistro main" | tee /etc/apt/sources.list.d/nodesource.list
RUN apt-get update
RUN apt-get install nodejs -y

Dann habe ich das Image gebaut: docker build -t discourse_node20 - < Dockerfile

Dann habe ich den docker run-Befehl von d/boot_dev aktualisiert, um das discourse_node20-Image zu verwenden und discourse/discourse_dev:release nicht zu pullen, da es nicht verwendet wird. Hier ist der aktualisierte Befehl in d/boot_dev:

# Kommentar die folgende Zeile aus
# docker pull discourse/discourse_dev:release
docker run \
    -d \
    -p $local_publish:8025:8025 \
    -p $local_publish:3000:3000 \
    -p $local_publish:4200:4200 \
    -p $local_publish:9292:9292 \
    -p $local_publish:9405:9405 \
    -v "$DATA_DIR:/shared/postgres_data:delegated" \
    -v "$SOURCE_DIR:/src:delegated" \
    -e UNICORN_BIND_ALL=true \
    -e NODE_OPTIONS=--max_old_space_size=8192 \
    $mount_plugin_symlinks \
    $ENV_ARGS \
    --hostname=discourse \
    --name=discourse_dev \
    --restart=always \
    discourse_node20 /sbin/boot

Von dort aus konnte ich erfolgreich d/boot_dev --init, d/rails s und d/ember-cli ausführen, was mir eine funktionierende Entwicklungsumgebung in Docker 24 und Fedora 39 verschafft hat.


Ich weiß nicht, warum Node 20.x.x das Problem behebt. Hoffentlich wird dies im Haupt-Entwicklungs-Image behoben. Ich würde gerne einen Pull-Request beitragen, aber das Upgrade einer Hauptabhängigkeit scheint für mich mehr als nur ein schneller PR zu sein. :smile_cat: Nun, zumindest bin ich vorerst nicht mehr blockiert!

Hat das jemand auf einem Raspberry Pi zum Laufen gebracht? (Ja, ich weiß, dass die Produktionskonfiguration unterstützt wird). Welche Änderungen/Konfigurationen sind erforderlich?

Ich erhalte:

WARNUNG: Die Plattform des angeforderten Images (linux/amd64) stimmt nicht mit der erkannten Host-Plattform (linux/arm64/v8) überein und es wurde keine spezifische Plattform angefordert

Und dann stürzt der Container ab und startet ständig neu.

UPDATE: Ah, ich sehe, dass noch kein unterstützendes Image eingeführt wurde? Vergleichen Sie:

https://hub.docker.com/r/discourse/base/tags

(was unterstützt wird)

mit

https://hub.docker.com/r/discourse/discourse_dev/tags

Für letzteres ist keine arm64-Version aufgeführt …

Hat jemand unter Mac OS (13.6.3) (Intel) Discourse in Docker erfolgreich zum Laufen gebracht und kann mitteilen, wie er den Fehler Error: Cannot find module 'esbuild' behoben hat?

Ich habe bemerkt, dass in der boot_dev-Anwendung yarn nie für das oberste Verzeichnis ausgeführt wird, sondern nur für app/assets/javascripts/discourse:

echo "Yarn install..."
"${SCRIPTPATH}/exec" yarn install --cwd app/assets/javascripts/discourse

Daher ist es sinnvoll, dass esbuild nicht installiert ist, da dies eine Abhängigkeit ist, die in der package.json auf oberster Ebene beschrieben ist.

Diese package.json kann jedoch nicht außerhalb des Containers installiert werden, da die falsche Version von esbuild installiert wird (Mac, nicht Linux… aber der Container benötigt Linux).

Sollte nicht in boot_dev direkt über dem Punkt “installing gems” eine Zeile stehen, die wie folgt aussieht?

echo "Installing top-level package.json ..."
"${SCRIPTPATH}/exec" yarn install

Wenn ich eine solche Zeile hinzufüge, kann ich den Migrationsschritt ohne esbuild-Fehler durchlaufen…

Wurde das behoben? Ich habe eine Installation zum Laufen gebracht, aber am nächsten Tag, als ich zurückkam und d/boot_dev ausführte, erhielt ich diese Warnung und kann meinen Container nicht mehr erstellen.

Die Entwicklung von Discourse funktioniert wahrscheinlich nicht mit der Architektur-Emulation von Docker.
Bitte versuchen Sie eine native Entwicklunginstallation.
Verwende Quellcode in: /Users/n_selvidge/discourse
Verwende Daten in:   /Users/n_selvidge/discourse/data/postgres```
1 „Gefällt mir“

Wie installiere ich die Discourse-Entwicklung über http_proxy?

Kontaktieren Sie den Proxy-Anbieter und stellen Sie sicher, dass diese Aufrufe zulässig sind.

Ich habe den gleichen Fehler erhalten, als ich d/rails s ausgeführt habe,

/home/discourse/.bundle/gems/ruby/3.2.0/gems/activerecord-7.0.8.1/lib/active_record/connection_adapters/postgresql_adapter.rb:87:in `rescue in new_client': Verbindung zum Server unter \"10.169.51.142\", Port 5432 fehlgeschlagen: Verbindung verweigert (ActiveRecord::ConnectionNotEstablished)
Läuft der Server auf diesem Host und akzeptiert TCP/IP-Verbindungen?

Jede Hilfe wird geschätzt!

d/rails s gibt zurück:
Fehlerantwort vom Daemon: Kein solcher Container: discourse_dev

Irgendwelche Vorschläge?

1 „Gefällt mir“

Haben Sie zuerst d/boot_dev ausgeführt?

1 „Gefällt mir“

Hallo, kann ich es stattdessen an 0.0.0.0 binden?

image

Ja, das habe ich eingegeben, danke. Um neu zu beginnen, gehe ich davon aus, dass ich den Container aus der Docker-GUI sowie den discourse-Repository-Ordner lösche?