SSD Nodes Learn 🎉 VPS от $5.50/мес
Руководства Matt ConnorАвтор: Matt Connor · Обновлено 2026-08-07

Выбор форумного движка для self-hosted: сравнение

Сравнение Discourse, Flarum, NodeBB и phpBB для VPS. Узнайте реальные требования к RAM, особенности баз данных, методы борьбы со спамом и сложности миграции для каждого ПО.

Какое форумное ПО для self-hosted размещения выбрать?

На сегодняшний день существует четыре основных варианта форумного ПО для запуска на VPS (virtual private server): Discourse, Flarum, NodeBB и phpBB. Discourse — оптимальный выбор по умолчанию, если вы можете выделить под него 4 GB оперативной памяти и у вас есть как минимум два человека, готовых заниматься модерацией. При наличии 1 GB RAM и одного модератора лучше использовать Flarum или phpBB. Небольшой форум, который вы способны поддерживать в чистоте, лучше, чем более функциональный ресурс, с которым вы не справляетесь.

Установка — самая простая часть. Любой из этих вариантов можно развернуть за вторую половину дня. То, будет ли форум существовать через год, зависит от очереди жалоб (flag queue) и настройки почты, поэтому изучите разделы о модерации и электронной почте до того, как перейдете к спискам функций.

Что на самом деле нужно для работы форума?

Форум состоит из четырех компонентов, а не из одного: процесса приложения, базы данных, которая должна существовать дольше самого приложения, директории для загружаемых аватаров и вложений, а также работающего канала для отправки почты. Приложение можно заменить. Базу данных — нет, так как в ней хранятся все сообщения, учетные записи и личные переписки. Именно поэтому база данных, выбранная для каждого проекта, является важнейшим пунктом в разделах ниже. Она определяет формат вашего экспорта на тот случай, если вы решите сменить платформу.

Вторые затраты — человеческие. Открытая регистрация и возможность публиковать сообщения означают регистрацию ботов, обычно в течение первой недели после появления домена в поисковой выдаче. Все четыре компонента можно защитить. Но только один из них содержит встроенный механизм модерации.

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

Discourse построен на Ruby on Rails, использует PostgreSQL для хранения данных, Redis для кэширования и очередей задач, а также Sidekiq для фоновой обработки. Поддерживаемый способ установки подразумевает запуск всех компонентов внутри одного Docker-контейнера, который собирается на основе конфигурационного файла /var/discourse/containers/app.yml. Устанавливать компоненты по отдельности не требуется.

wget -qO- https://raw.githubusercontent.com/discourse/discourse_docker/main/install-discourse | sudo bash

Этот скрипт устанавливает git и Docker, если они отсутствуют, клонирует discourse_docker в /var/discourse, а затем запускает интерактивный мастер настройки discourse-setup. Мастер запрашивает имя хоста, адрес электронной почты администратора и параметры SMTP, создает файл app.yml и выполняет сборку контейнера. Порты 80 и 443 должны быть свободны, так как контейнер запускает собственный nginx и автоматически запрашивает сертификат Let's Encrypt.

Официально заявленный минимум составляет 1 ГБ оперативной памяти с учетом swap и 10 ГБ дискового пространства. К требованию о наличии swap следует отнестись буквально. Скрипт установки создает файл подкачки объемом 2 ГБ с помощью fallocate -l 2G /swapfile, если мастер определяет, что системе это необходимо; этот swap не является избыточным. Пиковое потребление памяти происходит не во время работы сайта, а в процессе ./launcher rebuild app, когда при каждом обновлении внутри контейнера пересобираются JavaScript и CSS-ресурсы. На сервере с 1 ГБ ОЗУ без swap этот процесс будет принудительно завершен, пересборка прервется без информативного сообщения об ошибке, а в dmesg | tail появится строка Out of memory: Killed process. Для стабильной работы закладывайте 2 ГБ ОЗУ, а при высокой активности форума — 4 ГБ.

Обновления выполняются через /admin/upgrade в браузере или из командной строки:

cd /var/discourse
./launcher rebuild app

