Install Discourse for development using Docker

Здравствуйте,

При запуске 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>'
(Полный трассировочный вывод можно получить, запустив задачу с флагом --trace)

Есть какие-то идеи, как это исправить? Я искал решение повсюду, но ничего не нашел.

Редактирование: исправил, выполнив chmod -R 777 ~/discourse, но теперь получаю эту ошибку:

gifsicle worker: gifsicle не найден; пожалуйста, предоставьте правильный бинарный файл или отключите этот воркер (аргумент --no-gifsicle или :gifsicle => false через параметры)

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 в хуке после клонирования репозитория. app.yml поддерживает хуки.

Быстрое и простое решение для самохостинга в одном контейнере — просто отредактировать код на месте и выполнить sv restart unicorn.

2 лайка

Не уверен, что это лучшее место для вопроса об этой проблеме, но я не могу завершить установку Discourse с помощью Docker на компьютере Apple M1.

После запуска команды d/boot_dev --init все зависимости устанавливаются без видимых проблем, но как только процесс доходит до шага Migrating database, он зависает, потребляя 100% одного из ядер процессора, и, похоже, не продвигается дальше.

Я пытался войти в контейнер Docker: задача bundle migrate выполняется с загрузкой 100%, но активность процесса PostgreSQL отсутствует.

Любые идеи будут очень полезны!

1 лайк

Я думаю, что поддержка виртуализации действительно совсем новая, поэтому неудивительно, что это немного приключение.

@pmusaraj / @david, у кого-нибудь получилось запустить docker-dev на M1?

5 лайков

Я ещё не пробовал.

2 лайка

Если кто-то может запустить Discourse с помощью Docker на Mac M1, пожалуйста, дайте знать. А пока я попробую следовать другому руководству! Спасибо!

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

Ручное открытие порта 4200 через редактирование файла d/boot_dev:

После перезапуска контейнера я обратился к 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)

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

После изменения PORT в файле bin/ember-cli с 3000 на 9292 всё заработало.
Screenshot from 2021-05-02 17-55-24

Похоже, что bash-скрипт 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

…но это не сработало (по-прежнему получаю сообщение «Ember CLI is Required in Development Mode» на localhost:9292).

d/boot_dev -e NO_EMBER_CLI=1

Сегодня я тоже попробовал это сделать и столкнулся с проблемами. Ошибка возникла из-за того, что эмуляция архитектуры в Docker не поддерживает inotify (который мы активно используем при разработке Discourse). На данный момент я добавил предупреждение в d/boot_dev, которое появляется при обнаружении архитектуры, отличной от x86_64:

❯ 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. Информация в верхней части этой темы также обновлена. После обновления запустите d/rails s в одном терминале и d/ember-cli в другом. Я также добавил переменную NO_EMBER_CLI в список переменных, передаваемых в Docker, так что она доступна при необходимости.

6 лайков

@david, вероятно, это не имеет значения, но просто к сведению: скрипт boot_dev выводит ложное сообщение об ошибке при проверке x86_64, когда я случайно запустил его без Docker на…(хотя часть «Запущен ли демон 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".

Хотя в файле pg_hba.conf в папке data/postgres/ все методы аутентификации были установлены в значение “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 лайк