Несмотря на полное намерение отказаться от 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. Если кто-то найдет решение этой проблемы, пожалуйста, сообщите.