Команда rebuild удаляет работающий контейнер, создает новый на основе app.yml и запускает его, поэтому сайт будет недоступен в течение нескольких минут, пока идет процесс. В конфигурации с одним контейнером избежать простоя невозможно. Разделение на два контейнера с использованием примеров data.yml и web_only.yml позволяет сохранить доступность PostgreSQL во время пересборки веб-контейнера, что становится целесообразным, как только у вас появляются активные пользователи.

Модерация — это функция, оправдывающая высокое потребление памяти Discourse. Новые учетные записи получают уровень доверия 0 с жесткими ограничениями на количество ссылок и частоту публикаций, а затем повышают его по мере чтения и участия в обсуждениях. Жалобы попадают в очередь проверки, где фиксируется, кто именно обработал запрос. Интеграции с Akismet и StopForumSpam являются официальными плагинами. В других системах подобные функции приходится собирать из сторонних дополнений.

Миграция в Discourse — его самая сильная сторона. В каталоге script/import_scripts/ исходного кода содержится более шестидесяти импортеров, включая phpbb3.rb, vbulletin.rb, xenforo.rb, vanilla.rb, mybb.rb, flarum_import.rb, каталог nodebb и импортер mbox для архивов списков рассылки. Это Ruby-скрипты, которые запускаются внутри контейнера и работают с копией старой базы данных. Они работают медленно, но поддерживаются в актуальном состоянии.

Миграция из Discourse — его слабая сторона. Команда ./launcher enter app, за которой следует discourse backup, создает файл .tar.gz, содержащий дамп PostgreSQL и каталог с загруженными файлами. Восстановить его может только другой экземпляр Discourse. Никакое другое ПО не умеет читать этот формат, поэтому уход с Discourse потребует самостоятельной работы с SQL-дампом. Убедитесь, что вас устраивает такой сценарий, прежде чем импортировать 50 000 сообщений.

Flarum: легкий PHP-форум

Flarum — это обычное PHP-приложение: php-fpm за nginx или Apache, база данных MySQL или MariaDB, файлы на диске. Документированные требования включают PHP 7.3 или новее с расширениями curl, dom, fileinfo, gd, json, mbstring, openssl, pdo_mysql, tokenizer и zip, а также MySQL 5.6+ (или 8.0.23+) либо MariaDB 10.0.5+. В Ubuntu 24.04 поставляется PHP 8.3, что соответствует этим требованиям.

Обратите внимание на pdo_mysql в этом списке. Flarum не поддерживает PostgreSQL и SQLite. Если вам нужна база данных в одном файле, используйте phpBB, описанный ниже.

sudo apt update
sudo apt install -y nginx mariadb-server composer php-fpm php-mysql php-curl php-gd php-mbstring php-xml php-zip
sudo install -d -m 755 /srv/flarum
cd /srv/flarum
sudo COMPOSER_ALLOW_SUPERUSER=1 composer create-project flarum/flarum:^1.8.0 .
sudo chown -R www-data:www-data /srv/flarum

Укажите веб-серверу путь к /srv/flarum/public, а не к /srv/flarum. Код приложения, файл конфигурации и пароль от базы данных находятся на один уровень выше public, поэтому при выборе слишком высокого уровня document root вы сделаете свои учетные данные доступными для любого пользователя. В Apache также необходимо использовать mod_rewrite и AllowOverride All, чтобы применился поставляемый в комплекте .htaccess. В nginx включите .nginx.conf в блок server. После этого перейдите по доменному имени, и установщик Flarum запросит данные для подключения к базе данных и настройки учетной записи администратора.

Версии на август 2026 года: 1.8.17 — текущий стабильный релиз, выпущенный в июне 2026 года, а 2.0 находится на стадии release candidate 5. Не начинайте создание нового сообщества на версии release candidate. Когда выйдет 2.0, расширения потребуют обновления перед загрузкой, и это обновление может занять у вас все выходные.

Системные требования невелики. Несколько воркеров php-fpm, MariaDB, которой требуется несколько сотен МБ, и статические файлы. Молодое сообщество поместится на 1 ГБ оперативной памяти.

