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

Установка и развёртывание NodeBB на Fedora 29 с Nginx и MongoDB

• 8 min read • Инструкции • Обновлено 25 Nov 2025
NodeBB на Fedora 29: установка, Nginx, MongoDB, HTTPS
NodeBB на Fedora 29: установка, Nginx, MongoDB, HTTPS

Иллюстрация интерфейса NodeBB или логотип проекта

NodeBB — это современное форумное ПО на базе Node.js. Оно поддерживает MongoDB или Redis как хранилище данных и использует WebSocket для мгновенных взаимодействий и уведомлений в реальном времени. NodeBB имеет интеграции с социальными сетями, потоковые обсуждения и расширяется через сторонние плагины. Проект с открытым исходным кодом доступен на GitHub. В этом руководстве показан процесс установки NodeBB на Fedora 29 с Nginx как обратным прокси, MongoDB как базой данных и acme.sh + Let’s Encrypt для HTTPS.

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

Программное обеспечение, необходимое для установки NodeBB:

  • Node.js версия 6 или выше (рекомендуется LTS, в материале использовалась версия 8/10)
  • MongoDB 2.6 или новее или Redis 2.8.9 или новее
  • Nginx 1.3.13 или новее
  • Git

Важно: установка зависимостей NodeBB может потребовать более 512 МБ оперативной памяти. Рекомендуется включить раздел подкачки (swap), если у вашей системы мало памяти.

Необходимые предварительные шаги

  • Рабочая система Fedora 29 с минимум 1 ГБ ОЗУ
  • Домен с корректно настроенными A / AAAA записями
  • Непривилегированный пользователь с правами sudo

Проверка версии Fedora и начальная конфигурация

Проверьте версию системы:

cat /etc/fedora-release
# Fedora release 29 (Twenty Nine)

Установите часовой пояс:

timedatectl list-timezones
sudo timedatectl set-timezone 'Region/City'

Обновите пакеты системы:

sudo dnf check-upgrade || sudo dnf upgrade -y

Установите базовый набор утилит:

sudo dnf install -y curl wget vim bash-completion git socat

Для простоты в этом руководстве мы отключим SELinux и Firewall. На продуктивных серверах рассмотрите вместо этого настройку правил и профилей безопасности.

sudo setenforce 0; sudo systemctl stop firewalld.service; sudo systemctl disable firewalld.service

Important: отключение межсетевого экрана и SELinux снижает уровень безопасности. Делайте это только на тестовых или контролируемых средах.

Шаг 1. Установка Node.js и npm

NodeBB работает на Node.js. Варианты установки: бинарные сборки, из исходников или через менеджер пакетов. Мы используем пакетный менеджер Fedora:

sudo dnf -y install nodejs

Для сборки нативных модулей потребуется набор инструментов разработки:

sudo dnf install -y gcc-c++ make
# или
# sudo dnf groupinstall -y 'Development Tools'

npm поставляется вместе с Node.js. Обновите npm до последней стабильной версии:

sudo npm install -g npm@latest

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

node -v && npm -v
# v10.15.0
# 6.4.1

Шаг 2. Установка и настройка MongoDB

NodeBB использует MongoDB или Redis. В этом руководстве настроим MongoDB.

Установите пакеты MongoDB:

sudo dnf install -y mongodb mongodb-server

Проверка версий MongoDB:

mongo --version | head -n 1 && mongod --version | head -n 1
# MongoDB shell version v4.0.1
# db version v4.0.1

Запустите и включите сервис MongoDB:

sudo systemctl start mongod.service
sudo systemctl enable mongod.service

Проверьте статус:

sudo systemctl status mongod.service
# active (running)

Создайте базу данных и пользователей:

mongo
> use admin
> db.createUser( { user: "admin", pwd: "", roles: [ { role: "readWriteAnyDatabase", db: "admin" }, { role: "userAdminAnyDatabase", db: "admin" } ] } )
> use nodebb
> db.createUser( { user: "nodebb", pwd: "", roles: [ { role: "readWrite", db: "nodebb" }, { role: "clusterMonitor", db: "admin" } ] } )
> quit()

