Установка Discourse с Docker на Ubuntu 20.04

Discourse — бесплатная платформа с открытым исходным кодом для создания форумов и списков рассылки. Приложение написано с использованием Ember.js и Ruby on Rails и хранит данные в PostgreSQL. Discourse поддерживает модульную интеграцию, социальную авторизацию, двухфакторную аутентификацию, API и мощные инструменты модерирования.
В этой инструкции показан практический путь установки на сервер с Ubuntu 20.04 с использованием официального образа Discourse в Docker.
Краткий обзор процесса
- Установить Docker и необходимые утилиты.
- Клонировать репозиторий discourse_docker в /opt/discourse.
- Запустить скрипт ./discourse-setup и ввести hostname, данные SMTP и e‑mail для Let’s Encrypt.
- Проверить работу сайта по HTTPS и подтвердить учётную запись администратора.
Предварительные условия
- Сервер с Ubuntu 20.04.
- Доменное имя, указывающее на сервер (A/AAAA запись).
- SMTP‑сервер для исходящей почты (например, Gmail SMTP можно использовать при тестировании).
- Пароль root или привилегированный sudo-пользователь.
Важно: для успешной выдачи сертификата Let’s Encrypt должны быть открыты порты 80 и 443.
Установка Docker
Установите Docker из стандартного репозитория Ubuntu:
apt-get update
apt-get install docker.io -yЗапустите сервис Docker и включите автозапуск:
systemctl start docker
systemctl enable dockerПроверьте статус: systemctl status docker.
Загрузка Discourse
Создайте рабочую директорию и клонируйте официальный репозиторий контейнеров Discourse:
mkdir /opt/discourse
git clone https://github.com/discourse/discourse_docker.git /opt/discourseУстановите пакет net-tools (для удобства работы с сетевыми утилитами):
apt-get install net-tools -yУстановка и конфигурация Discourse
Перейдите в каталог и запустите установочный скрипт:
cd /opt/discourse
./discourse-setupСкрипт проверит свободные порты и ресурсы, затем попросит ввести следующие данные:
- Hostname для Discourse (полное доменное имя).
- Email администратора.
- Адрес SMTP, порт, имя пользователя и пароль.
- Опциональный email для предупреждений Let’s Encrypt.
Пример интерактивного диалога, который покажет скрипт:
Hostname for your Discourse? [discourse.example.com]: discourse.example.com
Email address for admin account(s)? [[email protected]]: [email protected]
SMTP server address? [smtp.example.com]: smtp.gmail.com
SMTP port? [587]:
SMTP user name? [[email protected]]: [email protected]
SMTP password? [pa$$word]: your-smtp-password
Optional email address for Let's Encrypt warnings? (ENTER to skip) [[email protected]]:После подтверждения скрипт запустит сборку и развертывание контейнера. В процессе вы увидите вывод Docker run и идентификатор запущенного контейнера.
Важно: скрипт генерирует файл конфигурации containers/app.yml внутри /opt/discourse. Для внесения изменений редактируйте /opt/discourse/containers/app.yml и применяйте команду ./launcher rebuild app.
Доступ к веб-интерфейсу
Откройте браузер и перейдите по адресу https://ваш-домен.

Нажмите кнопку Register или Зарегистрироваться и создайте администратора.

Введите имя пользователя, пароль и завершите регистрацию. На указанный e‑mail придёт письмо с подтверждением.

