Я попытался установить частный экземпляр Discourse, следуя официальным инструкциям по адресу discourse/docs/INSTALL-cloud.md at main · discourse/discourse · GitHub. Несмотря на то, что скрипты выглядят крайне сложными, мне пришлось вручную изменить файлы container.yml и discourse-setup, чтобы настроить собственные параметры…
Проблема 1: Несмотря на сложность, скрипт установки не позволяет изменить открытые порты! Порты 80/443 нельзя использовать на моем сервере, так как они заняты nginx. Поэтому мне снова пришлось внести изменения в скрипт настройки, чтобы установить порты 3080/3443 в качестве необходимых портов для доступа к Discourse.
Затем мне удалось запустить все контейнеры. Осмотрев стек в Portainer, я обнаружил, что приложение запускается и бесшумно останавливается, а в логах нет достаточной информации о причине. Поскольку Redis и PostgreSQL не публикуют порты, может ли приложение Discourse не работать из-за невозможности подключения к этим компонентам? Что я упустил или сделал неправильно?
Похоже, что вы отклонились от стандартной установки, настроив отдельные контейнеры для Redis и Postgres, поэтому, боюсь, у меня нет готового решения для вашего случая. Как вы настроили параметры Redis в Discourse?
Ещё один момент — я вижу redis:4-alpine. Боюсь, вам нужно перейти на более новую версию Redis, так как Discourse требует версию 6.20 или выше. Однако я не думаю, что это является причиной вашей проблемы.
Скрипт настройки работает только для стандартной конфигурации. Если вы настраиваете что-то более сложное, вам придется вручную редактировать YAML-файл. Это гораздо проще, чем изменять сам скрипт.
Если вы не планируете использовать предоставленные PostgreSQL и Redis, то вам придется самостоятельно разбираться, почему ваша конфигурация не работает. Причин может быть слишком много, и мы не можем их предположить или вывести. Я рекомендую сначала выполнить стандартную установку на отдельной виртуальной машине, чтобы понять, как всё работает, прежде чем пытаться настроить сложную конфигурацию.
Я не выполнял никакой «нестандартной» установки! Как и указано в документации, я загрузил весь необходимый контент с GitHub, изменил только отображаемые порты и запустил скрипт:
Я не вносил никаких изменений в конфигурацию Redis или PostgreSQL.
Я не менял версию Redis.
Эти компоненты программного обеспечения были установлены с помощью оригинального скрипта discourse-setup.
@pfaffman, что вы имеете в виду под «редактированием yml вручную»? О каком именно файле yml идёт речь? В директории «containers» их множество…
Кстати, на этом сервере у меня уже настроен обратный прокси, конфигурация которого, кажется, проста: несколько файлов subdomain.conf, определяющих перенаправление с поддомена:80 на порт XXX. Это то, что требуется?
Я бы рекомендовал стандартную установку на отдельной виртуальной машине, чтобы понять, как всё работает, прежде чем пытаться реализовать очень сложную настройку.
Мне не нужна сложная настройка , я просто хочу запустить Discourse вместе с другими контейнерами, для чего и предназначен Docker…
В целом discourse-setup не устанавливает отдельные экземпляры PostgreSQL и Redis, и уж тем более версии 12 и 4.
Пожалуйста, опубликуйте вашу конфигурацию и изменения, которые вы внесли в container.yml и скрипты. Не забудьте удалить любые конфиденциальные настройки.
Также сообщите, на каком коммите репозитория discourse_docker вы находитесь.
Вы отредактировали как файл discourse-setup, так и файл, который будет перезаписан при обновлении discourse-docker. Изменение чего-либо, кроме вашего app.yml, однозначно является нестандартным.
Зачем? И что бы вы ни пытались изменить там, это не тот способ. Вам нужно внести эти изменения в свой app.yml.
Discourse не будет работать на нестандартном порту, поэтому это не стандартная установка.
Стандартная установка включает PostgreSQL и Redis в одном контейнере. Как было отмечено, вы используете неподдерживаемые версии Redis и PostgreSQL. Также можно выполнить установку в двух контейнерах, как описано здесь: Переход от одиночного контейнера к отдельным веб- и дата-контейнерам (вы можете использовать ./discourse-setup --two-container, чтобы discourse-setup создал отдельные дата- и веб-контейнеры, хотя это немного сложнее поддерживать — вам нужно знать, когда обновлять дата-контейнер).
удалить всё программное обеспечение, установленное с помощью изменённых скриптов (надеюсь, это легко обратимо).
снова скачать скрипт. Для текущей установки я использовал команду git clone https://github.com/discourse/discourse_docker.git /var/discourse: это нормально?
возможно, изменить некоторые настройки только в файле app.yml перед запуском ./discourse-setup.
запустить скрипт установки для стандартной установки (я предпочитаю один контейнер).
настроить nginx-прокси для маршрутизации discourse.example.com:80/443 к соответствующему контейнеру. Есть ли в документации подсказки по этому разделу?
Пожалуйста, дополните список, если я упустил какой-либо шаг!
Единственное, что будет установлено, — это Docker.
Выглядит хорошо.
Файл app.yml создаётся командой discourse-setup. Вы не сможете запустить discourse-setup, если он не имеет доступа к портам, но если вы изучите исходный код, то увидите, что можно использовать ./discourse-setup --skip-connection-test и запустить его в любом случае.
Ваш nginx будет отвечать за Let’s Encrypt, поэтому вам нужно закомментировать шаблон Let’s Encrypt. Я подозреваю, что это описано в теме о обратном прокси, на которую есть ссылки выше и ниже.
Вы не можете использовать ./discourse-setup для настройки Discourse, если другой сервер использует порт 80 или 443. Вам потребуется скопировать и отредактировать файл samples/standalone.yml в вашем любимом текстовом редакторе.
Я понимаю, что мне нужно изменить файл app.yml до запуска discourse-setup, как уже сказано во вступлении:
Вы не можете использовать ./discourse-setup для настройки Discourse, если другой сервер использует порт 80 или 443. Вам потребуется скопировать и отредактировать файл samples/standalone.yml в вашем любимом текстовом редакторе.
Можете ли вы подтвердить следующий процесс:
загрузить всё содержимое из GitHub;
один раз запустить discourse-setup с опцией --skip-connection-test — это создаст контейнеры и файл app.yml;
изменить app.yml, как описано в документации выше;
обновить программное обеспечение командой /var/discourse/launcher rebuild app;
создать сайт nginx, указывающий на сокет Discourse, и перезапустить nginx;
наконец, запустить браузер и перейти на Discourse по адресу https://discourse.mydomain.com, который просто указывает на IP-адрес сервера.
запустить discourse-setup один раз с опцией --skip-connection-test: всё прошло успешно до самого конца, где скрипт вернул
docker: Error response from daemon: driver failed programming external connectivity on endpoint app (784361985c928eb26b149d829f37882056562d9b1e77ef4ce71fbfe30c5d80b1): Error starting userland proxy: listen tcp4 0.0.0.0:443: bind: address already in use.
Мне это кажется нормальным, так как контейнер пытается использовать те же порты, что и существующий веб-сервер. Однако, поскольку контейнер Discourse не был создан (как показывает вывод docker container ls), я хотел бы получить ваше подтверждение этого перед дальнейшей настройкой nginx…
Вы имеете в виду «до запуска discourse-setup»? В таком случае, какой файл нужно изменить, ведь app.yml не существует до запуска скрипта? Я хочу установить приложение в одном контейнере: стоит ли мне снова запустить тот же скрипт discourse-setup или команду /var/discourse/launcher rebuild app?
Извините за беспокойство, но мне нужно быть на 100% уверенным, так как я точно не эксперт :
Я запускаю еще раз./discourse-setup --skip-connection-test --skip-rebuild (предыдущий запуск был без опции --skip-rebuild). Мне не нужно удалять то, что было установлено при предыдущем запуске.
Затем я редактирую существующий файл app.yml и закомментировываю порты (они уже закомментированы).
Вам больше никогда не нужно запускать discourse-setup (если только вы не измените объем оперативной памяти и не захотите обновить настройки памяти до рекомендуемых значений по умолчанию).
Просто отредактируйте порты и выполните пересборку.
При открытии браузера по адресу discourse.mydomain.com я попадаю… на экземпляр Nextcloud, работающий на сервере. Похоже, конфигурацию нужно исправить, так как трафик не правильно маршрутизируется в контейнер Discourse…
Я не хочу устанавливать NPM, так как прочитал, что это не надежный инструмент, а конфигурация для Discourse включает жесткое кодирование IP-адресов: стоит ли мне всё равно это сделать?