Discourse + веб-сервер: возможно или лучше избегать?

Краткое предупреждение: я относительно новичок в создании среды VPS с нуля, но имею достаточный опыт работы с веб-хостингом (в частности, с общим и управляемым выделенным хостингом), чтобы понимать, что делаю, и разбираться в инструкциях.

Тем не менее, я в настоящее время использую самый дешевый Droplet от DigitalOcean для экспериментов. Я хоббист, не ожидаю большого трафика и просто пытаюсь создать два экземпляра: один для главной страницы (скорее всего, WordPress), а другой — для сопутствующего форума Discourse. Один экземпляр будет посвящен геймдизайну, а другой — моему сообществу создателей контента.

Я знаю, что Discourse и Apache плохо сочетаются из-за решения Discourse использовать порт 80, и также знаю, что существуют обходные пути, но они представлены в различных формах с неподтвержденными результатами и без официального подтверждения от Discourse в духе «да, это работает».

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

Есть ли какие-либо советы или мнения от тех, кто сталкивался с той же проблемой? Спасибо!

Думаю, это то, что вы ищете:

@neounix имеет опыт работы с запуском Discourse с Apache2, поэтому он, возможно, сможет дать некоторые рекомендации.

Значит ли это, что рекомендуется переключиться на Nginx? У меня абсолютно нет опыта работы с ним, и любой веб-сервер, с которым я когда-либо сталкивался, включая предварительно настроенные, использовал Apache.

Для Apache есть также эта статья: Set up Discourse on a server with existing Apache sites

Однако, похоже, возникает множество проблем при попытке настроить его корректно, особенно в части SSL.

Было бы проще запустить два Droplet: один для веб-сайта, а другой специально для Discourse? Я полагаю, что могу просто изменить DNS-запись для поддомена, чтобы она указывала на Droplet с Discourse, и это должно решить проблему. Просто кажется странным запускать два сервера для форума.

Привет, @OrbitStorm!

Добро пожаловать!

Discourse никоим образом не создаёт препятствий.

Настройка запуска Discourse в Docker за обратным прокси-сервером — очень полезный опыт, будь то Apache2 или nginx.

Если вы уже запускаете приложения за Apache, настроить один или даже 100 экземпляров Discourse в Docker за Apache будет несложно!

Спасибо за ответ.

Говорю это с utmost уважением, но Discourse «из коробки» фактически требует собственного сервера. Использование обратного прокси для запуска веб-сервера параллельно с Discourse на одном и том же VPS — это лотерея, что подтверждается комментариями и другими жалобами; SSL может работать, а может и нет. Кроме того, практически невозможно запустить два экземпляра Discourse на одном сервере. Всё это, на мой взгляд, является препятствием. Ни одно другое форумное программное обеспечение, включая высокоуровневые платформы вроде XenForo или Invision, не требует таких усилий и сопряжено с такой неопределённостью. Это дорогие пакеты, так что, полагаю, вы получаете то, за что не платите в случае с Discourse. Как новый пользователь, сталкивающийся со всеми этими препятствиями, я просто вижу, что Discourse был разработан без учёта чего-либо другого (то есть веб-сайтов).

Кстати, как отмечалось в моём первоначальном посте, я использовал развёртывание в один клик для Discourse. Значит, мне придётся сделать всё наоборот, чтобы попытаться запустить Apache (или Nginx, если я не найду руководства) на том же сервере. Если я собираюсь использовать Discourse как основную форумную платформу, мне не интересно запускать два сервера для одного сообщества. Это просто глупо.

Честно говоря, я считаю, что это вполне реально. Я не эксперт и просто следую очень хорошим руководствам и урокам, которые можно найти здесь и там. У меня возникло очень мало проблем или вообще не возникло при настройке Discourse за Nginx, так что, возможно, мне немного повезло, но я думаю, что это далеко не невозможно :slightly_smiling_face:
Мне нравятся эти:
https://linuxize.com/post/how-to-install-nginx-on-ubuntu-18-04/
https://linuxize.com/post/secure-nginx-with-let-s-encrypt-on-ubuntu-18-04/
Хотя, думаю, добавить мультисайт/многоконтейнерность и клонирование S3 в эту смесь будет непросто :sweat_smile:

