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

Установка Discourse на Ubuntu 18.04

• 6 min read • Инструкции • Обновлено 24 Nov 2025
Установка Discourse на Ubuntu 18.04
Установка Discourse на Ubuntu 18.04

О чём эта инструкция

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

Кому полезно: инженер по сопровождению, разработчик, веб-мастер.


Заставка Discourse: экран приветствия и логотип

Введение

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. Вы увидите страницу входа и дальнейший мастер настройки.

Веб-интерфейс Discourse

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

Вход в Discourse

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

Панель пользователя Discourse

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

Мастер настройки Discourse

Выбор языка

Конфигурация доступа

Контактные данные

Настройки организации

Выбор темы

Загрузка логотипа

Загрузка иконок

Заголовок домашней страницы

Выбор эмодзи

Приглашение сотрудников

Готово: Discourse настроен

Панель после настройки

Поздравляем — Discourse установлен и запущен.

Тесты и критерии приёмки

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

  • Веб‑интерфейс доступен по HTTP(S) и отображает главную страницу.
  • Вход администратора работает и можно запустить мастер настройки.
  • Записи в базе данных создаются после создания тем и сообщений.
  • Ассеты (CSS/JS) корректно отдаются Nginx.

Тестовые шаги:

  1. Создать тестовую тему и сообщение, убедиться, что они сохраняются.
  2. Отправить тестовое письмо и проверить уведомления по e‑mail.
  3. Перезагрузить 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 следуйте официальным рекомендациям по миграции и выполняйте бэкапы БД и файлов.

Быстрый план отката в экстренной ситуации

  1. Остановить Puma и nginx.
  2. Восстановить базу данных из последнего корректного дампа.
  3. Вернуть конфигурационные файлы (nginx, discourse.conf, puma.rb) из резервной копии.
  4. Перезапустить сервисы и проверить доступность.

Заключение

Вы только что установили и настроили Discourse на Ubuntu 18.04 вручную. Для продакшн‑использования рекомендовано доработать автоматизацию, мониторинг и политики безопасности, а также рассмотреть официальный Docker‑путь для упрощения обновлений.

Важно: прежде чем запускать форум в публичную сеть, настройте HTTPS и тестируйте резервные процедуры.


Краткое резюме:

  • Подготовьте сервер, FQDN и базовые пакеты.
  • Установите PostgreSQL, Ruby (RVM), зависимости и соберите приложение.
  • Запустите Puma и настройте Nginx как обратный прокси.
  • Создайте администратора и пройдите мастер настройки в веб‑интерфейсе.

Спасибо за внимание. Если нужна автоматизация Ansible/Playbook или systemd unit для Puma — могу подготовить шаблоны.

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