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

現在、M1チップ搭載のMacでDiscourseをDocker化する方法はないということですか?

d/boot_dev --init を実行した際に、以下のエラーが発生しました。

ActiveRecord::NoDatabaseError: データベースが見つかりません: discourse_development。利用可能なデータベース構成は config/database.yml にあります。(ActiveRecord::NoDatabaseError)

これは boot_dev スクリプトのバグなのか、それとも discourse_development データベースは別の場所で作成されるべきなのか分かりません。いずれにせよ、この変更で修正できました。

diff --git a/bin/docker/boot_dev b/bin/docker/boot_dev
index 89fdcf6f65..0e9c5ce7d5 100755
--- a/bin/docker/boot_dev
+++ b/bin/docker/boot_dev
@@ -122,6 +122,7 @@ echo "pnpm install..."

 if [ "${initialize}" = "initialize" ]; then
     echo "Migrating database..."
+    "${SCRIPTPATH}/rake" db:create
     "${SCRIPTPATH}/rake" db:migrate
     RAILS_ENV=test "${SCRIPTPATH}/rake" db:migrate

その後、OP の指示に従ってセットアッププロセスが正常に実行されました。

Discourse のコードベースに詳しくないので、これが正しい修正かどうかは分かりませんが、必要であれば PR を提出します。:slightly_smiling_face:

「いいね!」 6

はい、PRを作成してここにリンクしてください。ありがとうございます!

「いいね!」 4

完了しました!

「いいね!」 3

実行できるようになりましたか?

私も同じエラーが発生しました。docker rm -f /discourse_dev を実行し、再度 d/boot_dev --init を実行したところ、今回は動作しました。

注意:
フォルダが tmp/postgres ではなく data/postgres であることに気づきました。これも、「データベースのリセット」コマンドが data フォルダを削除することを目的としている理由です :slight_smile:

「いいね!」 2

Docker dev のインストールをもう一度試してみましたが、以下のエラーが発生します。

Caused by:
PG::ConnectionBad: connection to server on socket "/var/run/postgresql/.s.PGSQL.5432" failed: No such file or directory (PG::ConnectionBad)
        Is the server running locally and accepting connections on that socket?

しかし、サービスは起動しており(通常の Docker を使用しない「手動」インストールでは正常に動作します)、確認できます。

~/discourse_docker/discourse$ sudo service postgresql status
● postgresql.service - PostgreSQL RDBMS
     Loaded: loaded (/lib/systemd/system/postgresql.service; enabled; vendor preset: enabled)
     Active: active (exited) since Mon 2025-03-10 17:26:13 GMT; 6min ago
    Process: 2052109 ExecStart=/bin/true (code=exited, status=0/SUCCESS)
   Main PID: 2052109 (code=exited, status=0/SUCCESS)

Mar 10 17:26:13 black-knight systemd[1]: Starting PostgreSQL RDBMS...
Mar 10 17:26:13 black-knight systemd[1]: Finished PostgreSQL RDBMS.

Docker Dev は、Postgres 接続に関して特別な要件や異なるニーズがありますか?

「いいね!」 2

デフォルトの:debugログレベルは冗長すぎると感じました。SQLクエリが重要なエラーをかき消してしまいます。config/environments/development.rbではDISCOURSE_DEV_LOG_LEVELを設定できますが、d/railsスクリプトでこれができるかどうかはわかりません。

いずれにせよ、config/environments/development.rbで一時的にconfig.log_level = :infoにハードコーディングしたところ、問題は解決しました。他の人にも役立つかもしれません。

「いいね!」 1

Data Explorer プラグインを使用してこれを起動しようとしています。DE オートメーションを調べたいからです。

コンテナは起動しました。

次に、リポジトリをクローンして discourse/plugins ディレクトリにシンボリックリンクを作成することで、プラグインの「インストール」をなんとか完了しました (それが正しい方法でしたか?その点については、ガイドがもっと明確であればよかったのですが)。

UI を通してプラグインを有効にしました。しかし、アクセスしようとするとエラーが発生します。

ログに表示されるのはこれだけです。

Processing by DiscourseDataExplorer::QueryController#index as JSON
Completed 500 Internal Server Error in 62ms (ActiveRecord: 9.8ms (5 queries, 0 cached) | GC: 2.9ms)

