Установка Discourse на Ubuntu 18.04
О чём эта инструкция
Детальная инструкция для системных администраторов и инженеров DevOps по развёртыванию Discourse — открытой платформы для форумов — на сервере с Ubuntu 18.04. Подойдёт для тестовой и небольшой продакшн-инсталляции.
Кому полезно: инженер по сопровождению, разработчик, веб-мастер.

Введение
Discourse — бесплатная платформа с открытым исходным кодом для организации форумов, поддерживает единую авторизацию (SSO), интеграции (WordPress, Google Analytics, Slack и др.), уведомления по e‑mail и мобильную верстку. В этой инструкции показан классический путь ручной установки (без Docker), который даёт контроль над компонентами и полезен для изучения внутренней структуры приложения.
Важно: официальный рекомендуемый способ развёртывания Discourse — через Docker образ и официальные скрипты. Этот мануал описывает ручную установку на Ubuntu 18.04 и пригоден, если вы хотите полный контроль над окружением или у вас особые требования.
Требования
- Сервер с Ubuntu 18.04 LTS (64‑bit).
- Статический IP (в примерах: 192.168.0.101) или корректная DNS запись на FQDN (например, test.example.com).
- Доступ root или пользователь с sudo.
- Минимум 1 ГБ оперативной памяти для тестовой среды; для продакшна рекомендуется больше (в зависимости от нагрузки).
Примечание: если планируете использовать Docker‑образ Discourse — потребуются другие шаги и ресурсы.
Быстрая проверка окружения
Перед началом убедитесь, что у вас настроен FQDN и сеть работает:
hostnamectl set-hostname test.example.com
hostname -fПроверьте /etc/hosts, если DNS недоступен в локальной сети:
sudo nano /etc/hosts
# Добавьте строку, если нужно (пример):
192.168.0.101 test.example.com testОбновление системы и базовые пакеты
Обновите систему и установите базовые утилиты:
sudo apt-get update -y
sudo apt-get upgrade -y
sudo apt-get install nginx curl git wget unzip nano -yВажно: если сервер в продакшне, согласуйте окно обновления и сделайте бэкап.
Установка и настройка PostgreSQL
Discourse использует PostgreSQL. Установите и настройте базу данных:
sudo apt-get install postgresql -y
sudo -u postgres psqlВ консоли PostgreSQL выполните:
CREATE DATABASE discoursedb;
CREATE USER discourseuser;
ALTER USER discourseuser WITH ENCRYPTED PASSWORD 'password';
ALTER DATABASE discoursedb OWNER TO discourseuser;
\c discoursedb
CREATE EXTENSION hstore;
CREATE EXTENSION pg_trgm;
\qПримечание: используйте безопасный пароль и храните его в защищённом хранилище (например, HashiCorp Vault или секреты в облаке).
Установка Ruby с RVM
Discourse требует Ruby. В этом руководстве мы используем RVM для установки Ruby и Rails.
sudo apt-get install gnupg2 -y
gpg2 --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3 7D2BAF1CF37B13E2069D6956105BD0E739499BDB
curl -sSL https://get.rvm.io | bash -s stable --rails
source /usr/local/rvm/scripts/rvm
rvm listОжидаемый вывод покажет установленный Ruby (в примере — 2.6.3). Если вы используете более новые версии, скорректируйте команды под вашу версию.
Скачивание исходников Discourse
Склонируйте репозиторий и выберите стабильную версию (в примере v2.2.4):
cd /var/www/
sudo git clone https://github.com/discourse/discourse.git
cd discourse
sudo git checkout v2.2.4Обратите внимание: выбор тега фиксирует версию. Для поддержки актуальной версии используйте стабильную ветку и тестируйте обновления в staging.
Зависимости и сборка
Установите системные библиотеки и зависимости для сборки:
sudo apt-get install gcc ruby-dev libxslt-dev libxml2-dev zlib1g-dev libpq-dev imagemagick redis-server optipng pngquant jhead jpegoptim gifsicle -yУстановите bundler нужной версии и зависимости приложения:
/usr/local/rvm/src/ruby-2.6.3/bin/gem install bundler -v '1.17.3'
RAILS_ENV=production bundle install --path vendor/bundle/Если процесс занимает много времени, запустите его в screen или tmux.
Конфигурация Discourse
Переименуйте шаблон конфигурации и заполните параметры базы данных и hostname:
mv config/discourse_defaults.conf config/discourse.conf
sudo nano config/discourse.confИзмените значения:
db_host = localhost
db_port = 5432
db_name = discoursedb
db_username = discourseuser
db_password = password
hostname = "test.example.com"Отредактируйте production окружение:
sudo nano /var/www/discourse/config/environments/production.rbДобавьте в начало:
require 'uglifier'Замените строку компрессора JavaScript:
config.assets.js_compressor = Uglifier.new(harmony: true)Запустите миграции и предкомпиляцию ассетов:
RAILS_ENV=production bundle exec rake db:migrate
RAILS_ENV=production bundle exec rake assets:precompileНастройка Puma
Откройте файл puma.rb и укажите корректный путь:
sudo nano /var/www/discourse/config/puma.rb
# Измените:
APP_ROOT = '/var/www/discourse'Создайте директории для сокетов и PID:
sudo mkdir -p /var/www/discourse/tmp/sockets/
sudo mkdir -p /var/www/discourse/tmp/pids/Запуск Puma в production:
RAILS_ENV=production bundle exec puma -C /var/www/discourse/config/puma.rbПри успешном запуске вы увидите строки о прослушиваемом сокете unix:///var/www/discourse/tmp/sockets/puma.sock.
Важно: для продакшна рекомендуется запускать Puma через systemd unit или управлять процессом с помощью pumactl. Ниже — пример перезапуска:
RAILS_ENV=production bundle exec pumactl -P /var/www/discourse/tmp/pids/puma.pid restartСоздание администратора
Создайте администраторскую учётную запись:
cd /var/www/discourse
RAILS_ENV=production bundle exec rake admin:createСледуйте подсказкам (email, пароль, подтверждение выдачи прав администратора).
Настройка Nginx как обратного прокси
Скопируйте пример конфигурации и отредактируйте upstream на Puma сокет:
sudo cp /var/www/discourse/config/nginx.sample.conf /etc/nginx/conf.d/discourse.conf
sudo nano /etc/nginx/conf.d/discourse.confПример изменений:
upstream discourse {
server unix:/var/www/discourse/tmp/sockets/puma.sock;
}
server_name test.example.com;Создайте кэш директорию и проверьте конфигурацию:
sudo mkdir -p /var/nginx/cache/
sudo nginx -t
sudo systemctl restart nginx
sudo systemctl status nginxЕсли при доступе к веб‑интерфейсу возникает ошибка с ассетами JS, скопируйте нужный файл (пример):
cp /var/www/discourse/public/assets/_vendor-3eae3eec8fba033cb1b5af6c103a5b8781caa69cf97fe7773ba89ba68980b263.js /var/www/discourse/public/assets/vendor-3eae3eec8fba033cb1b5af6c103a5b8781caa69cf97fe7773ba89ba68980b263.jsДоступ к веб‑интерфейсу
Откройте браузер и перейдите по адресу http://test.example.com. Вы увидите страницу входа и дальнейший мастер настройки.

