Установка Discourse на Ubuntu 16.04 с Nginx и Let's Encrypt
Discourse — свободное и открытое программное обеспечение для создания интернет‑форумов и списков рассылки. Проект начат в 2013 году; в основе — Ruby и JavaScript. Discourse используется в проектах и сообществax многих организаций.
В этом руководстве показано, как по шагам установить и настроить Discourse на Ubuntu 16.04 с использованием Docker, настроить Nginx как обратный прокси и обеспечить HTTPS с бесплатными сертификатами от Let’s Encrypt.
Что мы сделаем
- Установим Docker на Ubuntu 16.04
- Установим и настроим Discourse в Docker
- Сгенерируем SSL‑сертификат от Let’s Encrypt
- Установим и настроим Nginx как обратный прокси для Discourse
- Пройдем веб‑установщик Discourse и создадим администратора
- Дополнительная настройка и отладка
Требования
- Сервер с Ubuntu 16.04
- Доступ root или sudo
- Доменное имя, указывающее на сервер (например, discourse.example.ru)
- Аккаунт SMTP (Mailgun, SendGrid, Mailjet и т. п.)
Шаг 1 — Установка Docker на Ubuntu 16.04
Discourse использует PostgreSQL для постоянного хранилища и Redis для кеша и временных данных. Рекомендуем запускать Discourse в Docker-контейнере, поддерживаемом официальным проектом discourse_docker.
Установим Docker быстрым скриптом:
wget -qO- https://get.docker.com/ | sh
После завершения установки проверьте состояние сервиса:
systemctl status dockerПроверьте, что Docker включён в автозагрузку:
systemctl is-enabled docker
Важно: используйте стабильную версию Docker, совместимую с Ubuntu 16.04. На production‑серверах дополнительно настройте брандмауэр (ufw/iptables) и мониторинг для контейнеров.
Шаг 2 — Установка и базовая конфигурация Discourse
Скачиваем официальный инсталлятор Discourse и создаём рабочую директорию:
mkdir -p /var/discourse
git clone https://github.com/discourse/discourse_docker.git /var/discourseПерейдите в каталог и скопируйте пример конфигурации:
cd /var/discourse
cp samples/standalone.yml containers/app.ymlОткройте файл app.yml в редакторе (vim, nano):
vim containers/app.ymlНастройка проброса портов Docker
По умолчанию контейнер Discourse пытается слушать 80 и 443. В нашем сценарии Nginx на хосте будет обрабатывать внешний трафик, поэтому контейнеру достаточно HTTP на порту 80, а хосту — пробросить нестандартный порт, например 2045.
Отредактируйте секцию expose:
expose:
- '2045:80' # http
# - '443:443' # httpsЭто позволит контейнеру принимать HTTP на 80, а на хосте будет доступен порт 2045.
Конфигурация доменного имени Discourse
Укажите домен, на котором будет работать форум, в переменной DISCOURSE_HOSTNAME:
DISCOURSE_HOSTNAME: 'discourse.example.ru'Укажите email администратора (список через запятую допускается):
DISCOURSE_DEVELOPER_EMAILS: 'admin@example.ru'Настройка SMTP
SMTP — критическая часть: без корректного SMTP регистрация и подтверждение аккаунтов не будут работать. В app.yml укажите данные вашего SMTP‑провайдера. Пример для Mailgun:
DISCOURSE_SMTP_ADDRESS: smtp.mailgun.org
DISCOURSE_SMTP_PORT: 587
DISCOURSE_SMTP_USER_NAME: 'postmaster@mg.example.ru'
DISCOURSE_SMTP_PASSWORD: 'ваш_пароль'Сохраните изменения и соберите контейнер на основе app.yml:
sudo ./launcher bootstrap app
Запустите контейнер:
sudo ./launcher start appПроверьте запущенные контейнеры:
docker ps -aУбедитесь, что на хосте открыт ожидаемый порт:
netstat -plntuЕсли контейнер работает и порт 2045 присутствует, Discourse установлен в Docker.
Шаг 3 — Генерация SSL с помощью Let’s Encrypt
Мы будем использовать бесплатные сертификаты от Let’s Encrypt. На сервере установите клиент certbot (в Ubuntu 16.04 пакет называется letsencrypt или certbot в новых репозиториях):
sudo apt install letsencrypt -yЗапустите получение сертификата в интерактивном режиме:
letsencrypt certonlyПри запросе укажите email для уведомлений и согласитесь с условиями. Введите домен discourse.example.ru, для которого нужно выпустить сертификат.