А для связки Postfix/Dovecot:
https://linuxize.com/post/install-and-configure-postfix-and-dovecot/

@Benjamin_D Проблема в том, что все доступные здесь руководства упускают какой-то аспект моей текущей среды. Есть руководство по Apache, но для CentOS. Я использую Ubuntu. Другое руководство от Kane York использует Nginx, но, как я уже говорил, я использую Apache.

Я тоже не делаю ничего излишне сложного. Я просто использую DigitalOcean, Linux + Ubuntu 18.04, размещаю всё на дроплете (не использую стороннее хранилище) и так далее. Я использую Mailgun как почтовое решение, но, насколько я знаю, у него нет почтового ящика, что пока меня устраивает.

Просто пытаюсь сделать всё максимально просто.

@OrbitStorm

На самом деле, на данный момент (по моему скромному мнению) Discourse — это лучшее в мире программное обеспечение с открытым исходным кодом для создания форумов и сообществ. Вот лишь несколько причин:

  1. Discourse имеет открытый исходный код, сильное сообщество и очень умную (и компетентную) команду основных разработчиков.

  2. Discourse спроектирован для работы в контейнере Docker в производственной среде, что дает множество преимуществ:

  • Discourse можно легко развернуть в standalone mode (автономном режиме) без необходимости во внешнем веб-сервере или базе данных.

  • Discourse можно легко развернуть в multi-container mode (режиме с несколькими контейнерами), что обеспечивает большую надежность и бесшовное обновление.

  • Discourse также можно развернуть в конфигурациях с высокой доступностью, используя Docker Swarm и Kubernetes, где масштабируемость Discourse может увеличиваться и уменьшаться «по требованию».

  • Discourse легко резервировать и восстанавливать. Мы можем использовать стандартную резервную копию Discourse OOTB (из коробки) и восстановить её в любом месте мира в чистом, «девственном» контейнере Docker.

  1. Discourse легко работает за обратными веб-прокси-серверами Apache2 и nginx. Это также имеет множество преимуществ, вот некоторые из них:
  • Discourse может работать на существующем веб-сервере, будь то nginx или Apache2, с минимальными усилиями как в отношении портов TCP/IP, открытых Docker, так и в отношении сокетов UNIX-домена.

  • Запуск веб-приложений за обратными прокси-серверами — устоявшаяся практика. Эта настройка не является специфичной для Discourse, но Discourse предоставляет поддержку.

  • Настройка SSL за обратным прокси очень проста и может быть сведена к выполнению команды `certbot -d my.great-discourse.site’ с использованием поддерживаемого и бесплатного LETSENCRYPT.

  1. Discourse полностью документирован, коммит за коммитом, на GitHub, поэтому любой может следить за изменениями в коде.

  2. У Discourse прогрессивная бизнес-модель, которая имеет ряд ключевых преимуществ, включая:

  • Само ядро Discourse, а также множество отличных плагинов, тем и компонентов, бесплатны.

  • Discourse предоставляет бесплатную поддержку, включая поддержку стандартной конфигурации, на платформе meta.

  • Discourse предлагает коммерческий хостинг для тех, кто не хочет осуществлять самостоятельное размещение или предпочитает более «пассивный» подход.

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

  1. Есть и другие преимущества, но я хочу завершить этот пост!

Согласны ли мы (я) с каждым решением, принятым командой основных разработчиков Discourse, и согласны ли они со всеми нашими (или моими) идеями и предложениями?

Нет, конечно же нет; и не должны, ни они, ни мы, ни я. Мы свободны предлагать, отправлять предложения по коду, PR (pull requests), и команда основных разработчиков Discourse будет рассматривать эти предложения с открытым умом.

Но в конечном итоге команда основных разработчиков должна удерживать сообщество Discourse на пути к согласованному направлению, что непросто, когда сотни людей из разных культур хотят разных конфигураций и имеют разные приоритеты, бизнес-модели и идеи.

Иными словами, от Discourse нечего «избегать» (слова из заголовка вашей темы), особенно в части настройки обратных прокси и освоения Docker. Многие (включая меня) переходят на Kubernetes именно благодаря Discourse, и не только для него, но и для других веб-приложений.

Discourse — это «самое далекое» от «препятствующего» (снова ваши слова, не мои); и поскольку он основан на контейнерах, по дизайну, «потолка нет» тому, как опытные системные администраторы могут развертывать Discourse в высоко масштабируемых производственных средах; при этом он достаточно прост, чтобы новички могли легко развернуть его в автономном режиме.

Нужно ли говорить что-то еще?

Как поется в песне группы REM «Losing My Religion»:

Oh no, I’ve said too much, I set it up

Закрываю эту тему… Удачи, @OrbitStorm

Если я правильно понимаю, вы хотите, чтобы Nginx прослушивал и перенаправлял один поддомен на Apache с одной стороны, а другой поддомен — на контейнер с Discourse с другой стороны (это настраивается путем открытия нужного порта в app.yml или использования шаблона web.socketed), или вы используете Apache как прокси?

Кажется, в руководстве для CentOS Nginx используется вместо HAProxy :thinking:

Почти, но нет. Повторюсь: я работаю на Linux + Ubuntu 18.04. Использую Apache для раздачи стандартного HTML-сайта (в будущем — WordPress), а Discourse установлен на поддомене. Мне нужно лишь разобраться, как настроить обратный прокси (согласно этим руководствам), чтобы перенаправлять трафик с портов 80 и 443 на новые порты, так как Apache уже использует оба этих порта. Меня не интересует использование Nginx, поскольку у меня нет с ним опыта, и я не хочу усложнять настройку, добавляя его вместе с Apache.

Я не продвинутый разработчик. Просто человек, который свободно разбирается во фронтенде, имеет базовое представление о панелях управления, ограниченное понимание SSH и практически ничего не знает обо всём остальном (поэтому и обращаюсь к руководствам).

Моя конечная цель — иметь два домена с соответствующими главными страницами и несколько экземпляров Discourse (по одному для каждого сайта). Всё довольно просто.

Не уверен, сложнее ли использовать Apache в качестве сервера и прокси, чем связывать nginx или HAproxy :sweat_smile:

Что касается руководства, CentOS или Ubuntu не должны сильно отличаться: используйте apt вместо yum,
https://support.cloudflare.com/hc/en-us/articles/360029696071-Restoring-original-visitor-IPs-Option-2-Installing-mod-remoteip-with-Apache вместо

Могу предложить это для Apache в качестве обратного прокси:

Если вы хотите, чтобы ваша жизнь была легкой, запускайте Discourse на отдельном Droplet. Вы действительно не сможете запустить Discourse и Apache на одном Droplet с 1 ГБ памяти, поэтому два Droplet по 1 ГБ даже не будут стоить дороже.

@pfaffman Моя цель никогда не заключалась в том, чтобы оставаться на самом маленьком дроплете; я просто использую его, пока настраиваю всё. Бессмысленно платить более высокую почасовую ставку во время экспериментов.

Единственная причина, по которой я не очень хочу запускать два дроплета, в том, что мне, скорее всего, нужно будет мигрировать 3–4 разных домена на DigitalOcean. Я не хочу платить за 6–8 дроплетов. Это безумие.

Если вы хотите больше 3 сайтов на Discourse, вам, скорее всего, стоит разобраться с мультисайтом. У меня есть конфигурация с использованием Traefik, хотя я также изучаю другие обратные прокси.

Если вы используете Apache и хотите разместить несколько отдельных сайтов, соответствующий поисковый запрос — VirtualHost.

С небольшим дроплетом вы, возможно, захотите уменьшить буферы. Мой дроплет имеет 4 ГБ оперативной памяти и 4 общих ядра.

Спасибо Bobbyiliev из DigitalOcean, удалось найти решение.

Это решение можно найти здесь: Discourse not loading with Apache and proxy redirect - #8 by OrbitStorm