Модерация — слабое место системы. В ядре доступны жалобы и права доступа для групп. Очереди на модерацию и блокировка спама реализуются через расширения, в основном из коллекции FriendsOfFlarum, которые устанавливаются с помощью composer require и активируются в панели администратора. Это работает сегодня. Вы полагаетесь на меньшую экосистему волонтеров, чем у phpBB или Discourse, и заброшенное расширение может заблокировать обновление ядра, так как composer откажется разрешать зависимости для новой версии.

Выгрузить данные просто: сделайте mysqldump базы данных и скопируйте каталог assets. Импорт данных сложнее. В Discourse поставляется flarum_import.rb для миграции с Flarum на Discourse, что показывает, в каком направлении обычно движется трафик. Импорт из phpBB в Flarum выполняется силами сообщества, а не официальными средствами, поэтому протестируйте процесс на копии данных, прежде чем доверять ему единственный экземпляр базы.

NodeBB: публикация в реальном времени и сопутствующие издержки

NodeBB работает на Node.js. Он отправляет новые сообщения в открытые браузеры через websockets, поэтому активная тема обновляется без перезагрузки страницы. Именно по этой причине его выбирают. В README указано требование Node.js 22 или новее, а также MongoDB 5+ или Redis 7.2+. В исходном коде также поставляется драйвер для PostgreSQL в качестве третьего варианта.

Использование Redis в качестве основной базы данных — это ловушка в данном описании. Redis хранит набор данных в оперативной памяти, поэтому требования к RAM растут вместе с форумом, а не остаются неизменными. MongoDB или PostgreSQL хранят данные на диске и кэшируют только активные элементы. Выбирайте Redis, только если можете обосновать это решение.

В Ubuntu 24.04 поставляется Node.js 18, что ниже минимально допустимой версии, поэтому сначала установите актуальную среду выполнения.

curl -fsSL https://deb.nodesource.com/setup_22.x | sudo -E bash -
sudo apt install -y nodejs git build-essential
sudo adduser --system --group --home /srv/nodebb nodebb
sudo -u nodebb git clone -b v4.x https://github.com/NodeBB/NodeBB.git /srv/nodebb
cd /srv/nodebb
sudo -u nodebb ./nodebb setup

./nodebb setup работает в интерактивном режиме. Он запрашивает выбор базы данных и параметры подключения к ней, затем создает учетную запись администратора и предлагает выбрать порт (по умолчанию 4567). NodeBB не запускается с помощью npm start. Скрипт ./nodebb является основным интерфейсом, а ./nodebb log — местом, куда направляется вывод.

./nodebb start переводит процесс в фоновый режим (daemonise), что не подходит для сервера, который перезагружается. Вместо этого запускайте загрузчик под управлением systemd в foreground-режиме.

[Unit]
Description=NodeBB
After=network.target

[Service]
Type=simple
User=nodebb
WorkingDirectory=/srv/nodebb
ExecStart=/usr/bin/env node loader.js --no-daemon
Restart=on-failure

[Install]
WantedBy=multi-user.target

--no-daemon — это та часть, которую часто упускают. Без неё загрузчик создает дочерний процесс (fork), а родительский завершается. В результате systemctl status nodebb сообщает, что юнит неактивен, хотя curl localhost:4567 продолжает отвечать, а systemctl stop nodebb при этом ничего не останавливает. При работе за reverse proxy необходимо передавать заголовки обновления websocket. Если в блоке nginx отсутствуют proxy_set_header Upgrade $http_upgrade; и proxy_set_header Connection "upgrade";, форум загрузится, консоль браузера заполнится ошибками запросов socket.io, а новые сообщения перестанут появляться до тех пор, пока пользователь не обновит страницу.

Модерация в NodeBB находится на уровне между Flarum и Discourse. В панели администратора есть очередь жалоб, права доступа для каждой категории и система репутации. Защита от спама обеспечивается плагинами сообщества, такими как nodebb-plugin-spam-be-gone, который интегрирует Akismet и StopForumSpam.

