Гид по технологиям

Установка Discourse на Ubuntu 16.04 с Nginx и Let's Encrypt

• 7 min read • DevOps • Обновлено 21 Nov 2025
Установка Discourse на Ubuntu 16.04 с Nginx
Установка Discourse на Ubuntu 16.04 с Nginx

Discourse — свободное и открытое программное обеспечение для создания интернет‑форумов и списков рассылки. Проект начат в 2013 году; в основе — Ruby и JavaScript. Discourse используется в проектах и сообществax многих организаций.

В этом руководстве показано, как по шагам установить и настроить Discourse на Ubuntu 16.04 с использованием Docker, настроить Nginx как обратный прокси и обеспечить HTTPS с бесплатными сертификатами от Let’s Encrypt.

Что мы сделаем

  1. Установим Docker на Ubuntu 16.04
  2. Установим и настроим Discourse в Docker
  3. Сгенерируем SSL‑сертификат от Let’s Encrypt
  4. Установим и настроим Nginx как обратный прокси для Discourse
  5. Пройдем веб‑установщик Discourse и создадим администратора
  6. Дополнительная настройка и отладка

Требования

  • Сервер с 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

Загрузка Docker

После завершения установки проверьте состояние сервиса:

systemctl status docker

Проверьте, что Docker включён в автозагрузку:

systemctl is-enabled docker

Проверка состояния 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

Bootstrap приложения

Запустите контейнер:

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, для которого нужно выпустить сертификат.

Запрос email для восстановления

Согласие с условиями Let's Encrypt

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

Создание сертификата Let's Encrypt

Совет: настройте автоматическое продление сертификатов (cron или systemd timer с командой certbot renew).

Шаг 4 — Установка и настройка Nginx как обратного прокси

Установите Nginx:

sudo apt install nginx -y
systemctl start nginx
systemctl enable nginx

Проверьте, что Nginx слушает порт 80:

netstat -plntu

Установлен Nginx

Создайте виртуальный хост для 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.conf
ssl_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

Если Nginx успешно перезапущен и доступен по HTTPS, переходите к веб‑установке Discourse.

Шаг 5 — Веб‑установщик Discourse

Откройте в браузере https://discourse.example.ru (или http, вас перенаправит на https).

При первом заходе нажмите Register и создайте администратора. Система отправит подтверждение на указанный email.

Кнопка регистрации

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

Регистрация в Discourse

Подтверждение аккаунта администратора

Пример письма подтверждения

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

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

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

Discourse на Nginx

Панель администратора Discourse

Шаг 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): если хочется полностью отказаться от администрирования — официальный хостинг решает все вопросы, но это платно.

Резервирование и обновления — мини методология

  1. Перед обновлением всегда создавайте резервную копию базы и файлов: pg_dump и архивация /var/discourse/shared
  2. Тестируйте обновления на отдельной тестовой среде, идентичной production
  3. Выполняйте обновления в окно низкой нагрузки
  4. При проблемах откатывайте базу и файлы из бэкапа и уведомляйте пользователей

Чеклист ролей

  • 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‑настройка, автоматизация продления сертификатов и регулярные резервные копии.

Важно: перед переносом в продакшн проверьте поведение при обновлении, нагрузочное тестирование и восстановление из бэкапов.

Ссылки

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Несколько аккаунтов Skype: Multi Skype Launcher
Программное обеспечение

Несколько аккаунтов Skype: Multi Skype Launcher

Журнал для работы: повысить продуктивность
Productivity

Журнал для работы: повысить продуктивность

Персональные звуки уведомлений на Android
Android.

Персональные звуки уведомлений на Android

Скачивание шоу Hulu для офлайн‑просмотра
Стриминг

Скачивание шоу Hulu для офлайн‑просмотра

Microsoft Start: персонализированная новостная лента
Новости

Microsoft Start: персонализированная новостная лента

Как изменить имя в Epic Games быстро
Гайды

Как изменить имя в Epic Games быстро