Создаём и запускаем службу NodeBB в SystemD
1. Создаём пользователя
NodeBB (как и любой Node.js-сервис) никогда не должен работать от root. Поэтому нужно создать непривелегированного пользователя.
adduser --disabled-password --gecos "" nodebb
Эта команда создает минимальную, непривилегированную и неинтерактивную учетную запись с именем nodebb, которая идеально подходит для безопасного запуска веб-приложений.
2. Меняем владельца каталога nodebb
Допустим, вы работаете в LXC-контейнере, и каталог nodebb находится в корневом каталоге виртуальной системы.
Заходим туда, и сначала останавливаем форум:
cd /nodebb
./nodebb stop
Далее меняем владельца каталога
chown -R nodebb:nodebb /nodebb
chown: Изменить владельца.-R: Рекурсивно (применить ко всем файлам и подкаталогам внутри/nodebb).nodebb:nodebb: Новый владелец (пользователь:группа)./nodebb: Директория форума NodeBB.
После этого пользователь nodebb сможет безопасно запускать приложение, и вы сможете правильно указать его в вашем файле Systemd-службы (например, в директивах User=nodebb и Group=nodebb).
3. Создание файла для systemd
Заходим в каталог
cd /etc/systemd/system/
Создаём файл
touch nodebb.service
Вносим в этот файл следующий текст:
# /etc/systemd/system/nodebb.service
[Unit]
Description=NodeBB Forum
Documentation=https://docs.nodebb.org
After=network.target mongod.service
Wants=mongod.service
[Service]
Type=simple
User=nodebb
Group=nodebb
WorkingDirectory=/nodebb
Environment=NODE_ENV=production
# Это самый важный момент — запускаем напрямую loader.js
ExecStart=/usr/bin/node /nodebb/loader.js --no-silent --no-daemon
ExecStop=/usr/bin/node /nodebb/app.js --stop # или просто kill, но так аккуратнее
Restart=always
RestartSec=10
# Логи
StandardOutput=journal
StandardError=journal
# Ограничения (по желанию)
MemoryMax=600M
CPUQuota=90%
[Install]
WantedBy=multi-user.target
4. Запуск сервиса
sudo systemctl daemon-reload
sudo systemctl enable nodebb
sudo systemctl start nodebb