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

**URL:** https://meta.discourse.org/t/one-server-for-2-discourse-communities/392692
**Category:** Self-hosting
**Tags:** hosting
**Created:** [05.Январь.2026 11:28:28 UTC](https://meta.discourse.org/t/one-server-for-2-discourse-communities/392692 "2026-01-05T11:28:28Z")
**Posts on this page:** 18
**Page:** 3

<div class="post-metadata">

### Author: ![tobiaseigen](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/tobiaseigen/32/539204_2.png) [@tobiaseigen](https://meta.discourse.org/u/tobiaseigen)
#### Post date: [06.Январь.2026 15:23:41 UTC](https://meta.discourse.org/t/one-server-for-2-discourse-communities/392692/44 "2026-01-06T15:23:41Z")

</div>

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

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

---

<div class="post-metadata">

### Author: ![stephtara](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/stephtara/32/517827_2.png) [@stephtara](https://meta.discourse.org/u/stephtara)
#### Post date: [06.Январь.2026 18:45:06 UTC](https://meta.discourse.org/t/one-server-for-2-discourse-communities/392692/45 "2026-01-06T18:45:06Z")

</div>

> [@itsbhanusharma](#):
>
> Сначала вам нужно будет решить, хотите ли вы единую мультисайтовую установку или один сервер, на котором размещено несколько независимых сайтов.

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

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

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

---

<div class="post-metadata">

### Author: ![itsbhanusharma](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/itsbhanusharma/32/180717_2.png) [@itsbhanusharma](https://meta.discourse.org/u/itsbhanusharma)
#### Post date: [06.Январь.2026 18:53:17 UTC](https://meta.discourse.org/t/one-server-for-2-discourse-communities/392692/46 "2026-01-06T18:53:17Z")

</div>

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

---

<div class="post-metadata">

### Author: ![pfaffman](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/pfaffman/32/120154_2.png) [@pfaffman](https://meta.discourse.org/u/pfaffman)
#### Post date: [06.Январь.2026 18:55:17 UTC](https://meta.discourse.org/t/one-server-for-2-discourse-communities/392692/47 "2026-01-06T18:55:17Z")

</div>

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

Я создал тему о том, как запустить [мульти-сайт без обратного прокси](https://meta.discourse.org/t/setup-multisite-configuration-with-lets-encrypt-and-no-reverse-proxy/175285), но сейчас она устарела.

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

> [@pfaffman](#):
>
> ```plaintext
> # tell letsencrypt what additional certs to get
> - replace:
> filename: "/etc/runit/1.d/letsencrypt"
> from: /-d example.com /
> to: "-d example.com -d two.example.com -d three.example.com"
> global: true
> 
> ```

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

```
DISCOURSE_HOSTNAME_ALIASES: domain.com,other.domain.com

```

---

<div class="post-metadata">

### Author: ![alltiagocom](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/alltiagocom/32/492709_2.png) [@alltiagocom](https://meta.discourse.org/u/alltiagocom)
#### Post date: [06.Январь.2026 19:09:39 UTC](https://meta.discourse.org/t/one-server-for-2-discourse-communities/392692/48 "2026-01-06T19:09:39Z")

</div>

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

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

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

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

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

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

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

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

---

<div class="post-metadata">

### Author: ![itsbhanusharma](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/itsbhanusharma/32/180717_2.png) [@itsbhanusharma](https://meta.discourse.org/u/itsbhanusharma)
#### Post date: [07.Январь.2026 04:49:38 UTC](https://meta.discourse.org/t/one-server-for-2-discourse-communities/392692/49 "2026-01-07T04:49:38Z")

</div>

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

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

---

<div class="post-metadata">

### Author: ![pfaffman](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/pfaffman/32/120154_2.png) [@pfaffman](https://meta.discourse.org/u/pfaffman)
#### Post date: [07.Январь.2026 18:29:00 UTC](https://meta.discourse.org/t/one-server-for-2-discourse-communities/392692/50 "2026-01-07T18:29:00Z")

</div>

> [@itsbhanusharma](#):
>
> Я бы рекомендовал продолжать экспериментировать в свободное время, если вы хотите больше узнать о том, как работает Discourse. Именно так большинство из нас здесь и научились.

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

---

<div class="post-metadata">

### Author: ![HAWK](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/hawk/32/86627_2.png) [@HAWK](https://meta.discourse.org/u/HAWK)
#### Post date: [20.Январь.2026 19:12:08 UTC](https://meta.discourse.org/t/one-server-for-2-discourse-communities/392692/51 "2026-01-20T19:12:08Z")

</div>

6 сообщений были перенесены в новую тему: [Несколько контейнеров приложений для одного сайта Discourse](https://meta.discourse.org/t/multiple-app-containers-for-a-single-discourse-site/393913)

---

<div class="post-metadata">

### Author: ![Ethsim2](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/ethsim2/32/522255_2.png) [@Ethsim2](https://meta.discourse.org/u/Ethsim2)
#### Post date: [19.Январь.2026 10:34:54 UTC](https://meta.discourse.org/t/one-server-for-2-discourse-communities/392692/53 "2026-01-19T10:34:54Z")

</div>

Я документирую установку **поддерживаемого мультисайта 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`
> 
> Восстановите эту резервную копию на независимую установку позже, если захотите разделить сайт на отдельный сервер.

* * *

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

---

<div class="post-metadata">

### Author: ![nathank](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/nathank/32/290039_2.png) [@nathank](https://meta.discourse.org/u/nathank)
#### Post date: [15.Февраль.2026 22:31:14 UTC](https://meta.discourse.org/t/one-server-for-2-discourse-communities/392692/60 "2026-02-15T22:31:14Z")

</div>

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

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

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

---

<div class="post-metadata">

### Author: ![stephtara](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/stephtara/32/517827_2.png) [@stephtara](https://meta.discourse.org/u/stephtara)
#### Post date: [16.Февраль.2026 06:20:04 UTC](https://meta.discourse.org/t/one-server-for-2-discourse-communities/392692/61 "2026-02-16T06:20:04Z")

</div>

> [@nathank](#):
>
> В результате это больше всего подойдёт для нескольких небольших и тихих форумов с самостоятельным хостингом.

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

---

<div class="post-metadata">

### Author: ![stephtara](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/stephtara/32/517827_2.png) [@stephtara](https://meta.discourse.org/u/stephtara)
#### Post date: [16.Февраль.2026 06:21:33 UTC](https://meta.discourse.org/t/one-server-for-2-discourse-communities/392692/62 "2026-02-16T06:21:33Z")

</div>

> [@Ethsim2](#):
>
> Если что-либо из вышеизложенного противоречит текущим лучшим практикам, я с радостью обновлю эту инструкцию — цель состоит в том, чтобы предоставить **линейный чек-лист для поддержки многосайтовой установки** , который сведет к минимуму метод проб и ошибок.

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

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

---

<div class="post-metadata">

### Author: ![Ethsim2](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/ethsim2/32/522255_2.png) [@Ethsim2](https://meta.discourse.org/u/Ethsim2)
#### Post date: [16.Февраль.2026 08:07:20 UTC](https://meta.discourse.org/t/one-server-for-2-discourse-communities/392692/63 "2026-02-16T08:07:20Z")

</div>

> [@stephtara](#):
>
> > [@Ethsim2](#):
> >
> > Если что-либо из вышеперечисленного противоречит текущим лучшим практикам, я с радостью обновлю этот план действий — цель состоит в том, чтобы предоставить **линейный поддерживаемый чек-лист для мультисайта** , который сократит метод проб и ошибок.
> 
> Применимо ли это также в случае, когда Discourse уже работает как «моносайт» и его нужно преобразовать в мультисайт?
> 
> Огромное спасибо за вашу работу!

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

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

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

---

<div class="post-metadata">

### Author: ![Ethsim2](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/ethsim2/32/522255_2.png) [@Ethsim2](https://meta.discourse.org/u/Ethsim2)
#### Post date: [30.Июль.2026 06:57:32 UTC](https://meta.discourse.org/t/one-server-for-2-discourse-communities/392692/64 "2026-07-30T06:57:32Z")

</div>

Не мог ли кто-нибудь пояснить правильный способ предоставления файла `multisite.yml` в  
одноконтейнерной многопользовательской настройке `discourse_docker`?

В моем руководстве выше в настоящее время указано:

```plaintext
mkdir -p /var/discourse/config
nano /var/discourse/config/multisite.yml

```

Однако в документации по многопользовательским установкам вместо этого используется хук `before_bundle_exec`  
в файле `app.yml` для создания:

```plaintext
$home/config/multisite.yml

```

В документации сказано, что этот хук гарантирует наличие файла внутри приложения Discourse.

Я не могу понять, где файл `/var/discourse/config/multisite.yml` на хосте автоматически монтируется или копируется в `/var/www/discourse/config/multisite.yml` внутри контейнера приложения.

Для стандартного универсального контейнера `app` с внутренними PostgreSQL и  
Redis, должно ли мое руководство поэтому использовать хук `before_bundle_exec` вместо прямого создания `/var/discourse/config/multisite.yml` на хосте?

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

---

<div class="post-metadata">

### Author: ![pfaffman](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/pfaffman/32/120154_2.png) [@pfaffman](https://meta.discourse.org/u/pfaffman)
#### Post date: [31.Июль.2026 16:49:08 UTC](https://meta.discourse.org/t/one-server-for-2-discourse-communities/392692/65 "2026-07-31T16:49:08Z")

</div>

> [@Ethsim2](#):
>
> Я не вижу, где файл `/var/discourse/config/multisite.yml` на хосте автоматически монтируется или копируется в `/var/www/discourse/config/multisite.yml` внутри контейнера приложения.

Вам нужно добавить что-то вроде этого в ваш `app.yml`

```plaintext
  - volume:
      host: /var/discourse/shared/multi/multisite.yml
      guest: /var/www/discourse/config/multisite.yml

```

---

<div class="post-metadata">

### Author: ![Ethsim2](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/ethsim2/32/522255_2.png) [@Ethsim2](https://meta.discourse.org/u/Ethsim2)
#### Post date: [31.Июль.2026 19:41:26 UTC](https://meta.discourse.org/t/one-server-for-2-discourse-communities/392692/66 "2026-07-31T19:41:26Z")

</div>

Спасибо — это подтверждает, что файлу на стороне хоста требуется явное сопоставление тома.  
Я не могу изменить руководство по запуску, чтобы использовать `/var/discourse/shared/multi/multisite.yml`, смонтированный в `/var/www/discourse/config/multisite.yml`.

Для стандартного монолитного контейнера `app`, в котором PostgreSQL и Redis управляются внутри контейнера Discourse, достаточно ли в записи `multisite.yml` указать только `host_names`, или для каждого сайта также следует явно задать такие значения, как `database`, `username`, `host`, `pool` и `timeout`?

Например, допустима ли такая запись для создания второго сайта?

```plaintext
    forum2:
      host_names:
        - forum2.example.com

```

---

<div class="post-metadata">

### Author: ![tobiaseigen](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/tobiaseigen/32/539204_2.png) [@tobiaseigen](https://meta.discourse.org/u/tobiaseigen)
#### Post date: [26.Август.2026 22:41:26 UTC](https://meta.discourse.org/t/one-server-for-2-discourse-communities/392692/67 "2026-08-26T22:41:26Z")

</div>

Вот как выглядит мой конфиг. Не знаю, что будет, если я удалю всё, кроме `host_names:`. Я повторяю это для всех своих сайтов.

```plaintext
          forum2:
            adapter: postgresql
            database: forum2_discourse
            host: data
            password: SEKRET
            pool: 25
            timeout: 5000
            host_names:
              - forum2.example.org

```

---

<div class="post-metadata">

### Author: ![kcahtoor](https://avatars.discourse-cdn.com/v4/letter/k/9de0a6/32.png) [@kcahtoor](https://meta.discourse.org/u/kcahtoor)
#### Post date: [27.Август.2026 11:06:10 UTC](https://meta.discourse.org/t/one-server-for-2-discourse-communities/392692/68 "2026-08-27T11:06:10Z")

</div>

Если это указано в вашем `app.yml`, Discourse создаст файл в вашем контейнере приложения по пути `var/www/discourse/config/multisite.yml`, и его содержимое будет таким же. Я понимаю, что это может быть запутанно, когда вы следуете инструкции. Но это лучший способ для multisite, чтобы объявить второй сайт или, возможно, третий в `app.yml`. Я использую multisite и собственный хостинг с настройкой postfix и dovecot для отправки и получения писем. И в данный момент всё работает как часы. Я просто настроил postfix с виртуальными почтовыми ящиками. Postfix также сохраняет ключ ответа. Это немного больше работы, но, на мой взгляд, это лучшее решение.

[Предыдущая страница](https://meta.discourse.org/t/one-server-for-2-discourse-communities/392692.md?page=2)