На странице входа нажмите Log In и введите учетные данные администратора.

После входа откроется панель пользователя и мастер первоначальной настройки (wizard):

Запустите мастер по адресу http://test.example.com/wizard и пройдите шаги: выбор языка, конфигурация доступа, контактные данные, организация, тема, загрузка логотипа и иконок, установка домашней страницы, эмодзи и приглашение сотрудников.













Поздравляем — Discourse установлен и запущен.
Тесты и критерии приёмки
Критерии приёмки:
- Веб‑интерфейс доступен по HTTP(S) и отображает главную страницу.
- Вход администратора работает и можно запустить мастер настройки.
- Записи в базе данных создаются после создания тем и сообщений.
- Ассеты (CSS/JS) корректно отдаются Nginx.
Тестовые шаги:
- Создать тестовую тему и сообщение, убедиться, что они сохраняются.
- Отправить тестовое письмо и проверить уведомления по e‑mail.
- Перезагрузить nginx и puma и убедиться в непрерывности работы.
Рекомендации по безопасности и SSL
- Для открытых сайтов обязательно получите TLS‑сертификат (Let’s Encrypt) и включите HTTPS на Nginx.
- Настройте брандмауэр (ufw) и закройте неиспользуемые порты.
- Ограничьте доступ к серверу по SSH ключам и отключите парольную аутентификацию.
Пример быстрой настройки HTTPS с certbot:
sudo apt-get install certbot python3-certbot-nginx -y
sudo certbot --nginx -d test.example.comРезервное копирование и восстановление
Минимум для восстановления системы:
- Регулярный дамп базы данных PostgreSQL.
- Резерв статических файлов и директории public/uploads/.
- Конфигурационные файлы (config/discourse.conf, puma.rb, nginx.conf).
Пример дампа PostgreSQL:
sudo -u postgres pg_dump discoursedb > /var/backups/discoursedb_$(date +%F).sqlВосстановление:
sudo -u postgres psql discoursedb < /var/backups/discoursedb_YYYY-MM-DD.sqlВажно: перед восстановлением выполните бэкап текущей БД.
Производительность и масштабирование
- Для небольших сообществ достаточно одного сервера с Redis, PostgreSQL и Puma. Для роста стоит рассмотреть разделение сервисов на отдельные виртуальные машины или контейнеры.
- Кэширование, CDN и оптимизация ассетов заметно снижают нагрузку.
- Мониторьте использование памяти и CPU (Prometheus/Grafana, netdata, top/htop).
Отладка и частые проблемы
Когда установка может не сработать:
- Неправильные права доступа на директории /var/www/discourse — проверьте владельца и права.
- Неверные параметры подключения к PostgreSQL — проверьте db_host/db_password.
- Puma не запускается — проверьте логи puma и наличие сокета в tmp/sockets.
- Nginx возвращает 502/504 — проверьте, запущен ли Puma и соответствует ли путь сокета в upstream.
Полезные команды для отладки:
sudo journalctl -u nginx -f
sudo journalctl -u postgresql -f
cd /var/www/discourse && RAILS_ENV=production bundle exec puma -C config/puma.rb
tail -n 200 log/production.logАльтернативные подходы
- Использовать официальный Docker‑образ Discourse — проще в управлении и рекомендовано сообществом.
- Развернуть сервисы (Postgres, Redis) как управляемые сервисы облачного провайдера.
- Использовать готовые хостинговые решения для форумов, если не хочется управлять инфраструктурой.
Роль‑ориентированные контрольные списки
Администратор сервера:
- Проверка обновлений Ubuntu.
- Настройка пользователей и SSH‑ключей.
- Настройка бэкапов системы.
DevOps инженер:
- Настройка systemd unit для Puma.
- Мониторинг и алертинг (uptime, SLI/SLO по доступности).
- Автоматизация развёртывания (Ansible/Chef/Puppet).
Разработчик:
- Локальная сборка и тестирование плагинов.
- Проверка совместимости версий Ruby/Gem.
- Тестирование миграций перед применением в проде.
Факт‑бокс
- ОС: Ubuntu 18.04 LTS
- СУБД: PostgreSQL
- Веб‑сервер: Nginx (обратный прокси)
- Приложение: Ruby on Rails + Puma
- Кеш и pub/sub: Redis
Совместимость и миграция
- Инструкция ориентирована на Ubuntu 18.04. На Ubuntu 20.04+ и новых версиях Ruby/Gems возможны отличия в пакетах и версиях. Перед миграцией тестируйте на staging среде.
- При обновлении Discourse следуйте официальным рекомендациям по миграции и выполняйте бэкапы БД и файлов.
Быстрый план отката в экстренной ситуации
- Остановить Puma и nginx.
- Восстановить базу данных из последнего корректного дампа.
- Вернуть конфигурационные файлы (nginx, discourse.conf, puma.rb) из резервной копии.
- Перезапустить сервисы и проверить доступность.
Заключение
Вы только что установили и настроили Discourse на Ubuntu 18.04 вручную. Для продакшн‑использования рекомендовано доработать автоматизацию, мониторинг и политики безопасности, а также рассмотреть официальный Docker‑путь для упрощения обновлений.
Важно: прежде чем запускать форум в публичную сеть, настройте HTTPS и тестируйте резервные процедуры.
Краткое резюме:
- Подготовьте сервер, FQDN и базовые пакеты.
- Установите PostgreSQL, Ruby (RVM), зависимости и соберите приложение.
- Запустите Puma и настройте Nginx как обратный прокси.
- Создайте администратора и пройдите мастер настройки в веб‑интерфейсе.
Спасибо за внимание. Если нужна автоматизация Ansible/Playbook или systemd unit для Puma — могу подготовить шаблоны.
Похожие материалы
Несколько аккаунтов Skype: Multi Skype Launcher
Журнал для работы: повысить продуктивность
Персональные звуки уведомлений на Android
Скачивание шоу Hulu для офлайн‑просмотра
Microsoft Start: персонализированная новостная лента