Проверьте почту и активируйте аккаунт.
Критерии приёмки
- Сайт доступен по HTTPS на вашем домене.
- Сертификат Let’s Encrypt выдан и установлен без ошибок.
- Администратор зарегистрирован и может войти в панель управления.
- Отправка писем работает (регистрация/сброс пароля проходит успешно).
Контрольный список перед запуском
- DNS A/AAAA запись указывает на IP сервера.
- Порты 80 и 443 открыты в firewall/маршрутизаторе.
- Docker запущен и работает.
- У вас есть учетные данные SMTP.
- Резервная стратегия (backup) настроена.
Ролевые чек-листы
Администратор:
- Создать учётную запись администратора.
- Настроить основные категории и правила модерации.
DevOps:
- Настроить автоматические бэкапы PostgreSQL и файлов /shared.
- Обеспечить мониторинг диска и памяти.
- Обновлять Docker и контейнеры по расписанию.
Модератор:
- Проверить правило спама и группы доверия.
- Настроить автоматические предупреждения и блокировки.
Мини-методология развёртывания (шаги)
- Подготовка сервера: обновление пакетов, установка Docker.
- Размещение репозитория /opt/discourse.
- Запуск
./discourse-setupи ввод конфигурации. - Проверка логов
./launcher logs appпри ошибках. - Функциональное тестирование: регистрация, письма, вход.
- Настройка бэкапов и политики обновлений.
Когда установка может не сработать и как исправить
- Проблема: Порты 80/443 заняты. Решение: остановите сервисы, использующие эти порты (nginx, apache) или смените их конфигурацию.
- Проблема: DNS не указывает на сервер. Решение: проверьте записи DNS и дождитесь их распространения.
- Проблема: SMTP не отправляет почту. Решение: проверьте правильность учетных данных, логирование почты и ограничения провайдера (Gmail может ограничивать доступ из нестандартных мест).
- Проблема: Let’s Encrypt не выдаёт сертификат. Решение: убедитесь, что домен резолвится, и порты открыты; при необходимости используйте временно выключенный firewall.
Рекомендации по безопасности
- Обновляйте хост и Docker регулярно.
- Используйте firewall (ufw): откройте только 80 и 443 и SSH порт.
- Настройте fail2ban для защиты SSH и панелей.
- Храните бекапы вне хоста (облачное хранилище или отдельный сервер).
- Отключите прямой доступ к базе данных из внешней сети.
Бэкапы и сопровождение
Discourse хранит данные в PostgreSQL и в директории /var/discourse/shared/standalone. План резервирования должен включать:
- Полные регулярные дампы базы данных (pg_dump или горячие резервные копии).
- Копирование каталога /var/discourse/shared/standalone (attachments, uploads, ssl).
- Тест восстановления на отдельном стенде.
Альтернативные подходы
- Хостинг Discourse у стороннего провайдера (Discourse.org предлагает платный хостинг) — быстро, но дороже.
- Развёртывание на VPS с Docker Compose вместо стандартного скрипта — даёт больше контроля, но требует дополнительных настроек.
Резюме
Вы научились устанавливать Discourse на Ubuntu 20.04 с помощью официального Docker-скрипта. Основные шаги: подготовка сервера, установка Docker, клонирование репозитория, интерактивная настройка и проверка работы сайта. Не забудьте настроить бэкапы, мониторинг и базовые меры безопасности.
Важно: если что-то идёт не так, смотрите логи контейнера (./launcher logs app) и проверяйте состояние сети и DNS.
Часто задаваемые вопросы
Q: Можно ли использовать Gmail SMTP? A: Да, Gmail SMTP можно использовать, но учитывайте ограничения безопасности Google. При необходимости настройте пароль приложения и включите доступ для менее безопасных приложений или используйте OAuth.
Q: Как изменить память или число рабочих процессов? A: Отредактируйте /opt/discourse/containers/app.yml и измените параметры, затем выполните ./launcher rebuild app.
Q: Как сделать резервную копию? A: Используйте встроенные инструменты Discourse для бэкапов и дополнительно делайте дампы PostgreSQL и копии каталога /var/discourse/shared/standalone.
Автор: инструкция адаптирована для локальной установки на Ubuntu 20.04. Если нужны команды для автоматизации CI/CD или шаблон playbook Ansible — могу подготовить.
Похожие материалы
Несколько аккаунтов Skype: Multi Skype Launcher
Журнал для работы: повысить продуктивность
Персональные звуки уведомлений на Android
Скачивание шоу Hulu для офлайн‑просмотра
Microsoft Start: персонализированная новостная лента