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

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.serviceImportant: отключение межсетевого экрана и 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-пользователю:
exitNotes: храните приватные ключи с доступом только для 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.serviceNodeBB по умолчанию слушает порт 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Откройте форум в браузере, если всё настроено правильно:

Шаг 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:
- Создайте полный бэкап базы данных и директорий.
- Отключите трафик (держите Nginx в maintenance или выставьте read-only), чтобы избежать изменений во время обновления.
- Обновите репозиторий NodeBB и установите зависимости: ./nodebb upgrade
- Запустите тестовый прогон ./nodebb start и проверьте логи.
- Если всё ок — переключите трафик обратно.
- В случае ошибки — остановите NodeBB, восстановите бэкап MongoDB и директорию /var/www/nodebb.
Инцидентный план и откат
Если после обновления появились ошибки:
- Переключите сайт в режим обслуживания (Nginx 503).
- Просмотрите журналы nodebb и mongod.
- Откатитесь к предыдущей версии кода (git checkout
). - Восстановите данные из последней валидной резервной копии.
- При необходимости создайте 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 по трём простым критериям:
- Требование к сохранности данных (если важно — выбирайте MongoDB).
- Задержка и скорость (если нужна сверхнизкая задержка и объём памяти достаточен — Redis).
- Администрирование и бэкап (MongoDB проще бэкапить и восстанавливать).
Сводка и дальнейшие шаги
Вы установили NodeBB на Fedora 29, настроили MongoDB, настроили Nginx как обратный прокси и получили сертификаты Let’s Encrypt с помощью acme.sh. Дальше:
- Настройте резервное копирование и мониторинг
- Проведите тестовую нагрузку и мониторинг производительности
- Настройте процессы обновления и план отката
Ссылки
Похожие материалы
Несколько аккаунтов Skype: Multi Skype Launcher
Журнал для работы: повысить продуктивность
Персональные звуки уведомлений на Android
Скачивание шоу Hulu для офлайн‑просмотра
Microsoft Start: персонализированная новостная лента