Эти инструкции следует считать бета-версией и они предназначены для тех, кто знаком со стандартной настройкой
Однако прямо сейчас (2023.02.11) эти инструкции не работают! (Смотрите Set up Let’s Encrypt with multiple domains / redirects, чтобы узнать, как обновить настройки letsencrypt и добавить часть fullpath. Я обновлю это, чтобы отразить эти изменения, в самое ближайшее время.)
Я разработал это руководство несколько недель назад, но мне нужно, чтобы кто-то протестировал его и проверил, работает ли оно для других. Пожалуйста, ответьте, если попробуете, и сообщите, работает ли это и есть ли что-то непонятное.
И продолжаем представление…
Это руководство в общих чертах описывает, как настроить мульти-сайтовую конфигурацию с двумя дополнительными хостами (всего 3).
Предполагается, что у вас есть рабочая официальная стандартная установка Discourse или установка с двумя контейнерами (Move from standalone container to separate web and data containers).
Доменное имя для основного сайта
Поддомен для второго сайта
Поддомен для третьего сайта
Пароль базы данных (такой же, как DISCOURSE_DB_PASSWORD) или discourse в app.yml
Для простоты здесь рассматривается основной сайт с именем =domain= и два дополнительных сайта =two=.=domain= и =three=.=domain=. Вы можете использовать любые имена, но в рамках этого шаблона отсутствие разных коротких имен (для имени базы данных и заголовка подфорума) и полного имени хоста немного упрощает задачу.
Добавьте в hooks после плагинов в app.yml или web_only.yml
before_bundle_exec:
- file:
path: $home/config/multisite.yml
contents: |
=two=:
adapter: postgresql
database: =two=
pool: 25
timeout: 5000
host: data
password: NThmZTNjZjZhOTczNmVj
host_names:
- =two=.=domain=
=three=:
adapter: postgresql
database: =three=
pool: 25
timeout: 5000
host: data
password: NThmZTNjZjZhOTczNmVj
host_names:
- =three=.=domain=
after_db_migrate:
- exec: cd /var/www/discourse && sudo -E -u discourse bundle exec rake multisite:migrate
after_ssl:
# укажите letsencrypt, какие дополнительные сертификаты нужно получить
- replace:
filename: "/etc/runit/1.d/letsencrypt"
from: /-d =domain= /
to: "-d =domain= -d =two=.=domain= -d =three=.=domain="
global: true
# не перенаправляйте все хосты обратно на основное доменное имя
- replace:
filename: "/etc/nginx/conf.d/discourse.conf"
from: /if \(\$http_host[^\}]*\}/m
to: ""
Добавьте в секцию after_postgres в app.yml или data.yml
- exec: sudo -u postgres createdb =two= || exit 0
- exec:
stdin: |
grant all privileges on database =two= to discourse;
cmd: sudo -u postgres psql =two=
raise_on_fail: false
- exec: /bin/bash -c 'sudo -u postgres psql =two= <<< "alter schema public owner to discourse;"'
- exec: /bin/bash -c 'sudo -u postgres psql =two= <<< "create extension if not exists hstore;"'
- exec: /bin/bash -c 'sudo -u postgres psql =two= <<< "create extension if not exists pg_trgm;"'
- exec: sudo -u postgres createdb =three= || exit 0
- exec:
stdin: |
grant all privileges on database =three= to discourse;
cmd: sudo -u postgres psql =three=
raise_on_fail: false
- exec: /bin/bash -c 'sudo -u postgres psql =three= <<< "alter schema public owner to discourse;"'
- exec: /bin/bash -c 'sudo -u postgres psql =three= <<< "create extension if not exists hstore;"'
- exec: /bin/bash -c 'sudo -u postgres psql =three= <<< "create extension if not exists pg_trgm;"'
После этого выполните:
./launcher rebuild app
или
./launcher rebuild data
./launcher rebuild web_only