これはどうすればよいですか?詳細はどこにありますか?

「いいね!」 1

マイグレーションは実行しましたか?

プラグインフォルダのシンボリックリンク設定はあまりうまくいきませんでした。

その結果、通常のフォルダに移動しました(スレッドの最後のコメントを参照してください)。

現在、Dockerボリューム、ファイルウォッチャー、シンボリックリンクとの間に互換性の問題があると考えています。

「いいね!」 2

@Arkshine、返信ありがとうございます! これが必要だと気づくべきだったのは何ですか? プラグインのインストールに関するチュートリアルを確認しましたが、チュートリアルが例として使用しているプラグインはマイグレーションを必要としないのだと思いますか?

その間、会社のプロキシ証明書をDockerコンテナに取り込む必要があるため、この問題が解決するかどうかはわかりません。Dockerはあまり使用したことがありません :frowning:

どのような問題を解決しようとしていますか?開発環境のインストールは、通常、インストールが実行されているローカルホスト(つまり、お使いのコンピューター)からのみアクセスできるように意図されています。

あるいは、認証システムのような証明書を必要とするものをデバッグしようとしていますか?

昨日、私のイメージを再度起動しようとしたところ、gemのダウンロードを求められました。

gemをインストール中...
https://rubygems.org/ からソースインデックスを取得中

エラーのためリトライ中 (2/4): Bundler::Fetcher::CertificateFailureError https://rubygems.org/ のSSL証明書を確認できませんでした。
中間者攻撃の可能性もありますが、ほとんどの場合、システムに検証に必要なCA証明書がありません。OpenSSL証明書に関する情報は、https://railsapps.github.io/openssl-certificate-verify-failed.html を参照してください。

エラーのためリトライ中 (3/4): Bundler::Fetcher::CertificateFailureError https://rubygems.org/ のSSL証明書を確認できませんでした。
中間者攻撃の可能性もありますが、ほとんどの場合、システムに検証に必要なCA証明書がありません。OpenSSL証明書に関する情報は、https://railsapps.github.io/openssl-certificate-verify-failed.html を参照してください。

エラーのためリトライ中 (4/4): Bundler::Fetcher::CertificateFailureError https://rubygems.org/ のSSL証明書を確認できませんでした。
中間者攻撃の可能性もありますが、ほとんどの場合、システムに検証に必要なCA証明書がありません。OpenSSL証明書に関する情報は、https://railsapps.github.io/openssl-certificate-verify-failed.html を参照してください。

https://rubygems.org/ のSSL証明書を確認できませんでした。
中間者攻撃の可能性もありますが、ほとんどの場合、システムに検証に必要な
CA証明書がありません。OpenSSL証明書に関する情報は、
https://railsapps.github.io/openssl-certificate-verify-failed.html を参照してください。

えっと…管理者アカウントのパスワードを忘れたらどうなりますか?開発環境全体を再インストールする必要がありますか?

メールが送信できないため、リセットは不可能です。

「いいね!」 1

コンソールを使用して新しいパスワードを設定したり、新しい管理者アカウントを作成したりできます。

「いいね!」 1

どのユーザーにもなれるルートがあります。

  http://localhost:4200/session/any-username/become 
「いいね!」 5

CLIでパスワードをリセットできるのは良いですね。

コン(欠点)は修正されたか知っていますか? :x: コン:Ubuntu上のネイティブ開発環境よりもわずかに遅く、MacOS上のネイティブインストールよりもはるかに遅くなります。?

すべての仕様を満たしているのに、なぜそうなるのでしょうか?

このローカル開発環境でバックアップを実行すると、次のエラーが発生します。

