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

Установка Discourse на CentOS 8 с помощью Docker

• 5 min read • DevOps • Обновлено 27 Nov 2025
Установка Discourse на CentOS 8 через Docker
Установка Discourse на CentOS 8 через Docker

Общее изображение Discourse

Краткое введение

Discourse — свободная платформа для современных форумов. Подходит для почтовых списков, форумов, длинных чатов и прочего. В бэкенде используется Ruby on Rails, фронтенд на Ember.js, база данных — PostgreSQL, кеш — Redis. В этом руководстве мы разберём установку с помощью Docker на CentOS 8.

Основные варианты развёртывания

  • Docker (рекомендуется для простого и быстрого развёртывания).
  • Нативная установка (более гибкая, требует больше знаний Ruby/Postgres/Redis).
  • Управляемые облачные решения (подходит, если не хотите администрировать сервер).

Требования и предпосылки

  • Сервер с CentOS 8 (root-доступ).
  • Действующее доменное имя, направленное на IP сервера.
  • Доступ к SMTP (для подтверждений email).
  • Минимум 4 ГБ RAM и 2 физических CPU (рекомендуется для небольшого сообщества).
  • Открытые порты 80 и 443 в брандмауэре.

Полезная памятка: Discourse использует Docker-контейнер, внутри которого развернут Rails, PostgreSQL и Redis — вам нужно следить за ресурсами хоста и резервным копированием /var/discourse.

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

Docker не всегда присутствует в стандартном репозитории CentOS 8, поэтому добавим официальный репозиторий и установим пакет:

dnf config-manager --add-repo=https://download.docker.com/linux/centos/docker-ce.repo

Затем установите Docker:

dnf install docker-ce --nobest

Запустите сервис и включите автозагрузку:

systemctl start docker  
systemctl enable docker

Проверьте версию Docker:

docker --version

(В примере ожидается вывод примерно вида: Docker version 20.10.1, build 831ebea).

Важно: на CentOS 8 SELinux может блокировать некоторые действия контейнеров. Если вы столкнётесь с проблемами прав доступа, проверьте /var/log/audit/audit.log и рассмотрите настройку boolean для контейнеров или временное перевод SELinux в режим permissive для диагностики.

Шаг 2. Загрузка и подготовка Discourse

Создайте каталог для Discourse и клонируйте официальный репозиторий с шаблонами Docker:

mkdir /opt/discourse
git clone https://github.com/discourse/discourse_docker.git /opt/discourse

Перейдите в каталог и запустите скрипт установки:

cd /opt/discourse  
./discourse-setup

Во время выполнения вам предложат ввести FQDN (полное доменное имя), email администратора и параметры SMTP. Пример интерактивного вывода и запросов из скрипта:

which: no docker.io in (/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin)
which: no docker.io in (/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin)
Ports 80 and 443 are free for use
'samples/standalone.yml' -> 'containers/app.yml'
Found 4GB of memory and 2 physical CPU cores
setting db_shared_buffers = 1024MB
setting UNICORN_WORKERS = 4
containers/app.yml memory parameters updated.

Hostname for your Discourse? [discourse.example.com]: discourse.linuxbuz.com

Далее скрипт запросит SMTP-сервер, порт, логин и пароль. Пример вопросов и сводной проверки:

