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

Установка NodeBB на Debian 9 с Nginx и MongoDB

• 7 min read • Инфраструктура • Обновлено 23 Nov 2025
Как установить NodeBB на Debian 9
Как установить NodeBB на Debian 9

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

Кому полезно

  • Системным администраторам и DevOps-инженерам, которые разворачивают форум.
  • Веб-разработчикам, которым нужен самохостинг обсуждений.
  • Любому, кто хочет безопасно и устойчиво запустить NodeBB в продакшн.

Основные шаги (кратко)

  1. Подготовить Debian 9 и пользователя с sudo.
  2. Установить Node.js (LTS), npm и build-essential.
  3. Установить MongoDB и создать БД и пользователей.
  4. При желании получить HTTPS-сертификат через acme.sh и Let’s Encrypt.
  5. Настроить Nginx как обратный прокси для NodeBB (порт 4567).
  6. Установить NodeBB из Git, запустить setup и включить как systemd-сервис.

Требования

  • Node.js 6+ (рекомендуется LTS; в примерах используется 10.x). Node.js — это runtime для JavaScript на сервере.
  • MongoDB 2.6+ или Redis 2.8.9+ (в этой инструкции — MongoDB).
  • Nginx 1.3.13+ как обратный прокси.
  • Git для клонирования репозитория NodeBB.

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

Пререквизиты

  • Рабочая система Debian 9 с минимум 1 ГБ RAM.
  • Зарегистрированный домен с A / AAAA записями, указывающими на сервер.
  • Неразовый пользователь с правами sudo.

Шаг 0 — первые команды и проверка окружения

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

lsb_release -ds

Настройте часовой пояс:

sudo dpkg-reconfigure tzdata

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

sudo apt update && sudo apt upgrade -y

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

sudo apt install -y curl wget vim git unzip socat bash-completion apt-transport-https

Совет: добавьте swap, если у системы мало памяти:

sudo fallocate -l 1G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab

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

NodeBB работает на Node.js. В примерах ниже используется NodeSource для установки LTS релиза (10.x):

curl -sL https://deb.nodesource.com/setup_10.x | sudo -E bash -
sudo apt install -y nodejs

Установите инструменты сборки для нативных npm-модулей:

sudo apt install -y build-essential

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

node -v && npm -v
# пример: v10.15.1

Обновите npm до последней стабильной версии:

sudo npm install -g npm@latest
npm -v

Совет: если вы используете менеджер версий типа nvm, можно переключаться между LTS-ветками без вмешательства в системные пакеты.


Шаг 2 — установка и настройка MongoDB

NodeBB хранит данные в MongoDB или Redis. Здесь рассматривается MongoDB 4.0 (репозиторий для Debian Stretch).

Импортируйте ключ и добавьте репозиторий MongoDB, затем установите пакет:

sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 9DA31620334BD75D9DCB49F368818C72E52529D4
echo "deb https://repo.mongodb.org/apt/debian stretch/mongodb-org/4.0 main" | sudo tee /etc/apt/sources.list.d/mongodb-org-4.0.list
sudo apt update
sudo apt install -y mongodb-org

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

mongo --version | head -n 1 && mongod --version | head -n 1

Запустите и включите автозапуск:

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

Создайте базу данных и пользователей. Подключитесь к MongoDB 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 systemctl restart mongod.service
mongo -u admin -p "your_password" --authenticationDatabase=admin

Примечание: для production-релиза рассмотрите включение аутентификации в конфигурации mongod.conf и ограничение доступа по IP.


Шаг 3 — получение сертификатов с помощью acme.sh и Let’s Encrypt (опционально)

HTTPS рекомендуется. Acme.sh — лёгкий клиент на shell без зависимостей.

Установка acme.sh:

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

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

acme.sh --version

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

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

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

Сертификаты будут расположены в /home/username/example.com или /home/username/example.com_ecc. Скопируйте их в общую директорию для Nginx:

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

# 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"

# 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 автоматически обновляет сертификаты (обычно каждые 60 дней при использовании production CA).

Замечание: если ваш сервер уже слушает 80/443, используйте webroot-метод вместо standalone.


Шаг 4 — установка и настройка Nginx

Nginx будет выполнять роль обратного прокси, перенаправляя трафик 80/443 на порт NodeBB (4567).

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

sudo apt install -y nginx

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

nginx -v
sudo systemctl start nginx.service
sudo systemctl enable nginx.service
sudo systemctl status nginx.service

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

server {
  listen [::]:443 ssl http2;
  listen 443 ssl http2;
  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";
  }
}

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

sudo nginx -t
sudo systemctl reload nginx.service

Совет по безопасности: добавьте HSTS, ограничения по TLS-версии и современные cipher suite в production:

add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload" always;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers on;

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

Создайте папку для NodeBB и настройте права:

sudo mkdir -p /var/www/nodebb
sudo chown -R $USER:$USER /var/www/nodebb
cd /var/www/nodebb

Клонируйте репозиторий NodeBB (ветка указывается в примере — используйте актуальную версию):

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

Запустите мастер установки:

./nodebb setup

