Один сервер для двух сообществ Discourse?

Понятно. Это имеет смысл. И я думаю, что для меня использование Mailgun будет вполне приемлемым.

Я лучше всё это пойму, когда начну настраивать мультисайт!

Вступаю в разговор, потому что я нахожусь в ситуации, схожей с ситуацией @alltiagocom: я установил Discourse на небольшой сервер Hetzner для своего основного сообщества, но в фоновом режиме думаю о том, чтобы перенести несколько других групп Facebook на Discourse, как только я полностью разберусь со всем.

Мне знакома концепция «WordPress Multisite», но я понимаю, что мультисайтовая установка в Discourse более сложна. Я задаюсь вопросом, что будет менее проблематичным: запуск двух (или более) независимых сайтов или использование мультисайтовой установки.

Есть ли какие-либо комментарии по этому поводу?

Мультисайт, безусловно, снизит нагрузку на обслуживание и избавит от головной боли, но ваш опыт может отличаться.

Для новичков в Discourse я рекомендую запускать всего два сайта.

Я создал тему о том, как запустить мульти-сайт без обратного прокси, но сейчас она устарела.

Думаю, нужно изменить только следующее:

на новый вариант:

DISCOURSE_HOSTNAME_ALIASES: domain.com,other.domain.com

Вот моё скромное мнение: я провёл весь день, работая над этим с помощью своих старых заметок, ChatGPT, Claude, AI-бота Discourse и некоторых тем, опубликованных здесь (и сделав ещё больше заметок о всём процессе).

Всё казалось работающим отлично, пока я не дошёл до момента, когда нужно было настроить обратный прокси. Мой первый экземпляр, который раньше работал без проблем, перестал работать. Я задал ещё несколько вопросов AI-боту Discourse, но так как это был мой первый день, он перестал отвечать. Это ограничение для новых пользователей бота. Claude, который до этого был очень полезен, тоже перестал отвечать, потому что я использую бесплатную версию. ChatGPT — наименее надёжный из всех, поэтому я всегда воспринимаю его ответы с большой долей сомнений…

Тогда я снова зашёл на форум и начал читать несколько тем по этой теме, некоторые из которых написал @pfaffman. Это стало последней каплей. Слишком сложно, слишком много технических терминов, чтобы я мог даже понять, что спросить.

Итог: мой первый экземпляр работал, поэтому я возвращаю его в исходное состояние (редактирую файл app.yml, откатывая изменения. Я пересобираю систему прямо сейчас, пока пишу это.

Честно говоря, учитывая всю сложность, хотя это и позволило бы мне добавить больше сообществ после преодоления первого большого препятствия, я не думаю, что экономия 4 долларов в месяц за одно дополнительное сообщество станет концом света. Поскольку я уже знаю, как настроить сервер в Hetzner и затем установить Discourse, я остановлюсь на двух сообществах, заплачу 8 долларов за оба и продолжу дальше. Учитывая, что несколько месяцев назад я платил 12 долларов за один дроплет в Digital Ocean, я готов потратить ту же сумму на три сообщества, если захочу.

В любом случае, мне всегда интересны такие приключения, потому что я узнаю что-то новое по пути, и в итоге, по крайней мере, я могу объяснить, почему я не хочу этого делать, вместо того чтобы просто говорить: «Я не буду этого делать, потому что не знаю, смогу ли».

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

:raising_hands:
Всё, на этом всё!

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

Я бы рекомендовал продолжать экспериментировать в свободное время, если вы хотите лучше понять, как работает дискурс. Именно так большинство из нас здесь этому научились.

Мне потребовалось гораздо больше времени, чем я готов признать, чтобы (в основном) разобраться в этом!

Я документирую установку поддерживаемого мультисайта Discourse в виде пошагового руководства (runbook).

Ранее я экспериментировал с подходом «несколько независимых установок на одном сервере», но такая конфигурация не поддерживается. Этот пост посвящен исключительно поддерживаемой мультисайтовой архитектуре, переписанной в линейном формате для тех, кто предпочитает четкие шаги.


Что это (поддерживаемое)

  • Один контейнер приложения Discourse (app)
  • Мультисайт включен через multisite.yml
  • Общий Postgres + Redis (управляется Discourse)
  • Соединение через unix-сокеты (сеть Docker не требуется)
  • Несколько имен хостов маршрутизируются к отдельным сайтам внутри

Что это не

  • Несколько независимых контейнеров Discourse за HAProxy
  • Последовательная перестройка путем отключения узлов приложения
  • Учетные данные SMTP для каждого сайта (SMTP общий)

Операционные заметки (для корректных ожиданий)

Перестройки / простои

В мультисайтовом режиме есть только один контейнер приложения, поэтому команда ./launcher rebuild app перезапустит единственный узел. Это означает, что кратковременный простой для всех сайтов неизбежен.

Сертификаты / проверка хоста

Добавьте все имена хостов в DISCOURSE_HOSTNAME_ALIASES, чтобы Let’s Encrypt и проверка хоста работали надежно.

Резервное копирование / миграция в будущем

Каждый сайт создает свою резервную копию в /admin/backups. Восстановление резервной копии сайта на независимую установку позже — это стандартный путь миграции.


Полное поддерживаемое руководство по мультисайту (пошагово)

0) Требования к хосту

