Install Discourse for development using Docker

С моей виртуальной машины Ubuntu я смог выполнить ping rubygems.org. Не знаю, есть ли способ проверить, может ли это сделать контейнер Docker. Кажется, я пинговал только HTTP-версию, а не HTTPS. Упоминаю это на случай, если проблема связана с этим. (Одна из страниц, которую я нашел в Google, предлагала изменить https на http, но я не могу этого сделать, так как определенное поведение находится внутри контейнера Docker.)

1 лайк

Я пробовал варианты для macOS.

Сначала использовал вариант 2 — Homebrew. Однако возникли проблемы, так как не все зависимости были установлены с помощью команды из этого руководства. https://medium.com/@yutafujii_59175/a-complete-one-by-one-guide-to-install-docker-on-your-mac-os-using-homebrew-e818eb4cfc3 помогла мне продвинуться немного дальше.

Сейчас я застрял на Шаге 2 d/boot_dev --init:

Migrating database...

rake aborted!

PG::ConnectionBad: could not connect to server: No such file or directory

Is the server running locally and accepting

connections on Unix domain socket "/var/run/postgresql/.s.PGSQL.5432"?

/src/lib/site_settings/db_provider.rb:61:in `table_exists?'

/src/lib/site_settings/db_provider.rb:16:in `all'

/src/lib/site_settings/defaults_provider.rb:29:in `db_all'

/src/lib/site_setting_extension.rb:277:in `block in refresh!'

/src/lib/site_setting_extension.rb:274:in `synchronize'

/src/lib/site_setting_extension.rb:274:in `refresh!'

/src/lib/site_setting_extension.rb:495:in `block in setup_methods'

/src/config/initializers/004-message_bus.rb:120:in `<main>'

/src/config/environment.rb:7:in `<main>'

/usr/local/bin/bundle:23:in `load'