Ответьте на вопросы мастера: укажите URL форума (например, https://example.com), тип БД (MongoDB), параметры подключения к БД, путь к статическим файлам и т. д.

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

./nodebb start

Если всё в порядке, откройте в браузере https://example.com и вы увидите интерфейс форума:

NodeBB в браузере — пример форума


Шаг 6 — запуск NodeBB как systemd-сервиса

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

Если NodeBB сейчас запущен, остановите его:

./nodebb stop

Создайте системного пользователя nodebb и передайте права на директорию:

sudo useradd --system --no-create-home --shell /usr/sbin/nologin nodebb
sudo chown -R nodebb:nodebb /var/www/nodebb

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

[Unit]
Description=NodeBB
Documentation=https://docs.nodebb.org
After=network.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

Подгрузите конфигурацию systemd, активируйте и запустите сервис:

sudo systemctl daemon-reload
sudo systemctl enable nodebb.service
sudo systemctl start nodebb.service
sudo systemctl status nodebb.service

Проверьте, что NodeBB запускается при перезагрузке и что в логах нет ошибок.


Резервное копирование и обновления

  • Резервируйте MongoDB с помощью mongodump:
mongodump --db nodebb --out /var/backups/mongodump-$(date +%F)
  • Создавайте бэкап файлов NodeBB (папка /var/www/nodebb и конфиги Nginx).
  • Перед обновлением NodeBB: остановите сервис, создайте бэкап, обновите код из Git, выполните npm install и запустите тесты/миграции.

Мини-процесс обновления:

  1. sudo systemctl stop nodebb
  2. cd /var/www/nodebb && git pull origin master
  3. npm install –production
  4. ./nodebb stop && ./nodebb start или sudo systemctl start nodebb

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

  • Включите брандмауэр (ufw) и откройте только нужные порты (80, 443, SSH).
  • Ограничьте доступ к MongoDB по локальному интерфейсу или через firewall.
  • Регулярно применяйте обновления ОС и зависимостей.
  • Используйте HTTPS, HSTS и современные TLS-настройки.
  • Рассмотрите регистрацию логов в централизованной системе (syslog, ELK, Graylog).

Альтернативы и сценарии, когда инструкция не подходит

  • Если вы предпочитаете Redis как хранилище — выберите Redis и настройте nodebb на подключение к Redis (инструкции есть в документации NodeBB).
  • На серверах с ограниченной памятью используйте swap и минимальные npm опции, либо соберите билды на другом CI и переносите артефакты.
  • Для контейнеризованной инфраструктуры (Docker, Kubernetes) лучше использовать официальные образы и Helm-чарты.

Проверки работоспособности и тест-кейсы

  • Проверка web: запрос к https://example.com возвращает HTML форума и корректный сертификат.
  • Socket.IO: отправьте сообщение в реальном времени — другие клиенты должны его увидеть без перезагрузки страницы.
  • Логин/Регистрация: новая учетная запись должна успешно создаваться и входить.
  • Восстановление: восстановление из mongodump должно вернуть ожидаемые данные.

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

  • Форум доступен по HTTPS на указанном домене.
  • NodeBB работает как systemd-сервис и автоматически перезапускается после ребута.
  • База данных MongoDB функционирует и авторизация настроена для admin/nodebb.
  • Nginx корректно проксирует socket.io и статические ресурсы.

Роль‑ориентированные чеклисты

  • DevOps/Инфраструктура:
    • Установка Node.js, MongoDB, Nginx.
    • Настройка systemd и мониторинга.
    • Бэкапы и обновления.
  • Разработчик:
    • Клонирование репозитория, проверка ветки.
    • Проверка сборки npm и плагинов.
  • Модератор/Администратор форума:
    • Создание первой категории и тестовый пост.
    • Проверка уведомлений в реальном времени.

Короткая методология миграции (микро‑плейбук)

  1. Подготовьте staging-сервер с тем же окружением.
  2. Создайте полные бэкапы данных и файлов.
  3. Выполните обновление на staging, проведите smoke-тесты.
  4. Планируйте maintenance-window для продакшн-апдейта.
  5. В случае ошибок — откат по бэкапам и откат systemd unit.

1‑линейный глоссарий

  • NodeBB — платформа форума на Node.js; MongoDB — документо-ориентированная СУБД; Nginx — веб-сервер/обратный прокси; acme.sh — клиент для Let’s Encrypt.

Частые ошибки и устранение (Troubleshooting)

  • Nginx 502 Bad Gateway: убедитесь, что NodeBB запущен на 127.0.0.1:4567 или скорректируйте proxy_pass.
  • Ошибки сборки npm: установите build-essential и проверьте права доступа к node_modules.
  • Сертификат не применяется: проверьте пути в конфиге Nginx и перезагрузите nginx.
  • MongoDB не стартует: проверьте логи /var/log/mongodb/mongod.log и права на директории данных.

Советы по масштабированию

  • Горизонтальное масштабирование: запускайте несколько backend‑инстансов NodeBB за балансировщиком/NGINX с sticky-session или внешним кешем для Socket.IO (например, Redis adapter).
  • Вертикальное масштабирование: увеличьте CPU/RAM и настройте мониторинг SLI (доступность, время ответа).

Ссылки и ресурсы


Короткое резюме

NodeBB можно надёжно развернуть на Debian 9, следуя этому гайду: установите Node.js, MongoDB, получите HTTPS сертификаты, настройте Nginx и systemd. Обязательно создайте бэкапы, ограничьте доступ к БД и применяйте обновления.

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