Шаг Команда
Обновить систему apt-get update && apt-get upgrade -y
Установить зависимости apt-get install -y git curl sudo

1) Установка Docker для Discourse

Шаг Команда
Клонировать репозиторий git clone https://github.com/discourse/discourse_docker.git /var/discourse
Перейти в директорию cd /var/discourse

2) Установка первого сайта (сначала один сайт)

Шаг Команда
Запустить настройку ./discourse-setup

Это создаст /var/discourse/containers/app.yml и запустит первый хост (например, forum1.example.com).


3) Включение мультисайта

Шаг Команда
Создать директорию конфигурации mkdir -p /var/discourse/config
Отредактировать файл multisite nano /var/discourse/config/multisite.yml

Пример multisite.yml:

forum1:
  host_names:
    - forum1.example.com

forum2:
  host_names:
    - forum2.example.com

4) Редактирование app.yml для включения мультисайта и псевдонимов хостов

Шаг Команда
Отредактировать app.yml nano /var/discourse/containers/app.yml

Добавьте:

  • DISCOURSE_MULTISITE: true
  • DISCOURSE_HOSTNAME_ALIASES: forum1.example.com,forum2.example.com

5) Перестройка

Шаг Команда
Перестроить ./launcher rebuild app

6) Миграция баз данных мультисайта

Шаг Команда
Войти в контейнер ./launcher enter app
Запустить миграцию мультисайта rails multisite:migrate
Выйти exit
Шаг Команда
Перезапустить ./launcher restart app

7) Проверка

Посетите:

  • https://forum1.example.com
  • https://forum2.example.com

У каждого сайта есть свой администратор, пользователи, загрузки и резервные копии.


8) Резервное копирование / миграция в будущем

Администрирование по сайтам:

  • /admin/backups

Восстановите эту резервную копию на независимую установку позже, если захотите разделить сайт на отдельный сервер.


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

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

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

Ваш ответ определенно заслуживает отдельной темы (в вики) и четкого указания на него.

Для меня это может быть интересно :heart_eyes:

Применимо ли это также в случае, когда Discourse уже работает как «односайтовая установка» и вы хотите преобразовать её в многосайтовую?

Огромное спасибо за вашу работу!

Спасибо! Это всё ещё соответствует текущей поддерживаемой практике для мультисайта — здесь ничего не противоречит тому, как работает мультисайт в Discourse сегодня.

Да, те же шаги применимы при преобразовании существующей установки моносайта в мультисайт: моносайт по сути является мультисайтом с одним сайтом по умолчанию. Вы можете включить DISCOURSE_MULTISITE, добавить multisite.yml (включая существующий сайт), один раз выполнить пересборку и запустить rails multisite:migrate на месте.

Если что-либо здесь больше не отражает лучшие практики, я с радостью обновлю план действий — цель состоит в том, чтобы предоставить линейный поддерживаемый чек-лист, исключающий метод проб и ошибок.