Checking your domain name . . .
Connection to discourse.linuxbuz.com succeeded.
Email address for admin account(s)? [[email protected],[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]: yourpassword
Optional email address for Let's Encrypt warnings? (ENTER to skip) [[email protected]]: [email protected]

Does this look right?

Подтвердите ввод и начнётся сборка и запуск контейнера. Скрипт создаст контейнер с именем app и пробросит порты 80 и 443.

Пример команды docker run, которую запустит скрипт (оставлено как исходный вывод):

+ /usr/bin/docker run --shm-size=512m -d --restart=always -e LANG=en_US.UTF-8 -e RAILS_ENV=production -e UNICORN_WORKERS=4 -e UNICORN_SIDEKIQS=1 -e RUBY_GLOBAL_METHOD_CACHE_SIZE=131072 -e RUBY_GC_HEAP_GROWTH_MAX_SLOTS=40000 -e RUBY_GC_HEAP_INIT_SLOTS=400000 -e RUBY_GC_HEAP_OLDOBJECT_LIMIT_FACTOR=1.5 -e DISCOURSE_DB_SOCKET=/var/run/postgresql -e DISCOURSE_DB_HOST= -e DISCOURSE_DB_PORT= -e LETSENCRYPT_DIR=/shared/letsencrypt -e DISCOURSE_HOSTNAME=discourse.linuxbuz.com -e [email protected] -e DISCOURSE_SMTP_ADDRESS=smtp.gmail.com -e DISCOURSE_SMTP_PORT=587 -e [email protected] -e DISCOURSE_SMTP_PASSWORD=yourpassword -e [email protected] -h centos8-app -e DOCKER_HOST_IP=172.17.0.1 --name app -t -p 80:80 -p 443:443 -v /var/discourse/shared/standalone:/shared -v /var/discourse/shared/standalone/log/var-log:/var/log --mac-address 02:e0:37:60:d3:09 local_discourse/app /sbin/boot
ab3bdf3c169d47d9ff06052f48ff078d46393f1152b651b9fd3354594cc38714

Проверьте запущенные контейнеры:

docker ps

Ожидаемый вывод содержит контейнер app, проброшенные порты 80 и 443:

CONTAINER ID   IMAGE                 COMMAND        CREATED          STATUS          PORTS                                      NAMES
ab3bdf3c169d   local_discourse/app   "/sbin/boot"   22 seconds ago   Up 21 seconds   0.0.0.0:80->80/tcp, 0.0.0.0:443->443/tcp   app

Шаг 3. Доступ к веб-интерфейсу

Откройте браузер по адресу https://ваш-домен и вы перейдёте на страницу настройки Discourse. Интерфейс предложит регистрацию администратора и подтверждение email.

Установка Discourse прошла успешно

Нажмите кнопку Register и заполните форму регистрации администратора.

Страница регистрации администратора

После регистрации вы получите письмо для активации аккаунта.

Подтверждение email

Проверка и отладка

  • Логи контейнера: docker logs app
  • Проверка соединения SMTP: используйте swaks или telnet для проверки подключения к SMTP-серверу.
  • Проверка брандмауэра: firewall-cmd –list-all –zone=public и откройте 80/443 если нужно.
  • SELinux: audit2why и setenforce 0 для временной диагностики.

Частые проблемы и когда они встречаются:

  • Ошибка Let’s Encrypt: проверьте, что домен указывает на IP сервера и порт 80 открыт.
  • Ошибки SMTP: неверные логин/пароль или блокировка со стороны провайдера (например, Gmail может требовать App Password или OAuth).
  • Недостаточно памяти: контейнеры могут падать при нехватке RAM — добавьте swap или увеличьте ОЗУ.

Безопасность и эксплуатация

  • Настройте автоматическое обновление образов и периодическую проверку CVE для образа Discourse.
  • Бэкап: копируйте /var/discourse/shared/standalone/backups и базу данных PostgreSQL.
  • HTTPS: используйте встроенную поддержку Let’s Encrypt (скрипт предложит адрес для уведомлений).
  • Ограничьте доступ к SSH и настройте fail2ban.

Рекомендация: периодически тестируйте восстановление из резервной копии на тестовом сервере.

Альтернативные подходы и когда выбирать их

  • Нативная установка на хосте: если нужно тонко настраивать Ruby/ểmiddleware.
  • Kubernetes: для крупных сообществ с требованием высокой доступности.
  • Управляемый хостинг: если хотите избежать админской нагрузки.

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

  • Для администратора сервера:

    • DNS A-запись указывает на сервер.
    • Порты 80/443 открыты.
    • Установлен Docker и включён.
    • Резервное копирование настроено.
  • Для администратора Discourse:

    • SMTP работает и письма доходят.
    • Создана и подтверждена учётная запись администратора.
    • Проверены настройки Let’s Encrypt и политики паролей.

Критерии приёмки

  • Сайт доступен по HTTPS без предупреждений.
  • Регистрация администратора проходит и подтверждение по email успешно.
  • Контейнер app в статусе Up и слушает порты 80/443.
  • Резервная копия успешно создаётся и восстанавливается на тестовом хосте.

Мини-методология поддержки (SOP)

  1. Проверить состояние Docker: systemctl status docker; docker ps.
  2. Просмотреть логи приложения: docker logs app –tail 200.
  3. Выполнить проверку SMTP и DNS.
  4. При необходимости восстановить из последней резервной копии.

Короткий глоссарий

  • FQDN — полное доменное имя сервера.
  • SMTP — протокол для отправки почты.
  • SELinux — подсистема безопасности Linux.

Ресурсы и примечания

Заключение

Поздравляем — вы установили Discourse на CentOS 8 с помощью Docker. Проверьте SMTP и HTTPS, настройте бэкапы и мониторинг. Если требуется масштабирование, рассмотрите переход на Kubernetes или выделение внешних сервисов для PostgreSQL и Redis.

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

Поделиться: 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 быстро