Install Discourse for development using Docker

Правильно, на данный момент запустить Discourse в Docker на Mac с чипом M1 невозможно?

При запуске 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

После этого процесс настройки прошел успешно, следуя инструкциям в оригинальном посте.

Я недостаточно хорошо знаком с кодовой базой Discourse, чтобы знать, является ли это правильным исправлением, но я с радостью отправлю pull request, если это поможет. :slightly_smiling_face:

6 лайков

Да, пожалуйста, создайте PR и оставьте ссылку здесь. Спасибо!

4 лайка

Готово!

3 лайка

Получилось запустить?

У меня возникла та же ошибка. Я выполнил docker rm -f /discourse_dev и снова запустил d/boot_dev --init, и на этот раз всё сработало.

Внимание:
Я только что заметил, что папка называется data/postgres, а не tmp/postgres, поэтому команда «сбросить базу данных» предназначена для удаления папки data :slight_smile:

2 лайка

Я решил снова попробовать установку разработчика Docker, но постоянно получаю:

Причина:
PG::ConnectionBad: подключение к серверу через сокет "/var/run/postgresql/.s.PGSQL.5432" не удалось: нет такого файла или директории (PG::ConnectionBad)
        Запущен ли сервер локально и принимает ли он подключения через этот сокет?

При этом я могу подтвердить, что служба запущена (и работает при использовании моей обычной «ручной» установки Discourse без 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.log_level = :info прямо в config/environments/development.rb, и это решило мою проблему. Возможно, это поможет и другим.

1 лайк

Я пытаюсь запустить это с помощью плагина Data Explorer, так как хочу протестировать автоматизацию DE.

Мне удалось запустить контейнер.

Затем я, так сказать, «установил» плагин, клонировав репозиторий и создав символическую ссылку на него в директории discourse/plugins (правильно ли я понял? Руководство могло бы быть гораздо яснее в этом пункте).

Я активировал плагин через интерфейс. Однако при попытке доступа к нему возникает ошибка.

В логах отображается только следующее:

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:

Какую проблему вы решаете? Установка в режиме разработки обычно предназначена для доступа только с localhost (то есть с вашего компьютера), на котором выполняется установка.

Или, возможно, вы пытаетесь отладить что-то, что требует сертификата, например, систему аутентификации?

Когда я попытался запустить свой образ вчера, система попросила загрузить гемы?

Установка гемов...
Получение индекса источников из https://rubygems.org/

Повторная попытка получения из-за ошибки (2/4): Bundler::Fetcher::CertificateFailureError Не удалось проверить SSL-сертификат для https://rubygems.org/.
Возможно, вы стали жертвой атаки «человек посередине», но скорее всего в вашей системе отсутствуют необходимые сертификаты удостоверяющего центра (CA) для проверки. Информацию об SSL-сертификатах OpenSSL см. по адресу https://railsapps.github.io/openssl-certificate-verify-failed.html.

Повторная попытка получения из-за ошибки (3/4): Bundler::Fetcher::CertificateFailureError Не удалось проверить SSL-сертификат для https://rubygems.org/.
Возможно, вы стали жертвой атаки «человек посередине», но скорее всего в вашей системе отсутствуют необходимые сертификаты удостоверяющего центра (CA) для проверки. Информацию об SSL-сертификатах OpenSSL см. по адресу https://railsapps.github.io/openssl-certificate-verify-failed.html.

Повторная попытка получения из-за ошибки (4/4): Bundler::Fetcher::CertificateFailureError Не удалось проверить SSL-сертификат для https://rubygems.org/.
Возможно, вы стали жертвой атаки «человек посередине», но скорее всего в вашей системе отсутствуют необходимые сертификаты удостоверяющего центра (CA) для проверки. Информацию об SSL-сертификатах OpenSSL см. по адресу https://railsapps.github.io/openssl-certificate-verify-failed.html.

Не удалось проверить SSL-сертификат для https://rubygems.org/.
Возможно, вы стали жертвой атаки «человек посередине», но скорее всего в вашей системе отсутствуют
необходимые сертификаты удостоверяющего центра (CA) для проверки. Информацию об SSL-сертификатах 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
[2026-01-29 05:32:35] /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...

Что делать?