Discourse не загружается с Apache и перенаправлением прокси

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

Напомню, что речь идет о следующих условиях:

Установка Discourse на том же сервере, что и Apache | Использование Ubuntu 18.04 | DigitalOcean

благодарность Bobbyiliev из DigitalOcean
Install Discourse on a droplet with WordPress served by Apache ? | DigitalOcean (первый ответ)

Предварительные требования

  • На всякий случай убедитесь, что вы создали резервную копию вашего Droplet, чтобы в случае возникновения проблем можно было вернуться к рабочей версии.
  • Подключитесь к вашему Droplet по SSH.
  • Установлен Apache; вы можете следовать инструкциям по его установке здесь:

Шаг 1 — Установка Docker

Для установки Docker выполните инструкции по ссылке:

Шаг 2 — Загрузка Discourse

Сначала создайте директорию, в которой будут храниться файлы Discourse:

mkdir /var/discourse

Затем клонируйте официальный Docker-образ Discourse в директорию /var/discourse:

git clone https://github.com/discourse/discourse_docker.git /var/discourse

Шаг 3 — Настройка Discourse для прослушивания порта 8080

Мы будем использовать шаблон standalone.yml, который включает все необходимые сервисы, такие как PostgreSQL, Redis и другие.

Скопируйте пример файла следующей командой:

cp /var/discourse/samples/standalone.yml /var/discourse/containers/app.yml

Затем откройте файл /var/discourse/containers/app.yml в любимом редакторе и измените порты на строках 23 и 24:

## Какие TCP/IP порты должен открывать этот контейнер?
expose:
  - "8080:80"   # перенаправление порта хоста 8080 на порт контейнера 80 (http)
  - "8443:443"   # перенаправление порта хоста 8443 на порт контейнера 443 (https)

Также, если у вас пока нет SSL-сертификата, обязательно закомментируйте строку 16:

  #- "templates/web.ssl.template.yml"

Просто добавьте символ # перед строкой - "templates/web.ssl.template.yml", иначе Discourse не запустится.

Шаг 4 — Настройка Discourse

Перейдите в директорию:

cd /var/discourse

Затем запустите Discourse (поскольку это первый запуск службы, он выполнит начальную настройку приложения с учетом новых изменений в файле app.yml):

./discourse-setup

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

Шаг 5 — Настройка Apache

В директории /etc/apache2/sites-available/ создайте новый файл с именем forum.example.com.conf и добавьте следующее содержимое виртуального хоста:

<VirtualHost *:80>
  ServerName forum.example.com
  ServerAlias www.forum.example.com

  <IfModule proxy_module>
    ProxyPreserveHost on
    ProxyPass / http://localhost:8080/
    ProxyPassReverse / http://localhost:8080/
  </IfModule>
</VirtualHost>
  • Активируйте виртуальный хост следующей командой:
a2ensite forum.example.com
  • Включите модуль Proxy:
a2enmod proxy
a2enmod proxy_http
a2enmod proxy_balancer
a2enmod lbmethod_byrequests
  • Перезапустите Apache:
systemctl restart apache2

После этого вы сможете получить доступ к Discourse напрямую через доменное имя.


Примечание 1: При установке Discourse файл app.yml может быть перезаписан, и строки 16/17 (SSL) будут раскомментированы. Вам нужно снова закомментировать эти строки, а затем пересобрать приложение (не забудьте сменить директорию): ./launcher rebuild app.

Примечание 2: В данном руководстве SSL для Discourse не включен. Как ни странно, не существует документации по включению SSL Let’s Encrypt, если он уже включен для Apache. Если кто-то найдет решение этой проблемы, пожалуйста, сообщите.