При успешном получении сертификатов они будут в каталоге /etc/letsencrypt/live/discourse.example.ru

Совет: настройте автоматическое продление сертификатов (cron или systemd timer с командой certbot renew).
Шаг 4 — Установка и настройка Nginx как обратного прокси
Установите Nginx:
sudo apt install nginx -y
systemctl start nginx
systemctl enable nginxПроверьте, что Nginx слушает порт 80:
netstat -plntu
Создайте виртуальный хост для Discourse в /etc/nginx/sites-available/discourse:
cd /etc/nginx/
vim sites-available/discourseПример конфигурации Nginx для пересылки запросов на контейнер на порту 2045:
server {
listen 80; listen [::]:80;
server_name discourse.example.ru;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl http2;
server_name discourse.example.ru;
ssl_certificate /etc/letsencrypt/live/discourse.example.ru/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/discourse.example.ru/privkey.pem;
include /etc/nginx/snippets/ssl.conf;
location / {
proxy_pass http://discourse.example.ru:2045/;
proxy_set_header Host $http_host;
proxy_http_version 1.1;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_redirect http://discourse.example.ru:2045/ https://discourse.example.ru;
}
}Примечания:
- Все HTTP‑запросы перенаправляются на HTTPS.
- Путь к сертификатам должен совпадать с тем, где certbot сохранил файлы.
Создайте дополнительный сниппет ssl.conf с жёсткими настройками безопасности:
vim snippets/ssl.confssl_session_timeout 1d;
ssl_session_cache shared:SSL:50m;
ssl_session_tickets off;
ssl_protocols TLSv1.2;
ssl_ciphers EECDH+AESGCM:EECDH+AES;
ssl_ecdh_curve secp384r1;
ssl_prefer_server_ciphers on;
ssl_stapling on;
ssl_stapling_verify on;
add_header Strict-Transport-Security 'max-age=15768000; includeSubdomains; preload';
add_header X-Frame-Options DENY;
add_header X-Content-Type-Options nosniff;Активируйте сайт и проверьте конфигурацию:
ln -s /etc/nginx/sites-available/discourse /etc/nginx/sites-enabled/
nginx -t
systemctl restart nginx
Если Nginx успешно перезапущен и доступен по HTTPS, переходите к веб‑установке Discourse.
Шаг 5 — Веб‑установщик Discourse
Откройте в браузере https://discourse.example.ru (или http, вас перенаправит на https).
При первом заходе нажмите Register и создайте администратора. Система отправит подтверждение на указанный email.

Заполните данные администратора и подтвердите почту по ссылке.



После подтверждения следуйте мастеру настройки: стандартно 13 шагов базовой конфигурации (логотип, заголовок, настройки безопасности и т. п.). Можно пропустить и выполнить позже.

Если всё успешно, вы увидите админ‑панель и стартовую страницу форума.


