Dockerを使用して開発用にDiscourseをインストールする

問題の修正方法を特定しました。少し複雑でハック的なプロセスですが、機能します。要約すると、Node.js 20.x.x にアップグレードしたことで問題が解決しました

Discourse の開発用 Docker イメージがデフォルトで使用する v18.x.x ではなく、Node.js v20.x.x を使用する Docker イメージを作成しました。

まず、この Dockerfile を作成しました。

# NAME: discourse_node20
FROM discourse/discourse_dev:release

# ノードを 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

次に、イメージをビルドしました: docker build -t discourse_node20 - < Dockerfile

その後、d/boot_devdocker run コマンドを更新し、discourse/discourse_dev:release をプルしないように、discourse_node20 イメージを使用するようにしました。これは使用されていないためです。以下は、d/boot_dev の更新されたコマンドです。

# 下の行をコメントアウト
# 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

そこから、d/boot_dev --initd/rails sd/ember-cli を正常に実行でき、Docker 24 および Fedora 39 で機能する開発環境が得られました。


Node 20.x.x が問題を解決する理由はわかりません。メインの開発イメージで上流で修正されることを願っています。プルリクエストを提供できればと思いますが、メジャーな依存関係のアップグレードは、私によるちょっとしたプルリクエストでは済まないことのように思えます。:smile_cat: まあ、少なくとも今はブロックが解除されました!