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

こんにちは、

d/boot_dev --init を実行しようとすると、以下のエラーが発生します。

Errno::EACCES: Permission denied @ dir_s_mkdir - tmp
/src/config/boot.rb:23:in `<top (required)>'
/src/config/application.rb:16:in `require'
/src/config/application.rb:16:in `<top (required)>'
/src/Rakefile:7:in `require'
/src/Rakefile:7:in `<top (required)>'
/usr/local/bin/bundle:23:in `load'
/usr/local/bin/bundle:23:in `<main>'
(See full trace by running task with --trace)

解決方法についてご教示いただけますでしょうか?至る所で検索しましたが、解決策は見つかりませんでした。

追記:chmod -R 777 ~/discourse で解決しましたが、今度は以下のエラーが発生しています。

gifsicle worker: gifsicle not found; please provide proper binary or disable this worker (--no-gifsicle argument or :gifsicle => false through options)

「いいね!」 2

それは問題ではありません。最近、当社の使用を削除しましたので、この警告は気にする必要はありません。古い Discourse コードに対して作業されていませんか?

「いいね!」 4

いいえ、最近のリリースが原因でした。ただし、この DigitalOcean のチュートリアルに従ったところ、現在は正常に動作しています。

「いいね!」 2

この種のセットアップでプラグインを使用する方法は?
Install plugins on a self-hosted site の手順に従おうとしているのですが、そこには /var/discourse/containers/app.yml ファイルについて言及されていますが、私の discourse ディレクトリにはそのファイルが存在しません。

Discourse の開発環境の構築とパッチのテストは成功しましたが、本番インスタンスにパッチを適用するにはどうすればよいでしょうか?base をビルドし、その後 ./launcher rebuild app --run-image discourse/base:build を実行してみましたが、Discourse インスタンスが起動しないようです。

通常は syslog グループが不足しているというエラーが発生しますが、それをコメントアウトしてもサイトが起動しないままです。また、docker ログには特に目立ったエラーも記録されていません。

このような内容は基本的にドキュメント化していませんが、「diff」ファイルを生成し、リポジトリをクローンした後のフックで git apply を実行します。app.yml はフックをサポートしています。

セルフホスト型の単一コンテナ環境向けの簡易的な解決策としては、コードをその場で編集し、sv restart unicorn を実行するという方法があります。

「いいね!」 2

この問題についてここが最良の場所かどうかはわかりませんが、Apple M1搭載のMacでDockerを使用してDiscourseのインストールを完了できません。

d/boot_dev --initを実行した後、すべての依存関係に問題なくインストールされますが、「Migrating database」の段階になると、その状態が続き、CPUコアの1つを100%消費したまま進みません。

Dockerコンテナにログインして確認すると、bundle migrateタスクが100%で実行されていますが、PostgreSQLプロセスには明らかな活動が見られません。

何かアイデアがあれば、非常に助かります!

「いいね!」 1

仮想化サポートは非常に新しく、少し冒険的な感じになるのも無理はありません。

@pmusaraj / @david M1 で docker-dev を動かすことはできましたか?

「いいね!」 5

まだ試していません。

「いいね!」 2

M1 MacでDockerを使ってDiscourseを稼働できる方がいらっしゃれば、お知らせください。それまでの間、他のガイドに従って試してみます!ありがとうございます!

「いいね!」 1

今日少し試してみましたが、あなたと同じ段階でエラーに遭遇しました:

Invalid gemspec in [/usr/local/lib/ruby/gems/2.7.0/specifications/default/zlib-1.1.0.gemspec]: Malformed version number string specification_version
bundler: failed to load command: rake (/usr/local/bin/rake)

はい、ぜひ試してみてください。Discourse を M1 環境で毎日使用しているチームメンバーは私を含め複数人おり、非常にうまく動作しています!

もし問題が発生したら、お知らせください。

「いいね!」 2

お時間とご助力をいただき、誠にありがとうございます!少なくとも、私だけがこの状況で立ち往生しているわけではないようです。

こんにちは。Ember-CLI についての説明を追加し、Docker コンテナ内に进入せずに以下のコマンドをショートカットできるようにすべきだと考えます。

また、コンテナ内で上記のコマンドを実行しても動作しないようです。どうやらコンテナが 4200 ポートを公開していないようです。
Screenshot from 2021-05-02 15-48-51

d/boot_dev を編集して手動でポート 4200 を公開しました:

コンテナを再起動後、localhost:4200 にアクセスすると以下のエラーが表示されました:

discourse@discourse:/tmp$ cat error.dump.cab4cc444229d44fc0fce2deb8695880.log 
=================================================================================

ENV Summary:

  TIME: Sun May 02 2021 08:01:12 GMT+0000 (Coordinated Universal Time)
  TITLE: ember
  ARGV:
  - /usr/bin/node
  - /src/app/assets/javascripts/node_modules/.bin/ember
  - server
  - --proxy
  - http://localhost:3000
  EXEC_PATH: /usr/bin/node
  TMPDIR: /tmp
  SHELL: /bin/bash
  PATH:
  - /tmp/yarn--1619942449179-0.1910991449592403
  - /src/app/assets/javascripts/discourse/node_modules/.bin
  - /home/discourse/.config/yarn/link/node_modules/.bin
  - /src/app/assets/javascripts/node_modules/.bin
  - /home/discourse/.yarn/bin
  - /usr/libexec/lib/node_modules/npm/bin/node-gyp-bin
  - /usr/lib/node_modules/npm/bin/node-gyp-bin
  - /usr/bin/node_modules/npm/bin/node-gyp-bin
  - /usr/local/sbin
  - /usr/local/bin
  - /usr/sbin
  - /usr/bin
  - /sbin
  - /bin
  PLATFORM: linux x64
  FREEMEM: 8603062272
  TOTALMEM: 41962496000
  UPTIME: 612639
  LOADAVG: 3.32177734375,2.19580078125,1.47900390625
  CPUS:
  - Intel(R) Core(TM) i5-6500 CPU @ 3.20GHz - 3301
  - Intel(R) Core(TM) i5-6500 CPU @ 3.20GHz - 3300
  - Intel(R) Core(TM) i5-6500 CPU @ 3.20GHz - 3300
  - Intel(R) Core(TM) i5-6500 CPU @ 3.20GHz - 3301
  ENDIANNESS: LE
  VERSIONS:
  - ares: 1.15.0
  - brotli: 1.0.7
  - cldr: 35.1
  - http_parser: 2.9.3
  - icu: 64.2
  - modules: 64
  - napi: 7
  - nghttp2: 1.41.0
  - node: 10.23.0
  - openssl: 1.1.1g
  - tz: 2019c
  - unicode: 12.1
  - uv: 1.34.2
  - v8: 6.8.275.32-node.59
  - zlib: 1.2.11

ERROR Summary:

  - broccoliBuilderErrorStack: [undefined]
  - code: ECONNREFUSED
  - codeFrame: [undefined]
  - errorMessage: connect ECONNREFUSED 127.0.0.1:3000
  - errorType: [undefined]
  - location:
    - column: [undefined]
    - file: [undefined]
    - line: [undefined]
  - message: connect ECONNREFUSED 127.0.0.1:3000
  - name: Error
  - nodeAnnotation: [undefined]
  - nodeName: [undefined]
  - originalErrorMessage: [undefined]
  - stack: Error: connect ECONNREFUSED 127.0.0.1:3000
    at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1107:14)

=================================================================================

その後、bin/ember-cli の PORT を 3000 から 9292 に変更すると、すべて正常に動作しました。
Screenshot from 2021-05-02 17-55-24

どうやら ember-cli のバッシュスクリプトは ENV["UNICORN_PORT"] と正常に連携できないようです。

「いいね!」 1

Ember CLI は新しい(そして獲得に苦労した)開発です。@eviltrout が間もなくそれについてコメントできるはずです。

「いいね!」 3

はい、これは更新する必要があります。それまでの間、NO_EMBER_CLI 環境変数を 1 に設定することで無効にできます。

「いいね!」 5

おそらく自明のことかもしれませんが、@eviltrout さん、環境変数をどこで設定されているか教えていただけますか?

私は d/unicorn ファイルで以下のように試みました:

docker exec -it -u discourse:discourse discourse_dev /bin/bash -c "$CMD" -e NO_EMBER_CLI=1

しかし、うまくいきませんでした(localhost:9292 で「Ember CLI is Required in Development Mode」というメッセージが表示されたままです)。

d/boot_dev -e NO_EMBER_CLI=1

本日試してみたところ、私も同様の問題に遭遇しました。表示されたエラーは、Docker のアーキテクチャエミュレーションが inotify をサポートしていないことが原因でした(Discourse の開発ではこれを多用しています)。現時点では、x86_64 以外のアーキテクチャが検出された場合に d/boot_dev で警告を表示するように追加しました:

❯ d/boot_dev 
WARNING: Docker architecture is not x86_64.
Discourse development is unlikely to work using Docker's architecture emulation.
Please try a native development installation.

d/ember-cli ヘルパーを追加し、デフォルトでポート 4200 を転送するように設定しました。また、このトピックの上部にある情報も更新済みです。更新後、1 つのターミナルで d/rails s を、別のターミナルで d/ember-cli を実行してください。また、NO_EMBER_CLI を Docker に渡す変数の一つとして設定しましたので、必要に応じて利用可能です。

「いいね!」 6

@david 多分関係ないと思いますが、念のため:boot_dev スクリプトは、私が誤って Docker なしで実行した際に、x86_64 チェックで誤ったエラーを出力しました(ただし、「Docker デーモンが実行されていますか」という部分は正しいです)…

WARNING: Docker architecture is not x86_64.
Discourse development is unlikely to work using Docker's architecture emulation.
Please try a native development installation.
  ...(snip)...
Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?
「いいね!」 1

この画像と非常に明確な手順をありがとうございます!

d/boot_dev --init を実行した際、psql: error: FATAL: Peer authentication failed for user "postgres" というエラーが発生しました。

data/postgres/ 内の pg_hba.conf ではすべての認証方法を「trust」に設定していましたが、/etc/postgresql/13/main/ 内にもデフォルト設定(「peer」/「md5」)を持つ別のファイルが存在していました。

そのため、/etc/postgresql/13/main/pg_hba.conf を編集してすべての方法を trust に変更し、d/shell を実行して sv restart postgres で変更を反映させました。その後、d/bundle install; d/rake db:migrate RAILS_ENV=development; d/rake admin:create を手動で実行することで、処理を継続できました。

参考になれば幸いです!

「いいね!」 1