Шаг 6 — Дополнительная настройка и отладка
Если не пришло письмо активации администратора, проверьте:
- Правильность SMTP данных в containers/app.yml
- Логи контейнера Discourse на предмет ошибок отправки почты
- Что почтовый провайдер не блокирует сообщения с вашего хоста (SPF/DKIM/DMARC)
Можно активировать администратора вручную внутри контейнера:
cd /var/discourse
./launcher enter app
rails c
u = User.last
u.admin = true
u.activate
u.saveПосле этого вы сможете войти под учётной записью администратора.
Отладка и часто встречающиеся проблемы
- SMTP не работает: проверьте доступность SMTP по сети (telnet smtp.server 587), корректность логина и пароля, правило брандмауэра.
- SSL ошибки: убедитесь, что Nginx использует правильные пути к сертификатам, и что сертификат актуален.
- 502 Bad Gateway: проверьте, запущен ли контейнер Discourse и доступен ли порт 2045 на хосте.
- Проблемы с загрузкой медиа: проверьте настройки дискового хранилища, права на каталоги и размер upload_max_filesize при наличии PHP‑компонентов (если используются интеграции).
Важно: сохраняйте резервные копии базы PostgreSQL и директории контейнера перед обновлениями.
Безопасность и эксплуатация (рекомендации)
- Автоматическое обновление сертификатов: настройте регулярный запуск certbot renew и перезагрузку Nginx.
- Резервное копирование: настройте регулярные дампы PostgreSQL и сохранение /var/discourse/shared/standalone.
- Обновления Discourse: используйте ./launcher rebuild app для применения обновлений, предварительно создав резервную копию.
- Мониторинг: включите мониторинг дискового пространства, использования RAM, состояния контейнеров и метрик приложений.
- Ограничение доступа к админ‑панели: при возможности используйте IP‑фильтры для административных страниц и двухфакторную аутентификацию для аккаунтов администраторов.
Альтернативные подходы и когда они подходят
- Виртуальная машина без Docker: подходит, если нужно детально контролировать версии зависимостей. Минус — более сложная поддержка.
- Облачные провайдеры (DigitalOcean, Hetzner, AWS): простая автоматизация и резервирование; могут взимать плату.
- Хостинг Discourse (Discourse.org): если хочется полностью отказаться от администрирования — официальный хостинг решает все вопросы, но это платно.
Резервирование и обновления — мини методология
- Перед обновлением всегда создавайте резервную копию базы и файлов: pg_dump и архивация /var/discourse/shared
- Тестируйте обновления на отдельной тестовой среде, идентичной production
- Выполняйте обновления в окно низкой нагрузки
- При проблемах откатывайте базу и файлы из бэкапа и уведомляйте пользователей
Чеклист ролей
DevOps/Системный администратор:
- Настроить Docker и контейнеры
- Обеспечить бэкапы и мониторинг
- Настроить Nginx, SSL и брандмауэр
- Выполнять обновления и откаты
Администратор форума:
- Настроить категории, правила и LDAP/SSO если требуется
- Настроить модераторов и права доступа
- Проверять логи и отклики пользователей
Разработчик/интегратор:
- Настроить вебхуки, плагины и интеграции
- Тестировать производительность и кэширование
Критерии приёмки
- Форум отвечает по HTTPS без ошибок сертификата
- Отправка почты и регистрация работают корректно
- Админ может войти и выполнить базовую конфигурацию
- Резервное копирование настроено и протестировано
- Мониторинг сообщает о состоянии сервера
Краткая карточка с ключевыми числами
- Порт контейнера Discourse: 80 внутри, 2045 на хосте (настройка примера)
- Каталог установки инсталлятора: /var/discourse
- Путь сертификатов Let’s Encrypt: /etc/letsencrypt/live/<домен>
Однострочный глоссарий
- Docker: платформа контейнеризации приложений.
- Nginx: веб‑сервер и обратный прокси.
- Let’s Encrypt: бесплатный CA для получения SSL.
- SMTP: протокол отправки электронной почты.
Примеры тестов и приёмки
- Проверка доступности: curl -I https://discourse.example.ru должен вернуть 200 и заголовки HSTS
- Проверка SMTP: попытка восстановления пароля приведёт к отправке письма
- Проверка SSL: sslscan/Qualys не должны показывать уязвимые протоколы ниже TLS 1.2
Полезные команды для администрирования
cd /var/discourse
./launcher enter app
./launcher rebuild app
./launcher start app
./launcher stop app
docker ps -a
docker logs GDPR и приватность (коротко)
- Убедитесь, что пользователи дают явное согласие на обработку персональных данных при регистрации, если это требуется в вашей юрисдикции.
- При необходимости настройте политику удаления данных (право на забвение) и экспорт профилей.
Итог
Используя Docker и официальные инструкции Discourse, вы можете относительно быстро развернуть современный форум, защищённый SSL и обслуживаемый через Nginx. Ключевые моменты — корректная SMTP‑настройка, автоматизация продления сертификатов и регулярные резервные копии.
Важно: перед переносом в продакшн проверьте поведение при обновлении, нагрузочное тестирование и восстановление из бэкапов.
Ссылки
Похожие материалы
Несколько аккаунтов Skype: Multi Skype Launcher
Журнал для работы: повысить продуктивность
Персональные звуки уведомлений на Android
Скачивание шоу Hulu для офлайн‑просмотра
Microsoft Start: персонализированная новостная лента