Используйте CloudPanel для управления несколькими сайтами с Discourse

Вы можете сразу перейти к моему пошаговому руководству здесь…

На моем выделенном сервере (Hetzner) я установил свежий экземпляр Discourse (и на данный момент это единственное, что есть на сервере).

Теперь я хочу использовать CloudPanel в качестве обратного прокси, чтобы также иметь возможность размещать на этом сервере блоги Ghost и сайты WordPress для некоторых моих клиентов.

Изучив это руководство и другие сообщения ниже, я понял, что это возможно.

Однако мне сложно справиться с кривой обучения в области обратных прокси.

Я легко могу устанавливать и управлять своими сайтами через CloudPanel.

Но я не совсем понимаю правильный порядок или процедуру настройки совместной работы CloudPanel и Discourse.

Я хотел бы задокументировать эту процедуру в данном сообщении.

Может ли кто-нибудь провести меня через этот процесс?

https://www.wpdoze.com/cloudpanel-as-a-reverse-proxy-for-docker/

Сначала выполните один из этих руководств, чтобы перенести Discourse на другой порт, удалить шаблоны SSL и Let’s Encrypt, а затем пересобрать. После этого настройте ваш обратный прокси на использование этого порта.

А что, если сначала установить CloudPanel и создать обратный прокси в интерфейсе…


… и/или в редакторе Vhost…

… а затем установить Discourse?

Или же необходимо или как-то предпочтительнее установить Discourse сначала?

Я хотел бы предоставить шаги самым простым и интуитивно понятным способом (для таких же простаков, как я :slight_smile:)

Это не имеет значения. Главное, чтобы:

  • Discourse не использовал порты 80/443, так как конфликт приведёт к сбою вашего обратного прокси.
  • Discourse не использовал SSL, но при этом порт 80 был перенаправлен на порт, который обратный прокси использует для бэкенда.

Таким образом, фраза «это не имеет значения» означает, что Discourse должен быть настроен как бэкенд до запуска обратного прокси, и в этот момент он будет недоступен в течение некоторого времени.

Это не инструкция для простаков. Вам нужно будет понять, как работает обратный прокси-сервер, и как вручную настроить Discourse. Это не будет ни простым, ни интуитивно понятным.

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

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

Файл containers/app.yml создается установщиком? (Я не могу найти его в репозитории.)

Я отредактировал файл standalone.yml и переименовал его в app.yml.

Если я помещу этот файл в папку containers и затем запущу ./discourse-setup, должно ли это сработать?

(При условии, что я правильно настроил параметры в моем app.yml)

Верно.

Как относительно новый пользователь Discourse, правильный способ сделать это выглядит примерно так:

  • Временно отключите ваш обратный прокси.
  • Установите Discourse с отключёнными SSL/Lets Encrypt.
  • Проверьте работоспособность установки на порту :80.
  • Измените порт Discourse на 81 или другой нестандартный порт, а ещё лучше — используйте сокет.
  • Запустите обратный прокси снова и настройте его на установку Discourse (включая инкапсуляцию HTTPS).
  • Включите force_https.

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

Вы не можете использовать discourse-setup для своей настройки. Если вы редактировали его, выполните

./launcher rebuild app

Чудо из чудес — мы сделали это! Спасибо за всю вашу помощь! Я опишу процедуру в теме выше.

Хорошо, застрял на (мелкой, как мне кажется) вещи…

Чтобы создать второй экземпляр Discourse, я создал и отредактировал app2.yml и server_name.conf для второго Discourse, изменив DISCOURSE_HOSTNAME и server_name.

Но затем… как собрать app2? Я попробовал:

service nginx restart

./launcher stop app

./launcher rebuild app2

и

./discourse-setup (для установки первого экземпляра я использовал ./discourse setup, затем вернулся и отредактировал app.yml, и это сработало для первого экземпляра.)

Эта процедура привела к появлению Discourse по второму URL, но, похоже, он получает данные из первого экземпляра.

Что-то я не понимаю. Какой правильный способ развернуть второй сайт на втором домене?

Настроен ли ваш обратный прокси-сервер для прослушивания второго домена и перенаправления трафика на другой порт?

Вам нужно изменить каталог, указанный как /var/discourse/standalone, на что-то другое (например, standalone2?).

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

Ого. Я бы никогда не догадался об этом сам. Ты мой герой дня.

Вот что я делаю здесь (для клиента): создаю прототип универсальной системы публикации Discourse для создателей контента, интегрируя Ghost с Discourse.

Я фронтенд-разработчик, и теперь мне нужно полностью освоить системное администрирование.

Поэтому мне нужно настроить как мульти-сайт, так и отдельные контейнеры.

Вот моя конфигурация сервера:

  1. Выделенный сервер у Hetzner (6 ядер CPU, 64 ГБ ОЗУ и 2x512 ГБ NVMe)

  2. VPS у Contabo (8 ядер CPU, 30 ГБ ОЗУ и 200 ГБ NVMe)

Я ничего об этом не знаю, но если вы и другие считаете, что ваша инструкция надёжна, создавайте новую тему с тегами #documentation:sysadmin how-to advanced-setup и любыми другими, которые, по вашему мнению, подходят :slight_smile:
(прежде чем ваш ответ автоматически удалится через месяц :stuck_out_tongue: )

Да, всё верно. Так что для второго случая сработало следующее (после создания нового сайта в CloudPanel):

  1. Вручную создать и отредактировать файл app2.yml, заменив в нём каждое вхождение standalone на standalone2

  2. Также заменить standalone на standalone2 в файле Vhost

  3. Выполнить команду ./launcher rebuild app2

Кажется, я также очистил все кэши Cloudflare, перезапустил nginx, а затем перезагрузил сервер.

Ещё раз спасибо за вашу помощь.