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

Установка NodeBB на FreeBSD 12 с Nginx и MongoDB

• 7 min read • Инфраструктура • Обновлено 23 Nov 2025
Установка NodeBB на FreeBSD 12
Установка NodeBB на FreeBSD 12

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

Обложка: установка NodeBB на FreeBSD

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 status

NodeBB по умолчанию слушает порт 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 при отсутствии прокси). Пример интерфейса:

NodeBB в браузере — пример интерфейса форума

Шаг 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.
  • Проблема: Сертификат не выдан acme.sh.

    • Убедитесь, что порт 80 свободен и ваш домен разрешается в IP сервера.
    • Используйте --staging для тестового запуска и --issue с правильным доменом.
  • Проблема: npm install падает при установке нативных модулей.

    • Установите dev- и build-инструменты (gcc, gmake, python2 если требуется) и выделите swap.

Безопасность и рекомендации

  • Закройте доступ к 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 для автозапуска.

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