Резервное копирование выполняется вручную, и об этом никто не вспоминает до того дня, когда оно становится необходимым. В CLI ./nodebb нет команды для создания бэкапа. Вы должны самостоятельно выгрузить базу данных с помощью mongodump или pg_dump, а также скопировать каталог public/uploads и файл config.json, расположенный рядом с ним. В config.json хранятся учетные данные базы данных и URL сайта, поэтому восстановление без этого файла приведет лишь к новой установке. Официального инструмента импорта также не существует. nodebb-plugin-import — это проект сообщества, который перестал обновляться, в то время как в Discourse есть встроенный импортер из NodeBB. Таким образом, единственный надежный путь для миграции ведет в Discourse.

phpBB: небольшой, скучный, но рабочий вариант

phpBB — это старый проект, и в этом его главное преимущество. Ветка 3.3 работает на PHP от 7.2.0 до 8.3 включительно и поддерживает MySQL 4.1.3+, MariaDB 5.1+, PostgreSQL 8.3+, SQLite 3.6.15+, MS SQL Server и Oracle. Для работы требуются расширения json, mbstring, поддержка XML и включенная функция getimagesize().

Именно из-за SQLite этот движок попал в список. С SQLite форум представляет собой директорию с PHP-файлами и один файл базы данных. Не нужно настраивать сервер баз данных, ничего оптимизировать и отдельно бэкапить. На VPS с 1 ГБ оперативной памяти, где уже запущены другие сервисы, эта разница ощутима. Используйте SQLite для небольшого сообщества, а при росте активности переходите на MySQL, так как SQLite сериализует операции записи, и сообщения начинают выстраиваться в очередь.

Здесь нет этапа с composer и нет контейнеров. Установите веб-сервер с PHP, распакуйте архив и запустите установщик в браузере. Настройка полного стека описана в стандартном LAMP-стеке на Ubuntu 24.04.

sudo apt update
sudo apt install -y apache2 php libapache2-mod-php php-mysql php-mbstring php-xml php-gd unzip

Скачайте актуальный релиз 3.3 с сайта phpbb.com, распакуйте его в директорию, которую обслуживает ваш vhost, а затем предоставьте пользователю веб-сервера права на запись в пути, куда пишет установщик.

sudo chown -R www-data:www-data /srv/phpbb
sudo chmod 660 /srv/phpbb/config.php
sudo chmod -R 770 /srv/phpbb/store /srv/phpbb/cache /srv/phpbb/files /srv/phpbb/images/avatars/upload

Официальная документация рекомендует права 666 и 777. Эти значения актуальны для общего хостинга, где вы не контролируете пользователя, от имени которого работает PHP. На собственном VPS вы управляете пользователем, поэтому передайте владение www-data и ограничьте доступ для остальных. Есть одна деталь в Apache, на которой часто спотыкаются: конфигурация Ubuntu разрешает доступ только внутри стандартного корневого каталога документов, поэтому для vhost, указывающего на /srv/phpbb, также требуется соответствующий блок <Directory> с Require all granted, иначе каждый запрос будет возвращать 403 Forbidden еще до обращения к phpBB. Завершите установку в браузере по адресу /install/index.php, затем верните права config.php на 640 и удалите директорию install/. phpBB будет предупреждать о наличии этой директории, пока вы её не удалите.

Спам — известная проблема phpBB, но она решаема. Форма регистрации находится по предсказуемому URL (ucp.php?mode=register), поэтому боты находят её через несколько дней после индексации домена. Надежное решение находится в панели администратора в разделе «Меры противодействия спам-ботам»: установите метод защиты «Вопрос и ответ» и напишите вопрос, на который может ответить только участник вашего сообщества. Графические CAPTCHA (полностью автоматизированные публичные тесты Тьюринга) дешево решаются сервисами, которые берут плату за тысячу распознаваний. Вопрос по вашей тематике — нет.

phpBB также является наиболее поддерживаемым источником для миграции. Импортер phpbb3.rb в Discourse — самый популярный в этой статье, а на форумах поддержки phpBB накоплены ответы за двадцать лет. Выход из системы осуществляется через mysqldump или копированием файла SQLite. При миграции не переносятся стили и расширения.

Почему письма для регистрации на форуме не приходят?

