Install Discourse for development using Docker

Je soupçonne que cela devrait plutôt être d/rake admin:create

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

quel a été le résultat de : d/boot_dev --init ?

Utilisation de la source dans : /home/martyn/discourse
Utilisation des données dans : /home/martyn/discourse/data/postgres
release : Extraction de discourse/discourse_dev
Digest : sha256:b64199f510bd9831af81ba8268bef3beff2abb45d0a264a0e29b35cfc3986f05
Status : L'image est à jour pour discourse/discourse_dev:release
docker.io/discourse/discourse_dev:release
docker : Réponse d'erreur du démon : Conflit. Le nom du conteneur « /discourse_dev » est déjà utilisé par le conteneur « 44c83548a9a9060716aa7d4fd803e239227f48375625f1d27da19b3d4162c56a ». Vous devez supprimer (ou renommer) ce conteneur pour pouvoir réutiliser ce nom.
Voir 'docker run --help'.

OK, vous avez donc créé le conteneur.

C’est très étrange. Je viens d’installer sous WSL à partir de zéro et cela a fonctionné pour moi, bien que j’aie dû exécuter d/exec yarn manuellement.

Je vous suggère d’arrêter, de supprimer votre conteneur et de recommencer, en surveillant les erreurs annoncées dans la console.

2 « J'aime »

J’ai travaillé à la mise en place d’un environnement de développement Discourse avec les instructions Docker, et je rencontre des erreurs lors de l’exécution de commandes Yarn. Les commandes Ruby fonctionnent correctement, mais l’exécution de d/yarn (et de ses sous-commandes) échoue avec cette erreur :

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

<--- Derniers GCs --->


<--- Pile d'appels JavaScript --->


#
# OOM fatale en JavaScript, échec d'allocation de MemoryChunk lors de la désérialisation.
#

Je suis sous Fedora 39 avec Docker 24.0.7. Je n’ai rien modifié d’autre que de cloner Discourse depuis Git et de passer à la balise v3.1.3.

Quelqu’un a-t-il déjà vu cette erreur ? Merci !

On dirait qu’il manque de mémoire :

Combien de RAM possède-t-il ?

Ma machine dispose de 64 Go de RAM, et je ne pense pas avoir défini de limites à l’utilisation de la mémoire par Docker. J’ai juste une installation Docker standard en cours d’exécution.


Edit : c’est intéressant, les commandes Node fonctionnent mais Yarn échoue :

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.
#

Une mise à jour rapide : les commandes Node échouent également lors de tests supplémentaires :

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

<--- Last few GCs --->


<--- JS stacktrace --->


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

Tout ce qui n’est pas d/exec node -v génère cette erreur. :thinking: Je vais continuer à enquêter et essayer de trouver une solution.

J’ai trouvé une solution à mon problème. C’est un processus un peu compliqué et bancal, mais ça fonctionne. En résumé, la mise à niveau vers Node.js 20.x.x a résolu mon problème.

J’ai créé une image Docker qui utilise Node.js v20.x.x au lieu de la v18.x.x par défaut utilisée par l’image Docker de développement Discourse.

J’ai commencé par créer ce Dockerfile :

# NOM : discourse_node20
FROM discourse/discourse_dev:release

# mise à niveau de node vers 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

Ensuite, j’ai construit l’image : docker build -t discourse_node20 - < Dockerfile

J’ai ensuite mis à jour la commande docker run de d/boot_dev pour utiliser l’image discourse_node20 et ne pas tirer discourse/discourse_dev:release puisqu’elle n’est pas utilisée. Voici cette commande mise à jour dans d/boot_dev :

# commenter la ligne ci-dessous
# 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

À partir de là, j’ai pu exécuter avec succès d/boot_dev --init, d/rails s et d/ember-cli, ce qui m’a donné un environnement de développement fonctionnel dans Docker 24 et Fedora 39.


Je ne sais pas pourquoi Node 20.x.x résout le problème. J’espère que cela sera corrigé en amont dans l’image de développement principale. Je serais heureux de contribuer avec une pull request, mais la mise à niveau d’une dépendance majeure semble être quelque chose qui dépasse une simple contribution rapide de ma part. :smile_cat: Enfin, au moins je ne suis plus bloqué pour l’instant !

Quelqu’un a-t-il réussi à faire fonctionner cela sur un Raspberry Pi ? (oui, je sais que la configuration de production est prise en charge). Quelles modifications/configurations sont nécessaires ?

J’obtiens :

WARNING: The requested image's platform (linux/amd64) does not match the detected host platform (linux/arm64/v8) and no specific platform was requested

Et ensuite, le conteneur plante et redémarre constamment.

MISE À JOUR : Ah, je vois qu’une image compatible n’a pas encore été introduite ? Comparez :

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

(qui est pris en charge)

avec

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

Il n’y a pas de version arm64 listée pour cette dernière…

Quelqu’un sur Mac OS (13.6.3) (Intel) a-t-il réussi à faire fonctionner Discourse sous docker… et peut partager comment il a résolu l’erreur Error: Cannot find module 'esbuild' ?

J’ai remarqué dans l’application boot_dev que yarn n’est jamais exécuté pour le répertoire de niveau supérieur, seulement pour app/assets/javascripts/discourse :

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

Par conséquent, il est logique que esbuild ne soit pas installé, car il s’agit d’une dépendance décrite dans le package.json de niveau supérieur.

Cependant, ce package.json ne peut pas être installé en dehors du conteneur, car la mauvaise version d’esbuild sera installée (Mac, pas Linux… mais le conteneur a besoin de Linux).

Ne devrait-il pas y avoir une ligne dans boot_dev juste avant “installing gems” qui ressemble à ceci ?

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

Lorsque j’ajoute une ligne comme celle-ci, je peux passer l’étape des migrations sans erreur esbuild…

Ceci a-t-il été corrigé ? J’ai installé et lancé, mais le lendemain, quand je suis revenu et que j’ai exécuté d/boot_dev, j’ai reçu cet avertissement et il ne crée plus mon conteneur.

Le développement Discourse ne fonctionnera probablement pas en utilisant l'émulation d'architecture de Docker.
Veuillez essayer une installation de développement native.
Utilisation de la source dans : /Users/n_selvidge/discourse
Utilisation des données dans : /Users/n_selvidge/discourse/data/postgres```
1 « J'aime »

Comment installer le développement de Discourse via http_proxy ?

Contactez le fournisseur de proxy et assurez-vous que ces appels sont autorisés ?

J’ai obtenu la même erreur en exécutant d/rails s,

/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': connection to server at \"10.169.51.142\", port 5432 failed: Connection refused (ActiveRecord::ConnectionNotEstablished)
	Is the server running on that host and accepting TCP/IP connections?

Toute aide est appréciée !

d/rails s renvoie :
Erreur de réponse du démon : Aucun conteneur : discourse_dev

Des suggestions ?

1 « J'aime »

Avez-vous d’abord exécuté d/boot_dev ?

1 « J'aime »

Salut, puis-je le faire se lier à 0.0.0.0 à la place ?

image

Oui, je l’ai saisi, merci. Pour recommencer, je suppose que je dois supprimer le conteneur de l’interface graphique Docker ainsi que le dossier du dépôt discourse ?