NodeBB на Ubuntu 24.04: пошаговая установка
Если вам нужен форум с реалтаймом «из коробки» — сообщения появляются без перезагрузки страницы, счётчик онлайн обновляется на лету, а интерфейс изначально заточен под телефон, — NodeBB закрывает эту задачу лучше, чем классические PHP-форумы. Ниже пошагово: с чистой Ubuntu 24.04 до работающего форума за обратным прокси с SSL и автозапуском при перезагрузке сервера.
Содержание
Обсудить статью, задать вопрос или начать новую тему
Есть вопрос по этой статье, идея для обсуждения или просто хотите поделиться опытом? Сообщество MAATRIX ждёт. Для общения, пожалуйста, зарегистрируйтесь в нашем личном кабинете.
Перейти в сообщество →Что такое NodeBB и когда он уместен
NodeBB — движок форумов на Node.js, построенный вокруг Socket.IO: обновления страницы приходят через постоянное WebSocket-соединение, а не через опрос сервера или полную перезагрузку. Отсюда и его сильная сторона — ощущение живого чата поверх структуры классического форума: темы, разделы, категории, репутация, но с мгновенной доставкой новых сообщений всем, кто сейчас смотрит тему.
Второй акцент — мобильный опыт. Тема оформления по умолчанию (Harmony/Persona в зависимости от версии) адаптивна изначально, а сам NodeBB поддерживает PWA-манифест и service worker, так что форум можно «добавить на экран» как приложение без отдельной разработки под iOS/Android.
Плата за это — движок тяжелее, чем условный phpBB: под капотом Node.js-процесс, который держит в памяти шаблоны и соединения, плюс отдельная СУБД. Для небольшого и среднего сообщества (до нескольких тысяч активных пользователей) хватает 2 vCPU и 2-4 ГБ RAM, но 1 ГБ памяти — это уже впритык, особенно на этапе сборки клиентских бандлов.
Требования и подготовка сервера
Понадобится:
- VPS с Ubuntu 24.04 LTS, минимум 2 ГБ RAM (лучше 4 ГБ — сборка
nodebb buildзаметно ест память); - root или пользователь с sudo;
- домен, указывающий на IP сервера (для SSL-сертификата и корректной работы WebSocket за прокси).
Обновляем систему и ставим базовые пакеты:
sudo apt update && sudo apt upgrade -y
sudo apt install -y git curl build-essential python3
build-essential и python3 нужны, потому что часть npm-зависимостей NodeBB собирается из исходников (node-gyp).
Заводим отдельного системного пользователя — запускать Node.js-приложение от root не стоит:
sudo adduser --disabled-password --gecos "" nodebb
sudo usermod -aG sudo nodebb
Firewall настраивается отдельно — если ещё не открыли базовые порты, это разобрано в статье про настройку UFW на Ubuntu 24.04. Достаточно открыть SSH и порты 80/443, сам порт NodeBB (4567) наружу открывать не нужно — он останется за Nginx.
Нужен сервер под эту задачу?
Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK, США, Франция и РФ. Оплата картой РФ и по СБП.
Арендовать серверNode.js и Redis
NodeBB требует достаточно свежий Node.js — актуальные ветки NodeBB ориентируются на LTS-версии Node 18+ (на практике лучше брать текущий LTS, на конец августа 2026 это, как правило, Node 22.x; точную минимальную версию всегда проверяйте в файле package.json скачанного релиза NodeBB, поле engines). Ставим через официальный репозиторий NodeSource:
curl -fsSL https://deb.nodesource.com/setup_22.x | sudo -E bash -
sudo apt install -y nodejs
node -v
npm -v
В качестве базы данных NodeBB поддерживает MongoDB, Redis и PostgreSQL. Для форума с упором на реалтайм логично взять Redis — он же используется NodeBB и как pub/sub-шина для Socket.IO, если позже понадобится несколько инстансов за балансировщиком. Ставим Redis из репозитория Ubuntu:
sudo apt install -y redis-server
sudo systemctl enable --now redis-server
По умолчанию Redis слушает только localhost — этого достаточно, если NodeBB и Redis живут на одном сервере. Для продакшена стоит сразу задать пароль:
sudo sed -i 's/^# requirepass foobared/requirepass ВАШ_ПАРОЛЬ/' /etc/redis/redis.conf
sudo systemctl restart redis-server
redis-cli -a ВАШ_ПАРОЛЬ ping
Ответ PONG подтверждает, что Redis работает. Если позже понадобится тюнинг persistence, кластер или разбор типовых ошибок Redis — это отдельная тема, разобранная в статье про установку и настройку Redis на VPS.
Установка NodeBB
Дальше работаем от пользователя nodebb, в его домашней директории:
sudo su - nodebb
git clone -b v3.x https://github.com/NodeBB/NodeBB.git nodebb
cd nodebb
Ветка v3.x подтягивает последний релиз третьей мажорной линии — на момент установки стоит свериться с страницей релизов NodeBB на GitHub, возможна уже более новая мажорная ветка.
Устанавливаем зависимости и запускаем мастер настройки:
./nodebb setup
Мастер задаст вопросы по шагам — можно отвечать интерактивно или передать всё параметрами сразу:
./nodebb setup --url="https://forum.example.com" \
--admin:username="admin" \
--admin:password="СложныйПароль123!" \
--admin:email="admin@example.com" \
--db="redis" \
--redis:host="127.0.0.1" \
--redis:port="6379" \
--redis:password="ВАШ_ПАРОЛЬ" \
--redis:database="0" \
--port="4567"
Setup скачает npm-зависимости, соберёт клиентские ассеты и создаст файл config.json в корне проекта. Именно на этом шаге на слабых серверах (1 ГБ RAM без swap) сборка может упасть по памяти — если так случилось, временно добавьте swap-файл:
sudo fallocate -l 2G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
После успешного setup можно запустить форум в тестовом режиме, чтобы убедиться, что всё поднялось:
./nodebb start
./nodebb log
nodebb log покажет вывод процесса — если строка NodeBB Ready появилась и ошибок нет, форум слушает 127.0.0.1:4567. Проверить можно прямо с сервера:
curl -I http://127.0.0.1:4567
Первого зарегистрированного пользователя NodeBB автоматически делает администратором (если не был явно указан --admin:username на этапе setup) — учитывайте это при первом заходе через веб-интерфейс.
Nginx как обратный прокси с поддержкой WebSocket
Здесь важный нюанс именно для NodeBB: Socket.IO держит постоянное соединение, и если прокси не настроить на проксирование Upgrade-заголовков, реалтайм просто не будет работать — форум откатится на обычные HTTP-запросы или будет постоянно переподключаться.
Ставим Nginx, если его ещё нет:
sudo apt install -y nginx
Конфиг сайта (/etc/nginx/sites-available/forum.example.com):
server {
listen 80;
server_name forum.example.com;
location / {
proxy_pass http://127.0.0.1:4567;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
# Socket.IO живёт долго — таймауты по умолчанию (60с) обрывают неактивные соединения
proxy_read_timeout 300s;
proxy_send_timeout 300s;
}
}
Активируем и проверяем:
sudo ln -s /etc/nginx/sites-available/forum.example.com /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx
Если базовые принципы настройки Nginx как прокси нужны подробнее — есть отдельный разбор Nginx в роли обратного прокси на VPS, там же — типичные ошибки конфигурации.
Дальше выпускаем SSL-сертификат — Let's Encrypt через Certbot закрывает вопрос бесплатно:
sudo apt install -y certbot python3-certbot-nginx
sudo certbot --nginx -d forum.example.com
Certbot сам допишет listen 443 ssl, подключит сертификат и настроит редирект с 80 на 443. После выпуска сертификата зайдите в админку NodeBB (Admin → Settings → General) и убедитесь, что «URL» в настройках указывает на https:// — иначе часть ссылок и Socket.IO-подключение может пытаться идти по http и упираться в mixed content. Если позже сертификат перестанет продлеваться автоматически, разбор частых причин есть в статье Let's Encrypt SSL: настройка и продление.
Автозапуск через systemd
./nodebb start держит процесс, пока жива сессия, но не переживёт перезагрузку сервера сам по себе. NodeBB из коробки предлагает интеграцию с systemd:
exit # обратно к sudo-пользователю
sudo su - nodebb -c "cd nodebb && ./nodebb stop"
Создаём unit-файл /etc/systemd/system/nodebb.service:
[Unit]
Description=NodeBB forum
After=network.target redis-server.service
[Service]
Type=simple
User=nodebb
WorkingDirectory=/home/nodebb/nodebb
ExecStart=/usr/bin/node loader.js --no-daemon
Restart=always
RestartSec=5
Environment=NODE_ENV=production
[Install]
WantedBy=multi-user.target
loader.js — встроенный в NodeBB процесс-менеджер, который умеет перезапускать worker при падении и подхватывать ./nodebb restart без даунтайма. Включаем автозапуск:
sudo systemctl daemon-reload
sudo systemctl enable --now nodebb
sudo systemctl status nodebb
Логи после перехода на systemd смотрятся через журнал системы:
sudo journalctl -u nodebb -f
Обновление форума до новой версии из этой точки делается так: останавливаем сервис, обновляем код, пересобираем и запускаем заново:
sudo systemctl stop nodebb
sudo su - nodebb -c "cd nodebb && git pull && ./nodebb upgrade"
sudo systemctl start nodebb
./nodebb upgrade сам подтянет npm-зависимости, прогонит миграции схемы данных и пересоберёт клиентские ассеты — вручную это делать не нужно.
Нужен сервер под эту задачу?
Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK, США, Франция и РФ. Оплата картой РФ и по СБП.
Арендовать серверНужны сами нейросети для контента?
Генерируйте изображения, видео и озвучку нейросетями на falapi.io — десятки моделей в одном окне. Оплата картой РФ и по СБП.
Частые вопросы
Какую версию Node.js использовать?
Ориентируйтесь на актуальный LTS Node.js и на поле engines в package.json скачанной версии NodeBB — требования по минимальной версии со временем растут вместе с мажорными релизами NodeBB.
MongoDB или Redis для NodeBB — что лучше?
Оба варианта официально поддерживаются. Redis проще в администрировании на одном сервере и пригодится как pub/sub для Socket.IO при масштабировании на несколько инстансов; MongoDB исторически более распространён в сообществе NodeBB и удобнее для очень больших форумов с миллионами постов за счёт шардинга. Для старта на одном VPS разница некритична — выбирайте то, с чем вам комфортнее администрировать.
Хватит ли VPS с 1 vCPU и 2 ГБ RAM?
Для тестового или совсем небольшого форума — да, но сборка ассетов (nodebb build, nodebb upgrade) на 1 ГБ без swap может падать по памяти. Для продакшена комфортнее 2 vCPU / 4 ГБ.
Почему не приходят реалтайм-обновления после переезда за Nginx?
Почти всегда причина — не проброшены заголовки Upgrade/Connection: upgrade в конфиге прокси, либо proxy_http_version не выставлен в 1.1. Без них Socket.IO не может установить WebSocket-соединение и откатывается на long-polling или обрывается.
Можно ли поставить NodeBB через Docker вместо ручной установки?
Да, у проекта есть официальный образ, но при таком варианте меняется и подход к персистентности данных, и к обновлениям — это отдельный сценарий, не совпадающий с systemd-подходом из этой статьи.
Как включить PWA и уведомления на телефоне?
Манифест и service worker подключены по умолчанию — на мобильном браузере появится предложение «добавить на главный экран». Push-уведомления в браузере требуют дополнительной настройки VAPID-ключей в разделе Admin → Settings → Notifications, это уже конфигурация поверх базовой установки.
Обсудить статью, задать вопрос или начать новую тему
Есть вопрос по этой статье, идея для обсуждения или просто хотите поделиться опытом? Сообщество MAATRIX ждёт. Для общения, пожалуйста, зарегистрируйтесь в нашем личном кабинете.
Перейти в сообщество →