Install Discourse for development using Docker

おそらく d/rake admin:create の間違いだと思います…

残念ながら、そうではありません :frowning:
OCI runtime exec failed: exec failed: unable to start container process: exec: "bin/rake": stat bin/rake: no such file or directory: unknown

d/boot_dev --init の結果はどうでしたか?

使用来源:/home/martyn/discourse
使用数据:  /home/martyn/discourse/data/postgres
release:正在从 discourse/discourse_dev 拉取
Digest:sha256:b64199f510bd9831af81ba8268bef3beff2abb45d0a264a0e29b35cfc3986f05
状态:镜像已是最新版本 discourse/discourse_dev:release
docker.io/discourse/discourse_dev:release
docker:守护进程的错误响应:冲突。容器名称 “/discourse_dev” 已被容器 “44c83548a9a9060716aa7d4fd803e239227f48375625f1d27da19b3d4162c56a” 使用。您必须删除(或重命名)该容器才能重用该名称。
请参阅 'docker run --help'。

わかりました、コンテナが構築されました。

それは非常に奇妙です。私はWSLにゼロからインストールしましたが、それは私にとって機能しました。ただし、d/exec yarnをを手動で実行する必要がありました。

コンテナを停止、削除して、もう一度やり直すことをお勧めします。コンソールで発表されたエラーに注意してください。

「いいね!」 2

Discourse の Docker 手順で開発環境を構築しようとしていますが、Yarn コマンドを実行するとエラーが発生します。Ruby コマンドは正常に動作しますが、d/yarn (およびそのサブコマンド) を実行すると、次のエラーが発生します。

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

<--- Last few GCs --->


<--- JS stacktrace --->

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

Fedora 39、Docker 24.0.7 を使用しています。Discourse を Git からチェックアウトし、v3.1.3 タグに変更した以外は何も変更していません。

このエラーを見たことがある人はいますか?よろしくお願いします!

メモリが不足しているようです。

RAMはどれくらい搭載されていますか?

私のマシンには64GBのRAMが搭載されており、Dockerのメモリ使用量に制限を設定したとは思いません。標準的なDockerインストールを実行しているだけです。


編集:興味深いことに、Nodeコマンドは機能しますが、Yarnは失敗します。

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

簡単なアップデートです。さらにテストしたところ、Node コマンドも失敗しました。

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

<--- Last few GCs --->


<--- JS stacktrace --->


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

d/exec node -v 以外のすべてで、そのエラーが発生します。:thinking: 引き続き調査し、解決策を見つけられるか試してみます。

問題の修正方法を特定しました。少し複雑でハック的なプロセスですが、機能します。要約すると、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: まあ、少なくとも今はブロックが解除されました!

Raspberry Piでこれを動作させた人はいますか?(本番環境の設定はサポートされていることは承知しています)。どのような変更/設定が必要ですか?

以下のエラーが発生します。

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

その後、コンテナがクラッシュして再起動を繰り返します。

更新:サポートされているイメージがまだ導入されていないことに気づきましたか?比較してください:

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

(これはサポートされています)

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

後者にはarm64バージョンがリストされていません…

Mac OS (13.6.3) (Intel) で Discourse を Docker で実行して、Error: Cannot find module 'esbuild' エラーを回避できた方はいらっしゃいますか?

boot_dev アプリケーションで、トップレベルのディレクトリではなく、app/assets/javascripts/discourse に対してのみ yarn が実行されていることに気づきました。

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

そのため、トップレベルの package.json で定義されている依存関係である esbuild がインストールされていないのは理にかなっています。

しかし、この package.json はコンテナ外ではインストールできません。間違ったバージョンの esbuild がインストールされてしまうからです(Mac用ではなく、コンテナにはLinux用が必要です)。

boot_dev に、「gem のインストール」の直前に、次のような行を追加すべきではないでしょうか?

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

そのような行を追加すると、esbuild エラーなしでマイグレーションステップを通過できます…

修正されましたか?インストールして起動しましたが、翌日戻ってきて d/boot_dev を実行したところ、この警告が表示され、コンテナが作成されなくなりました。

Discourse development is unlikely to work using Docker's architecture emulation.
Please try a native development installation.
Using source in: /Users/n_selvidge/discourse
Using data in:   /Users/n_selvidge/discourse/data/postgres```
「いいね!」 1

HTTP_PROXY経由でDiscourse開発をインストールする方法は?

プロバイダーに連絡し、それらの呼び出しが許可されていることを確認してください。

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?

どなたか助けていただけますでしょうか!

d/rails s を実行すると、以下のエラーが返ってきます。
Error response from daemon: No such container: discourse_dev

何か提案はありますか?

「いいね!」 1

d/boot_dev を先に実行しましたか?

「いいね!」 1

はい、0.0.0.0 にバインドするように変更できますか?

image

はい、入力しました。ありがとうございます。最初からやり直すには、Docker GUI からコンテナを削除し、discourse リポジトリフォルダも削除すればよいでしょうか?