/usr/local/bin/bundle:23:in `<main>'

Tasks: TOP => db:migrate => db:load_config => environment

(See full trace by running task with --trace)

Затем я загрузил файл .dmg, но, так как я новичок в Docker, не понимаю, что делать дальше. Было бы здорово получить более подробное описание варианта для macOS.

Спасибо.

1 лайк

В macOS после установки Docker через файл .dmg убедитесь, что он запущен — в панели инструментов macOS должен появиться значок, по которому можно проверить его статус. Затем просто следуйте инструкциям из первого сообщения (клонирование и т. д.). Если у вас возникнут проблемы при использовании этого подхода, напишите здесь.

Обратите внимание: если вы ранее устанавливали Docker через Homebrew, возможно, стоит сначала удалить эту версию или хотя бы убедиться, что она не запущена. Я сам не устанавливал Docker через Homebrew, поэтому не могу дать конкретных рекомендаций по этому поводу.

2 лайка

Спасибо.

Я нажал на иконку и открыл панель управления Docker. Там я не увидел запущенных контейнеров, хотя в командной строке их несколько запущено. Подскажите, нужно ли войти в систему, чтобы использовать панель управления Docker? Или такое поведение связано с тем, что у меня установлено несколько версий Docker: через Homebrew и Desktop (.dmg)?

Тем временем мне удалось настроить Discourse на DigitalOcean, и всё работает без проблем, что меня устраивает.

1 лайк

DMG устанавливает Docker, а не Discourse. Изначально контейнеры добавлены не будут.

Далее вы можете следовать руководству по Docker.

2 лайка

При выполнении вышеуказанной команды (на Mac) я получаю эту ошибку:

Произошла ошибка при установке cppjieba_rb (0.3.3), и Bundler не может продолжить.

Убедитесь, что `gem install cppjieba_rb -v '0.3.3' --source 'https://rubygems.org/'` выполняется успешно

перед запуском bundler.

Есть ли у вас какие-либо предложения? Я точно не понимаю, в чём проблема. Отдельная установка gem тоже не работает (даже с sudo).

Также, почему gems нужно устанавливать, когда я запускаю образ docker? Это должно было быть полностью предустановлено, верно?

ОБНОВЛЕНИЕ: ИСПРАВЛЕНО

Я клонировал репозиторий в ~/repos/discourse, но следовало в ~/discourse. Теперь всё работает как по маслу.

3 лайка

Если при запуске d/unicorn вы получаете эту ошибку:

Could not find aws-partitions-1.284.0 in any of the sources
Run `bundle install` to install missing gems.

вы можете исправить это, выполнив:

docker exec -it -u discourse:discourse discourse_dev /bin/bash -c "cd /src && USER=discourse RUBY_GLOBAL_METHOD_CACHE_SIZE=131072 LD_PRELOAD=/usr/lib/libjemalloc.so RAILS_ENV=${RAILS_ENV:=development} bundle install"

после чего d/boot_dev запустится успешно.

3 лайка

Проще:

d/boot_dev
d/bundle install

У нас есть вспомогательные скрипты для всех стандартных задач.

5 лайков

В исходном сообщении сказано:

Рабочий процесс разработки Docker поддерживает символические ссылки в директории plugins/

К чему в данном контексте следует создать символическую ссылку для директории плагинов? Спасибо!

1 лайк
cd plugins
ln -s /полный/путь/к/вашему/плагину .
ln -s ~/src/my-great-plugin # например
6 лайков

А, спасибо, просто имеется в виду создание символической ссылки на каталог плагинов в данном контексте.

1 лайк

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

4 лайка

Привет! Я использую это руководство, и всё работает отлично, но меня беспокоит, что при запуске d/boot_dev начинается загрузка различных файлов. Как можно скачать необходимые файлы один раз и сохранить их для последующих запусков? Моя ОС — Ubuntu 20.04.

1 лайк

Попытка установки на свежую систему Mint 20. Docker доступен:

terrapop@terrapop:/var$ docker version
Client: Docker Engine - Community
 Version:           19.03.12

terrapop@terrapop:/var/discourse$ sudo systemctl status docker
● docker.service - Docker Application Container Engine
     Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset>
     Active: active (running) since Mon 2020-08-24 19:03:48 CEST; 31min ago

Затем клонировал Discourse:

sudo git clone GitHub - discourse/discourse_docker: A Docker image for Discourse · GitHub /var/discourse
cd /var/discourse

Однако выполнение d/boot_dev --init приводит к ошибке:

d/boot_dev --init

bash: d/boot_dev: Нет такого файла или каталога

Кто-нибудь может помочь?

1 лайк

Обновление: Я добавил ключи API SendGrid в файл app.yml, инициализировал приложение через ./launcher, и теперь оно работает на localhost. Возможно, все команды d/, упомянутые в исходном посте, устарели? Всё равно не понимаю. Приложение теперь работает в Docker на моём компьютере с Ubuntu (Mint) на localhost, как и на staging-сервере в Digital Ocean. Мы хотим разрабатывать на localhost, запустив приложение через Docker с символическими ссылками для плагинов, но не уверен, что всё готово, как должно быть, поскольку я не могу выполнить ни одну из команд d/. Кто-нибудь может помочь? Спасибо.

Обновление: Моя ошибка. Я использовал ссылку git для продакшена:

git clone GitHub - discourse/discourse_docker: A Docker image for Discourse · GitHub /var/discourse

Вместо:

git clone GitHub - discourse/discourse: A platform for community discussion. Free, open, simple. · GitHub

:cowboy_hat_face:

Однако…

Теперь столкнулся с новыми проблемами. Клонировать в /var можно только от суперпользователя/root на Ubuntu Mint 20 (UID 0). Поэтому, когда я клонирую и запускаю d/boot_dev --init, всё скачивается и запускается без проблем, но на более позднем этапе скрипт выдаёт ошибку прав доступа, так как ожидает выполнения действий от UID 1000 — это первый пользователь, созданный в Mint, то есть моя личная учётная запись (terrapop), а не root. Как обойти эту проблему?

Решение: Проще, чем я думал. Просто создайте новую папку www в /var. Измените владельца и права доступа к папке www на первого пользователя в Mint и продолжайте, как описано в постах из исходного сообщения. Теперь всё работает. Рад.

2 лайка

По какой-то причине символические ссылки на исходные директории моего плагина не работали, и мне пришлось вручную переместить / скопировать исходные директории плагинов в директорию plugins, чтобы они появились в /admin/plugins после перезапуска контейнера Docker.

Возможно, изменился способ поддержки символических ссылок в Docker? Я использую docker-ce 19.03.12 на Ubuntu.

1 лайк

Я тоже недавно столкнулся с этим в Docker Desktop для Mac.

1 лайк

Я выполнил те же шаги на droplet DigitalOcean за $5. Всё прошло успешно. Теперь как мне открыть доступ к моему сайту, чтобы я мог к нему подключиться?

P.S. Работает через ngrok. Пока не работает через обратный прокси nginx на порт 9292

Спасибо за это. Можно сделать это на сервере и избежать настройки обратного прокси nginx. Наслаждаюсь настройкой d/o docker + удалённый доступ через vscode :slight_smile:

Используйте d/unicorn -D, чтобы запустить unicorn как демон, чтобы после запуска сервера терминал оставался доступным.

Также вам нужен droplet DigitalOcean минимум за $10.

3 лайка

Я использую Mac с zsh (в iTerm2), и при попытке использовать символическую ссылку для разработки плагинов я сталкиваюсь с этой ошибкой:

readlink: illegal option -- f
usage: readlink [-n] [file ...]

Это происходит потому, что реализация команды readlink на Mac немного отличается от версии GNU.

Самый простой способ решить эту проблему — выполнить следующие действия:

# brew install coreutils
# ln -s "$(which greadlink)" "$(dirname "$(which greadlink)")/readlink"

Это даст вам возможность использовать совместимую версию readlink.

Помните, что значение dirname "$(which greadlink)" должно находиться в вашем PATH перед /usr/bin (где обычно находится оригинальный readlink). В моём случае PATH выглядит примерно так: /usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:..., а символическая ссылка на greadlink находится в /usr/local/bin.

Ссылка: Fixing "readlink: illegal option -- f" error on a Mac

5 лайков

Чтобы запустить набор тестов для одного плагина, выполните следующее:

# d/rake "plugin:spec[PLUGIN_NAME]"
1 лайк