Не забудьте заменить плейсхолдеры паролей на надёжные значения. Перезапустите MongoDB и проверьте подключение от административного пользователя:

sudo systemctl restart mongod.service
mongo -u admin -p your_password --authenticationDatabase=admin

Если подключение успешно — MongoDB готова для NodeBB.

Шаг 3. Установка acme.sh и получение сертификата Let’s Encrypt

HTTPS не обязателен, но настоятельно рекомендуется. В этом примере используем acme.sh для автоматизации получения сертификатов от Let’s Encrypt. acme.sh — это скрипт на shell без внешних зависимостей.

Установите acme.sh:

sudo su - root
git clone https://github.com/Neilpang/acme.sh.git
cd acme.sh
./acme.sh --install --accountemail [email protected]
source ~/.bashrc
cd ~

Проверка версии:

acme.sh --version
# v2.8.0

Получение RSA и ECDSA сертификатов (пример для example.com):

# RSA 2048
acme.sh --issue --standalone -d example.com --keylength 2048
# ECDSA
acme.sh --issue --standalone -d example.com --keylength ec-256

Для тестирования используйте флаг –staging.

Каталоги с сертификатами по умолчанию:

  • RSA: /home/username/example.com
  • ECDSA: /home/username/example.com_ecc

Скопируйте сертификаты в /etc/letsencrypt (в примере):

mkdir -p /etc/letsencrypt/example.com
sudo mkdir -p /etc/letsencrypt/example.com_ecc

Установка сертификатов в конечные пути и перезагрузка Nginx:

# RSA
acme.sh --install-cert -d example.com --cert-file /etc/letsencrypt/example.com/cert.pem --key-file /etc/letsencrypt/example.com/private.key --fullchain-file /etc/letsencrypt/example.com/fullchain.pem --reloadcmd "sudo systemctl reload nginx.service"
# ECC/ECDSA
acme.sh --install-cert -d example.com --ecc --cert-file /etc/letsencrypt/example.com_ecc/cert.pem --key-file /etc/letsencrypt/example.com_ecc/private.key --fullchain-file /etc/letsencrypt/example.com_ecc/fullchain.pem --reloadcmd "sudo systemctl reload nginx.service"

acme.sh автоматически обновляет сертификаты по расписанию.

После работы с root выйдите обратно к обычному sudo-пользователю:

exit

Notes: храните приватные ключи с доступом только для root. Если вы используете другой путь — корректируйте конфигурацию Nginx.

Шаг 4. Установка и настройка Nginx

Установите Nginx:

sudo dnf install -y nginx

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

nginx -v
# 1.14.1

Запустите и включите сервис Nginx:

sudo systemctl start nginx.service
sudo systemctl enable nginx.service

NodeBB по умолчанию слушает порт 4567. Чтобы не указывать порт в URL, настроим Nginx как обратный прокси, перенаправляющий запросы с 80/443 на 127.0.0.1:4567.

Создайте конфигурацию /etc/nginx/conf.d/nodebb.conf с содержимым:

server {
  listen [::]:443 ssl http2;
  listen 443 ssl http2;
  listen [::]:80;
  listen 80;

  server_name forum.example.com;

  client_max_body_size 50M;

  # RSA
  ssl_certificate /etc/letsencrypt/example.com/fullchain.pem;
  ssl_certificate_key /etc/letsencrypt/example.com/private.key;
  # ECDSA
  ssl_certificate /etc/letsencrypt/example.com_ecc/fullchain.pem;
  ssl_certificate_key /etc/letsencrypt/example.com_ecc/private.key;

  location / {
    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;
    proxy_set_header Host $http_host;
    proxy_set_header X-NginX-Proxy true;
    proxy_pass http://127.0.0.1:4567;
    proxy_redirect off;
    # Socket.IO Support
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
  }

}

Проверьте конфигурацию и перезагрузите Nginx:

sudo nginx -t
sudo systemctl reload nginx.service

Шаг 5. Установка и запуск NodeBB

Создайте корневую папку для NodeBB и назначьте владельца:

sudo mkdir -p /var/www/nodebb
cd /var/www/nodebb
sudo chown -R [your_user]:[your_user] /var/www/nodebb