Регистрация на всех четырех платформах требует подтверждения по электронной почте. Если письмо не доставлено, учетная запись не активируется, а в логах отображается процесс регистрации, который просто остановился. Исходящая доставляемость определяет работоспособность форума, поэтому рассматривайте её как часть процесса установки.

  • Исходящий порт 25 по умолчанию заблокирован у большинства провайдеров VPS, поэтому локальный Postfix, пытающийся отправить почту напрямую, не сможет этого сделать. В логах почты будет отображаться connect to gmail-smtp-in.l.google.com[...]:25: Connection timed out.
  • У нового IP-адреса нет репутации отправителя, поэтому даже успешная доставка может привести письмо в папку «Спам». Для ссылки подтверждения это равносильно тому, что письмо не пришло.
  • Без опубликованных в DNS записей SPF (sender policy framework) и DKIM (domainkeys identified mail) крупные провайдеры сразу отклоняют сообщения. Ошибка отклонения Google выглядит как 550 5.7.26 Unauthenticated email from example.com is not accepted due to domain's DMARC policy. DMARC (domain-based message authentication, reporting and conformance) сейчас ожидается от любого отправителя, работающего с большими объемами почты.

Практическое решение — использование релея. Укажите в настройках SMTP форума данные провайдера транзакционной почты для порта 587, опубликуйте записи SPF, DKIM и DMARC, предоставленные этим провайдером, и отправляйте письма с поддомена, например mail.example.com, чтобы репутация форума была отделена от вашей личной почты. Самостоятельное управление почтовым сервером возможно, и в статье полноценный почтовый сервер на VPS описано, как это сделать, но запуск форума — не лучшее время для изучения тонкостей доставляемости почты.

Проведите тестирование перед анонсом форума. В Discourse это можно сделать изнутри контейнера:

cd /var/discourse
./launcher enter app
rake emails:test[you@example.com]

Эта задача проверяет SMTP-соединение и отправляет сообщение; в случае неверных учетных данных она указывает на ошибку, обычно как Net::SMTPAuthenticationError. В phpBB есть аналогичный тест в панели администратора в разделе «Клиентская коммуникация». Для Flarum и NodeBB зарегистрируйте временную учетную запись на реальный почтовый ящик у крупного провайдера и изучите исходные заголовки полученного письма. Значения spf=pass и dkim=pass в заголовке Authentication-Results — это результат, который вам нужен.

Один нюанс для Discourse. Начиная с августа 2026 года мастер настройки позволяет пропустить настройку SMTP и использовать Discourse ID, который позволяет пользователям входить через внешнюю учетную запись вместо перехода по ссылке из письма. Это позволит вам запуститься без использования релея. Однако это не обеспечит отправку уведомлений или писем для сброса пароля, поэтому настройте SMTP в любом случае до того, как сообщество начнет расти.

Как разместить форум за TLS?

Flarum и phpBB работают как обычные виртуальные хосты, поэтому достаточно использовать certbot на уже настроенном веб-сервере. NodeBB и Discourse устроены иначе: это приложения, которые слушают локальные порты, поэтому для них требуется внешний прокси-сервер, который выполнит TLS termination (завершение TLS) и маршрутизацию по имени хоста. Если форум делит сервер с другими сервисами, установите один reverse proxy перед всеми ними; для этого предназначено руководство Traefik перед несколькими приложениями Docker Compose.

По умолчанию Discourse занимает порты 80 и 443, используя собственный nginx и шаблон Let's Encrypt. Чтобы разместить его за существующим прокси, отредактируйте app.yml, удалите строку templates/web.letsencrypt.ssl.template.yml, измените пробрасываемые порты так, чтобы контейнер слушал только локальный адрес, а затем выполните ./launcher rebuild app. Эти действия после установки требуют пересборки контейнера и занимают несколько минут, поэтому лучше принять решение до начала установки.

Какой форум подходит для размера вашего сообщества?