[2026-01-29 05:32:35] [STARTED]
[2026-01-29 05:32:35] 'system' has started the backup!
[2026-01-29 05:32:35] Marking backup as running...
[2026-01-29 05:32:35] Making sure '/src/tmp/backups/default/2026-01-29-053235' exists...
[2026-01-29 05:32:35] Making sure '/src/public/backups/default' exists...
[2026-01-29 05:32:35] Updating metadata...
[2026-01-29 05:32:35] Dumping the public schema of the database...
[2026-01-29 05:32:35] pg_dump: error: connection to server on socket \"/var/run/postgresql/.s.PGSQL.5432\" failed: FATAL:  Peer authentication failed for user \"postgres\"
[2026-01-29 05:32:35] EXCEPTION: pg_dump failed
/src/lib/backup_restore/creator.rb:173:in `dump_public_schema'
/src/lib/backup_restore/creator.rb:36:in `run'
/src/lib/backup_restore.rb:13:in `backup!'
/src/app/jobs/regular/create_backup.rb:10:in `execute'
/src/app/jobs/base.rb:318:in `block (2 levels) in perform'
/home/discourse/.bundle/gems/ruby/3.3.0/gems/rails_multisite-7.0.0/lib/rails_multisite/connection_management/null_instance.rb:49:in `with_connection'
/home/discourse/.bundle/gems/ruby/3.3.0/gems/rails_multisite-7.0.0/lib/rails_multisite/connection_management.rb:17:in `with_connection'
/src/app/jobs/base.rb:305:in `block in perform'
/src/app/jobs/base.rb:301:in `each'
/src/app/jobs/base.rb:301:in `perform'
/home/discourse/.bundle/gems/ruby/3.3.0/gems/sidekiq-7.3.9/lib/sidekiq/processor.rb:220:in `execute_job'
/home/discourse/.bundle/gems/ruby/3.3.0/gems/sidekiq-7.3.9/lib/sidekiq/processor.rb:185:in `block (4 levels) in process'
/home/discourse/.bundle/gems/ruby/3.3.0/gems/sidekiq-7.3.9/lib/sidekiq/middleware/chain.rb:180:in `traverse'
/home/discourse/.bundle/gems/ruby/3.3.0/gems/sidekiq-7.3.9/lib/sidekiq/middleware/chain.rb:183:in `block in traverse'
/src/lib/sidekiq/suppress_user_email_errors.rb:6:in `call'
/home/discourse/.bundle/gems/ruby/3.3.0/gems/sidekiq-7.3.9/lib/sidekiq/middleware/chain.rb:182:in `traverse'
/home/discourse/.bundle/gems/ruby/3.3.0/gems/sidekiq-7.3.9/lib/sidekiq/middleware/chain.rb:183:in `block in traverse'
/src/lib/sidekiq/discourse_event.rb:6:in `call'
/home/discourse/.bundle/gems/ruby/3.3.0/gems/sidekiq-7.3.9/lib/sidekiq/middleware/chain.rb:182:in `traverse'
/home/discourse/.bundle/gems/ruby/3.3.0/gems/sidekiq-7.3.9/lib/sidekiq/middleware/chain.rb:183:in `block in traverse'
/src/lib/sidekiq/pausable.rb:131:in `call'
/home/discourse/.bundle/gems/ruby/3.3.0/gems/sidekiq-7.3.9/lib/sidekiq/middleware/chain.rb:182:in `traverse'
/home/discourse/.bundle/gems/ruby/3.3.0/gems/sidekiq-7.3.9/lib/sidekiq/middleware/chain.rb:183:in `block in traverse'
/home/discourse/.bundle/gems/ruby/3.3.0/gems/sidekiq-7.3.9/lib/sidekiq/job/interrupt_handler.rb:9:in `call'
/home/discourse/.bundle/gems/ruby/3.3.0/gems/sidekiq-7.3.9/lib/sidekiq/middleware/chain.rb:182:in `traverse'
/home/discourse/.bundle/gems/ruby/3.3.0/gems/sidekiq-7.3.9/lib/sidekiq/middleware/chain.rb:183:in `block in traverse'
/home/discourse/.bundle/gems/ruby/3.3.0/gems/sidekiq-7.3.9/lib/sidekiq/metrics/tracking.rb:26:in `track'
/home/discourse/.bundle/gems/ruby/3.3.0/gems/sidekiq-7.3.9/lib/sidekiq/metrics/tracking.rb:134:in `call'
/home/discourse/.bundle/gems/ruby/3.3.0/gems/sidekiq-7.3.9/lib/sidekiq/middleware/chain.rb:182:in `traverse'
/home/discourse/.bundle/gems/ruby/3.3.0/gems/sidekiq-7.3.9/lib/sidekiq/middleware/chain.rb:173:in `invoke'
/home/discourse/.bundle/gems/ruby/3.3.0/gems/sidekiq-7.3.9/lib/sidekiq/processor.rb:184:in `block (3 levels) in process'
/home/discourse/.bundle/gems/ruby/3.3.0/gems/sidekiq-7.3.9/lib/sidekiq/processor.rb:145:in `block (6 levels) in dispatch'
/home/discourse/.bundle/gems/ruby/3.3.0/gems/sidekiq-7.3.9/lib/sidekiq/job_retry.rb:118:in `local'
/home/discourse/.bundle/gems/ruby/3.3.0/gems/sidekiq-7.3.9/lib/sidekiq/processor.rb:144:in `block (5 levels) in dispatch'
/home/discourse/.bundle/gems/ruby/3.3.0/gems/sidekiq-7.3.9/lib/sidekiq/config.rb:39:in `block in <class:Config>'
/home/discourse/.bundle/gems/ruby/3.3.0/gems/sidekiq-7.3.9/lib/sidekiq/processor.rb:139:in `block (4 levels) in dispatch'
/home/discourse/.bundle/gems/ruby/3.3.0/gems/sidekiq-7.3.9/lib/sidekiq/processor.rb:281:in `stats'
/home/discourse/.bundle/gems/ruby/3.3.0/gems/sidekiq-7.3.9/lib/sidekiq/processor.rb:134:in `block (3 levels) in dispatch'
/home/discourse/.bundle/gems/ruby/3.3.0/gems/sidekiq-7.3.9/lib/sidekiq/job_logger.rb:15:in `call'
/home/discourse/.bundle/gems/ruby/3.3.0/gems/sidekiq-7.3.9/lib/sidekiq/processor.rb:133:in `block (2 levels) in dispatch'
/home/discourse/.bundle/gems/ruby/3.3.0/gems/sidekiq-7.3.9/lib/sidekiq/job_retry.rb:85:in `global'
/home/discourse/.bundle/gems/ruby/3.3.0/gems/sidekiq-7.3.9/lib/sidekiq/processor.rb:132:in `block in dispatch'
/home/discourse/.bundle/gems/ruby/3.3.0/gems/sidekiq-7.3.9/lib/sidekiq/job_logger.rb:40:in `prepare'
/home/discourse/.bundle/gems/ruby/3.3.0/gems/sidekiq-7.3.9/lib/sidekiq/processor.rb:131:in `dispatch'
/home/discourse/.bundle/gems/ruby/3.3.0/gems/sidekiq-7.3.9/lib/sidekiq/processor.rb:183:in `block (2 levels) in process'
/home/discourse/.bundle/gems/ruby/3.3.0/gems/sidekiq-7.3.9/lib/sidekiq/processor.rb:182:in `handle_interrupt'
/home/discourse/.bundle/gems/ruby/3.3.0/gems/sidekiq-7.3.9/lib/sidekiq/processor.rb:182:in `block in process'
/home/discourse/.bundle/gems/ruby/3.3.0/gems/sidekiq-7.3.9/lib/sidekiq/processor.rb:181:in `handle_interrupt'
/home/discourse/.bundle/gems/ruby/3.3.0/gems/sidekiq-7.3.9/lib/sidekiq/processor.rb:181:in `process'
/home/discourse/.bundle/gems/ruby/3.3.0/gems/sidekiq-7.3.9/lib/sidekiq/processor.rb:86:in `process_one'
/home/discourse/.bundle/gems/ruby/3.3.0/gems/sidekiq-7.3.9/lib/sidekiq/processor.rb:76:in `run'
/home/discourse/.bundle/gems/ruby/3.3.0/gems/sidekiq-7.3.9/lib/sidekiq/component.rb:10:in `watchdog'
/home/discourse/.bundle/gems/ruby/3.3.0/gems/sidekiq-7.3.9/lib/sidekiq/component.rb:19:in `block in safe_thread'
[2026-01-29 05:32:35] Cleaning stuff up...
[2026-01-29 05:32:35] Removing '.tar' leftovers...
[2026-01-29 05:32:35] Marking backup as finished...
[2026-01-29 05:32:35] Notifying 'system' of the end of the backup...

どうすればよいですか?