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

Кому полезно
- Системным администраторам и DevOps-инженерам, которые разворачивают форум.
- Веб-разработчикам, которым нужен самохостинг обсуждений.
- Любому, кто хочет безопасно и устойчиво запустить NodeBB в продакшн.
Основные шаги (кратко)
- Подготовить Debian 9 и пользователя с sudo.
- Установить Node.js (LTS), npm и build-essential.
- Установить MongoDB и создать БД и пользователей.
- При желании получить HTTPS-сертификат через acme.sh и Let’s Encrypt.
- Настроить Nginx как обратный прокси для NodeBB (порт 4567).
- Установить 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 и вы увидите интерфейс форума:

Шаг 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 и запустите тесты/миграции.
Мини-процесс обновления:
- sudo systemctl stop nodebb
- cd /var/www/nodebb && git pull origin master
- npm install –production
- ./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 и плагинов.
- Модератор/Администратор форума:
- Создание первой категории и тестовый пост.
- Проверка уведомлений в реальном времени.
Короткая методология миграции (микро‑плейбук)
- Подготовьте staging-сервер с тем же окружением.
- Создайте полные бэкапы данных и файлов.
- Выполните обновление на staging, проведите smoke-тесты.
- Планируйте maintenance-window для продакшн-апдейта.
- В случае ошибок — откат по бэкапам и откат 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. Обязательно создайте бэкапы, ограничьте доступ к БД и применяйте обновления.
Похожие материалы
Несколько аккаунтов Skype: Multi Skype Launcher
Журнал для работы: повысить продуктивность
Персональные звуки уведомлений на Android
Скачивание шоу Hulu для офлайн‑просмотра
Microsoft Start: персонализированная новостная лента