Правило выбора зависит от количества людей, а не от функциональности.

  • Менее нескольких сотен участников, один модератор, 1 GB оперативной памяти: phpBB на SQLite или Flarum, если вам нужен современный интерфейс и возможность запустить MariaDB. Каждое из этих решений представляет собой отдельное PHP-приложение, которое нужно своевременно обновлять.
  • Растущее сообщество, два и более модераторов, 4 GB оперативной памяти: Discourse. Уровни доверия и очередь на модерацию оправдывают потребление ресурсов в тот момент, когда процесс модерации перестает помещаться в голове одного человека.
  • Вам важнее живое общение, чем долговечные ветки обсуждений: NodeBB, либо признайте, что это чат, и запустите Rocket.Chat на Docker Compose. Форум, в котором через неделю нечего читать, должен был быть чат-сервером.
  • Вам на самом деле нужна документация, а не обсуждения: ни один из этих вариантов не подходит. BookStack, Wiki.js или Outline решают эту задачу лучше, а форум, заполненный повторяющимися вопросами, обычно указывает на отсутствие вики.
  • Вы все еще определяетесь с тем, что именно должно быть на сервере: общий список решений для self-hosting на 2026 год станет лучшей отправной точкой, а руководство по self-hosted альтернативам Notion охватывает пересечения между форумами и общими рабочими пространствами.

Что бы вы ни выбрали, долговечность форума определяется только последней восстановленной резервной копией. Выполняйте дамп базы данных по расписанию, копируйте директорию с загруженными файлами в рамках той же задачи и хотя бы раз восстановите результат в другом месте, чтобы убедиться в пригодности дампа. Плановое резервное копирование с помощью restic на VPS описывает этот процесс, и это та часть настройки, которая не дает второго шанса.

FAQ

Каковы минимальные требования к серверу для хостинга форума?

phpBB с SQLite работает на 1 GB оперативной памяти вместе с другими сервисами, так как не требует отдельного сервера баз данных. Flarum требует 1 GB и MariaDB. NodeBB комфортно работает на 2 GB с MongoDB. Discourse заявляет 1 GB с использованием swap и 10 GB дискового пространства как минимум, но 2 GB — это честный порог, а 4 GB подходят для активного форума. Это связано с тем, что ./launcher rebuild app пересобирает ресурсы в оперативной памяти при каждом обновлении, и именно в этот момент ядро может завершить процесс из-за нехватки памяти (OOM killer).

Можно ли перенести форум phpBB на Discourse?

Да, это наиболее поддерживаемый путь миграции. В состав Discourse входит script/import_scripts/phpbb3.rb, который нужно запускать внутри контейнера, используя копию базы данных phpBB, а не рабочую базу. Переносятся пользователи, категории, темы, сообщения и вложения. Стили и расширения не переносятся, а старые URL тем изменятся, поэтому запланируйте редиректы со старых путей phpBB до смены DNS. Крупные форумы импортируются часами, поэтому сначала проведите пробную миграцию на тестовом сервере, чтобы оценить время.

Почему новые пользователи не получают письма для активации?

Большинство провайдеров VPS блокируют исходящий 25 порт, поэтому локальный почтовый сервер не может доставить почту, а в логах отображается Connection timed out при попытке соединения с почтовым сервером получателя. Даже если доставка работает, новый IP-адрес без записей SPF или DKIM будет заблокирован или отфильтрован, и Google ответит ошибкой 550 5.7.26 Unauthenticated email ... is not accepted due to domain's DMARC policy. Отправляйте почту через релей (relay) по 587 порту, опубликуйте записи SPF, DKIM и DMARC, которые предоставит релей, а затем подтвердите настройку тестовой регистрацией и проверьте заголовок Authentication-Results в полученном письме.

Какое ПО для форума требует меньше всего усилий по модерации?

Discourse, так как инструменты модерации встроены в ядро, а не добавлены сторонними модулями. Для новых аккаунтов действуют лимиты по количеству действий, пока они не прочитают достаточно контента; жалобы собираются в очередь, где фиксируется, кто именно их обработал; плагин Akismet является официальным. phpBB приближается к этому уровню, если включить метод защиты от спама «Вопрос-ответ», который сам по себе останавливает большинство регистраций ботов. Flarum и NodeBB полагаются на расширения сообщества для выполнения тех же задач. Ничто из этого не меняет главного фактора: нагрузка на модерацию растет пропорционально количеству пользователей, а не зависит от выбранного ПО.