Клонируйте репозиторий NodeBB (пример ветки v1.11.x):

git clone -b v1.11.x https://github.com/NodeBB/NodeBB.git .

Запустите сценарий настройки и ответьте на вопросы:

./nodebb setup

После завершения настройки запустите NodeBB вручную:

./nodebb start

Откройте форум в браузере, если всё настроено правильно:

Форум NodeBB открыт в веб-браузере

Шаг 6. Запуск NodeBB как системного сервиса

Чтобы NodeBB автоматически запускался после перезагрузки, создадим systemd юнит.

Остановите работающий NodeBB при необходимости:

./nodebb stop

Создайте пользователя nodebb и назначьте владельца директории:

sudo useradd nodebb
sudo chown -R nodebb:nodebb /var/www/nodebb

Создайте файл /etc/systemd/system/nodebb.service с содержимым:

[Unit]
Description=NodeBB
Documentation=https://docs.nodebb.org
After=system.slice multi-user.target mongod.service

[Service]
Type=forking
User=nodebb

StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=nodebb

Environment=NODE_ENV=production
WorkingDirectory=/var/www/nodebb
PIDFile=/var/www/nodebb/pidfile
ExecStart=/usr/bin/env node loader.js
Restart=always

[Install]
WantedBy=multi-user.target

Включите и запустите сервис:

sudo systemctl enable nodebb.service
sudo systemctl start nodebb.service

Проверьте статус и включение:

sudo systemctl status nodebb.service
sudo systemctl is-enabled nodebb.service

Поздравляем — NodeBB установлен и развёрнут.

Поддержка Redis как альтернативы MongoDB

NodeBB поддерживает Redis как хранилище. Redis может быть предпочтителен при простых сценариях с быстрым доступом в памяти, но Redis хранит данные в памяти и требует настроек персистентности для защиты от потери данных.

Короткое сравнение:

  • MongoDB: документная БД, горизонтальное масштабирование, более естественная работа с бэкапами и большой объем данных.
  • Redis: быстрый ключ‑значение in-memory, низкая задержка, требует внимания к персистентности и памяти.

Выбор зависит от нагрузки, требований к сохранности данных и возможностей администрирования.

Безопасность и твики производительности

Важные рекомендации:

  • НИКОГДА не храните приватные ключи сертификатов с доступом для общего пользователя.
  • Включите брандмауэр и откройте только необходимые порты (80, 443, и, если нужно, SSH).
  • Для публичных инстансов не отключайте SELinux без взвешенной оценки. Вместо отключения настройте политики или создайте профиль для Nginx/NodeBB.
  • Ограничьте доступ к административному интерфейсу NodeBB через дополнительную аутентификацию или IP‑фильтры.
  • Регулярно обновляйте Node.js, npm, NodeBB и плагины.

Твики производительности:

  • Используйте системный процесс менеджер (systemd) для рестартов и контроля.
  • Включите мониторинг памяти и CPU; при высоком трафике масштабируйте горизонтально (несколько бэкендов за балансировщиком).
  • Для прямого SSL‑завершения используйте Nginx; NodeBB продолжает слушать на localhost.

Резервное копирование и восстановление

Резервируйте:

  • Дамп MongoDB (команда mongodump)
  • Конфигурации Nginx и systemd юниты
  • Директорию /var/www/nodebb (темы, плагины, файлы)

Пример простого бэкапа MongoDB:

mongodump --db nodebb --out /var/backups/mongodumps/$(date +%F)

Восстановление выполняется через mongorestore.

Мониторинг, логи и диагностика

  • Логи NodeBB по умолчанию выводятся в syslog (в соответствии с systemd unit выше). Используйте journalctl для просмотра:
journalctl -u nodebb.service -f
  • Логи Nginx находятся в /var/log/nginx.
  • Следите за статусом MongoDB и размером файлов журнала.

Инструменты для разработки и тестирования

Перед обновлением NodeBB или плагинов выполните тестирование на стенде. Примеры проверок:

  • Запуск базовых сценариев регистрации, входа, создания темы и поста
  • Проверка Socket.IO сообщений (реaltime)
  • Проверка SSL и цепочки сертификатов
  • Тесты на нагрузку (только на тестовой среде)

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

