Установка NodeBB на FreeBSD 12 с Nginx и MongoDB
Важно: убедитесь, что у вас есть резервные копии и выделено не менее 1 ГБ оперативной памяти; при установке зависимостей может потребоваться swap.

NodeBB — это современное форумное ПО на Node.js, работающее с MongoDB или Redis, использующее WebSocket для мгновенных обновлений и поддерживающее плагины для расширения функционала. В этом руководстве приводится последовательность шагов для развёртывания NodeBB на FreeBSD 12 с Nginx, MongoDB и сертификатами от Let\’s Encrypt через acme.sh.
Что вы получите после выполнения руководства
- Полнофункциональный форум NodeBB, доступный по HTTPS на вашем домене.
- Автоматическое обновление сертификатов и запуск процесса NodeBB как службы с автозапуском.
- Базовый набор практик по безопасности и проверок после установки.
Требования
- FreeBSD 12 с минимум 1 ГБ RAM (рекомендуется 2 ГБ для спокойной работы и сборки пакетов).
- Домен с корректными A/AAAA записями, доступный извне.
- Непривилегированный пользователь с sudo.
- Пакеты: Node.js (рекомендуется ветка 10+ для совместимости с NodeBB на момент написания), npm, MongoDB 3.6+/4.x или Redis (если вы предпочитаете Redis вместо MongoDB), Nginx, Git.
Важно: сборка/установка некоторых npm-пакетов может потребовать больше памяти. Если система ограничена, добавьте swap-файл или swap-раздел.
Быстрая структура руководства
- Подготовка системы и установка базовых пакетов
- Установка Node.js и npm
- Развёртывание MongoDB и создание пользователя/БД
- Получение TLS-сертификата через acme.sh (Let\’s Encrypt)
- Настройка Nginx как обратного прокси для NodeBB
- Клонирование NodeBB, настройка и запуск
- Настройка PM2 для долгоживущего процесса
- Контрольный список, отладка, безопасность и рекомендации по поддержке
Подготовка системы
Проверим версию FreeBSD:
uname -ro
# FreeBSD 12.0-RELEASEУстановите часовой пояс:
tzsetupОбновите базовые пакеты и установите полезные утилиты:
freebsd-update fetch install
pkg update && pkg upgrade -y
pkg install -y sudo vim unzip wget git bash socat gcc8 pkgconf vipsСоздайте непользователья (если ещё не создан) и дайте ему sudo-привилегии.
Шаг 1 — установка Node.js и npm
NodeBB построен на Node.js. На момент написания репозитория рекомендуемой была версия 10. Установим пакет из портов/репозитория FreeBSD:
sudo pkg install -y node10 npm-node10Проверим версии:
node -v && npm -vОбновим npm до последней стабильной версии (npm сам умеет обновляться):
sudo npm install -g npm@latest
npm -vПримечание: в зависимости от репозитория имя пакета node может отличаться (node12, node14 и т.д.). Выберите совместимую версию с выбранной веткой NodeBB.
Шаг 2 — установка и настройка MongoDB
NodeBB требует хранилище: MongoDB или Redis. Здесь используем MongoDB.
Установим MongoDB 4.0 (или подходящую доступную версию):
sudo pkg install -y mongodb40Проверяем версии:
mongo --version | head -n 1 && mongod --version | head -n 1Включаем автозапуск и стартуем сервис:
sudo sysrc mongod_enable=yes
sudo service mongod start
sudo service mongod status
# active (running)Создаём базу и пользователя для NodeBB. Подключаемся к mongo shell:
mongoПереключаемся на базу admin:
> use adminСоздаём административного пользователя (замените пароль на собственный):
> db.createUser({ user: "admin", pwd: "", roles: [{ role: "readWriteAnyDatabase", db: "admin" }, { role: "userAdminAnyDatabase", db: "admin" }] }) Создаём базу nodebb и пользователя nodebb с минимальными привилегиями:
> use nodebb
> db.createUser({ user: "nodebb", pwd: "", roles: [{ role: "readWrite", db: "nodebb" }, { role: "clusterMonitor", db: "admin" }] }) Выходим из оболочки:
> quit()Перезапускаем MongoDB и проверяем подключение под админом:
sudo service mongod restart
mongo -u admin -p your_password --authenticationDatabase=adminВажно: используйте сложные пароли и по возможности ограничьте доступ к серверу по IP на уровне фаервола.
Шаг 3 — установка acme.sh и получение сертификата Let\’s Encrypt
SSL/TLS рекомендуется для публичного форума. 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.x.xПолучение RSA и ECDSA сертификатов (standalone режим требует, чтобы порт 80/443 был свободен во время валидации):
# RSA 2048
acme.sh --issue --standalone -d example.com --keylength 2048
# ECDSA
acme.sh --issue --standalone -d example.com --keylength ec-256Для тестирования можно добавить флаг --staging.
Каталоги с сертификатами будут в домашнем каталоге пользователя acme.sh, например /home/username/example.com и /home/username/example.com_ecc.
Создадим каталог для сертифкатов в системе (корректный путь) и скопируем туда:
sudo 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 service nginx reload"
# 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 service nginx reload"acme.sh автоматически обновляет сертификаты, обычно за несколько дней до истечения.
После завершения выйдите из root:
exitШаг 4 — установка и настройка Nginx как обратного прокси
Установим Nginx:
sudo pkg install -y nginx
nginx -v
sudo sysrc nginx_enable=yes
sudo service nginx start
sudo service nginx statusNodeBB по умолчанию слушает порт 4567. Настроим Nginx как обратный прокси и включим HTTPS.
Создайте файл /usr/local/etc/nginx/nodebb.conf с содержимым (замените example.com на ваш домен):
server {
listen [::]:443 ssl;
listen 443 ssl;
listen [::]:80;
listen 80;
server_name 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";
}
}Включите конфигурацию NodeBB в основной nginx.conf, добавив в блок http {} строку:
include nodebb.conf;Проверим синтаксис и перезагрузим Nginx:
sudo nginx -t
sudo service nginx reloadПодсказка: можно настроить отдельный server для редиректа HTTP->HTTPS, если нужно.
Шаг 5 — установка и настройка NodeBB
Создайте директорию для NodeBB и назначьте владельца:
sudo mkdir -p /usr/local/www/nodebb
cd /usr/local/www/nodebb
sudo chown -R your_user:your_user /usr/local/www/nodebbЗамените your_user на имя вашего непользовательского пользователя.
Клонируем репозиторий NodeBB и запускаем установочный скрипт:
git clone -b v1.11.x https://github.com/NodeBB/NodeBB.git .
./nodebb setupВо время ./nodebb setup вас попросят указать: тип БД (MongoDB), параметры подключения, порт (по умолчанию 4567), адрес сайта (например, https://example.com) и пр. Введите созданные ранее учётные данные MongoDB.
Запустим приложение вручную для первой проверки:
./nodebb startОткройте в браузере: https://example.com (или http://example.com:4567 при отсутствии прокси). Пример интерфейса:

Шаг 6 — запуск NodeBB постоянно (PM2)
Чтобы NodeBB запускался после перезагрузки, используем PM2.
Остановим запущенный вручную NodeBB (если он запущен):
./nodebb stopУстановим PM2 глобально и запустим приложение через него:
sudo npm install pm2 -g
pm2 -v
cd /usr/local/www/nodebb
pm2 start app.js
pm2 lsКоманда pm2 startup выдаст инструкцию по интеграции с системой и автозапуску. На FreeBSD иногда требуется вручную создать rc-скрипт или воспользоваться экспортом конфигурации PM2. Следуйте выводу pm2 startup и при необходимости сохраните список процессов:
pm2 startup
# Выполните предложенную команду с sudo
pm2 saveПожалуйста, проверьте документацию PM2 и FreeBSD для наиболее корректной интеграции с rc.d, если автоматическая команда не сработала.
Контрольный список перед запуском в продакшене
- Домен указывает на сервер (A/AAAA).
- Порты 80 и 443 доступны для Let\’s Encrypt и пользователей.
- MongoDB запущена и доступна только с доверенных хостов (по возможности).
- Созданы пользователи базы данных с минимальными правами.
- Nginx корректно проксирует запросы на 127.0.0.1:4567.
- Сертификаты успешно установлены и тестировано автоматическое обновление.
- PM2 или другой менеджер процессов настроен для автозапуска.
- Резервная копия настроек и БД.
Критерии приёмки
- Форум доступен по HTTPS на основном домене.
- Авторизация, создание тем и ответы работают корректно.
- Сервер устойчив к перезапуску (PM2 поднимает процесс после reboot).
- Сертификаты действительны и корректно обновляются.
Тесты и приёмо-сдаточные проверки
- Тест #1: Доступность главной страницы по HTTPS (код 200).
- Тест #2: Авторизация и создание темы под учётной записью администратора.
- Тест #3: Проверка веб-сокетов (реальные уведомления при новых сообщениях).
- Тест #4: Остановка mongod/pm2 и проверка восстановления после старта системы.
Отладка: частые проблемы и решения
Проблема: Nginx возвращает 502 Bad Gateway.
- Проверьте, запущен ли NodeBB на 127.0.0.1:4567 (
netstat -an | grep 4567илиssесли доступен). - Посмотрите
./nodebb log(или логи PM2) и логи Nginx.
- Проверьте, запущен ли NodeBB на 127.0.0.1:4567 (
Проблема: Сертификат не выдан acme.sh.
- Убедитесь, что порт 80 свободен и ваш домен разрешается в IP сервера.
- Используйте
--stagingдля тестового запуска и--issueс правильным доменом.
Проблема: npm install падает при установке нативных модулей.
- Установите dev- и build-инструменты (
gcc,gmake,python2если требуется) и выделите swap.
- Установите dev- и build-инструменты (
Безопасность и рекомендации
- Закройте доступ к MongoDB снаружи, оставьте доступ только локально или через VPN.
- Ограничьте права пользователя nodebb в MongoDB.
- Регулярно обновляйте Node.js и пакеты; тестируйте обновления на staging среде.
- Ограничьте число попыток входа (плагины NodeBB) и включите двухфакторную аутентификацию для админов.
Резервное копирование и откат
- Дамп MongoDB:
mongodump --db nodebb --out /var/backups/nodebb-$(date +%F)- Восстановление:
mongorestore --db nodebb /var/backups/nodebb-YYYY-MM-DD/nodebb- Откат к старой версии NodeBB: верните каталог из резервной копии и перезапустите PM2/NodeBB.
Альтернативы и варианты
- Redis вместо MongoDB: NodeBB поддерживает Redis как хранилище, это может быть проще для небольших установок.
- Использовать commercial TLS (если нужны расширенные гарантии) вместо Let\’s Encrypt.
- Развёртывание в контейнерах (Docker) для упрощённого управления зависимостями.
Модель принятия решений
- Небольшой форум (<100 активных пользователей): Redis + single-node FreeBSD может быть достаточен.
- Средний/большой форум: MongoDB с резервированием, отдельный сервер для БД, кластер Nginx или балансировщик, мониторинг.
Рекомендации по совместимости и миграции
- При переходе с другой платформы экспортируйте пользователей и данные и проверьте плагины для миграции.
- Обратите внимание на совместимость версий Node.js и NodeBB: новые версии NodeBB могут требовать более новых Node.
Поддержка и обслуживание (кратко)
- Регулярно проверяйте логи (/var/log/nginx, логи NodeBB и pm2).
- Настройте мониторинг использования CPU, памяти и доступности служб.
- Планируйте регулярное обновление и тестирование обновлений на тестовой копии.
Короткое объявление для пользователей (готово к публикации)
Мы успешно установили и запустили новый форум на NodeBB. Пользователи могут зарегистрироваться и начать обсуждения по адресу https://example.com. Форум защищён TLS, а вся критичная инфраструктура находится под мониторингом.
Ссылки
Сводка
NodeBB установлен на FreeBSD 12, настроен Nginx как обратный прокси, MongoDB использована в качестве хранилища, сертификаты получены через acme.sh и процесс NodeBB запущен через PM2 для автозапуска.
Похожие материалы
Несколько аккаунтов Skype: Multi Skype Launcher
Журнал для работы: повысить продуктивность
Персональные звуки уведомлений на Android
Скачивание шоу Hulu для офлайн‑просмотра
Microsoft Start: персонализированная новостная лента