Перед переводом в прод убедитесь, что:

  • NodeBB отвечает на порт 443 и страница форума загружается
  • Авторизация администраторского аккаунта работает
  • Сообщения создаются и отображаются, WebSocket соединения устанавливаются
  • Резервная копия MongoDB успешно создаётся и восстанавливается
  • Сертификаты корректно установлены и автообновляются

План обновления и отката (SOP)

Шаги для безопасного обновления NodeBB:

  1. Создайте полный бэкап базы данных и директорий.
  2. Отключите трафик (держите Nginx в maintenance или выставьте read-only), чтобы избежать изменений во время обновления.
  3. Обновите репозиторий NodeBB и установите зависимости: ./nodebb upgrade
  4. Запустите тестовый прогон ./nodebb start и проверьте логи.
  5. Если всё ок — переключите трафик обратно.
  6. В случае ошибки — остановите NodeBB, восстановите бэкап MongoDB и директорию /var/www/nodebb.

Инцидентный план и откат

Если после обновления появились ошибки:

  1. Переключите сайт в режим обслуживания (Nginx 503).
  2. Просмотрите журналы nodebb и mongod.
  3. Откатитесь к предыдущей версии кода (git checkout ).
  4. Восстановите данные из последней валидной резервной копии.
  5. При необходимости создайте issue в репозитории NodeBB и прикрепите логи.

Рекомендации для GDPR и приватности

  • Обработку персональных данных оговорите в политике конфиденциальности.
  • При необходимости реализуйте возможность удаления аккаунта и личных данных по требованию.
  • Ограничьте логирование персональных данных в журналах.

Тесты и критерии приёмки для CI

Набор базовых тестов:

  • HTTP 200 при GET /
  • POST /api/v1/topics возвращает успешный ответ и создает запись
  • WebSocket соединение устанавливается и передаёт события
  • Проверка HTTPS цепочки сертификатов

Автоматизация: интегрируйте эти тесты в CI перед деплоем на прод.

Ролевые чеклисты

Администратор:

  • Создать admin аккаунт
  • Настроить email и SMTP
  • Проверить плагины и права модерации

DevOps:

  • Настроить systemd unit и Rotate логов
  • Настроить бэкапы и мониторинг
  • Настроить автообновление сертификатов (acme.sh)

Модератор:

  • Проверить инструменты модерации
  • Настроить правила контента

Пользователь:

  • Проверить регистрацию, восстановление пароля, уведомления

Частые проблемы и решения

Проблема: NodeBB не запускается, loader.js падает с ошибкой модуля Решение: убедитесь, что установлены build-tools и зависимости npm, удалите node_modules и выполните npm install.

Проблема: Socket.IO не подключается через Nginx Решение: проверьте заголовки Upgrade/Connection в конфигурации Nginx и proxy_http_version 1.1.

Проблема: сертификат не обновляется Решение: проверьте cron/timer acme.sh и права доступа к путям /etc/letsencrypt; убедитесь, что reloadcmd корректно указывает systemctl reload nginx.service.

Советы по миграции и совместимости

  • Если мигрируете с Redis на MongoDB — подготовьте план конвертации данных и тестовое восстановление.
  • Проверяйте совместимость плагинов NodeBB с вашей версией NodeBB перед обновлением.

Краткая методология принятия решений

Оценивайте выбор между MongoDB и Redis по трём простым критериям:

  1. Требование к сохранности данных (если важно — выбирайте MongoDB).
  2. Задержка и скорость (если нужна сверхнизкая задержка и объём памяти достаточен — Redis).
  3. Администрирование и бэкап (MongoDB проще бэкапить и восстанавливать).

Сводка и дальнейшие шаги

Вы установили NodeBB на Fedora 29, настроили MongoDB, настроили Nginx как обратный прокси и получили сертификаты Let’s Encrypt с помощью acme.sh. Дальше:

  • Настройте резервное копирование и мониторинг
  • Проведите тестовую нагрузку и мониторинг производительности
  • Настройте процессы обновления и план отката

Ссылки

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