База знаний (цифровой суверенитет)
  • NodeBB - установка на Debian 12

    Перенесена
    NodeBB
    1 8 6

    A
    951
    0

    Содержание

  • A
    951
    0

    Подразумевается, что установка форума происходит в Incus-контейнере


    1. Настраиваем систему в контейнере


    Заходим в контейнер

    incus exec incus-forum -- bash     # Имя контейнера incus-forum, но можете задать другое имя
    
    1. Обновляем пакеты и устанавливаем утилиты:
    apt update
    apt install mc nano curl wget htop lynx lsof openssh-server
    
    1. Задаём пароль для суперпользователя (root)
    passwd root
    

    И два раза вводим придуманный пароль

    1. Создаём нового пользователя и включаем его в группу sudo
    sudo adduser forumuser  # Вместо newuser можете задать другое имя пользователя
    

    Система попросит вас:

    • Ввести пароль (символы при вводе не отображаются).
    • Повторить пароль.
    • Ввести данные пользователя (ФИО, номер комнаты и т.д.) — это можно пропустить, просто нажимая Enter.
    • Далее будет предложено подтвердить настройки, выбираем Y и жмём Enter

    Добавляем пользователя в группу sudo

    sudo usermod -aG sudo forumuser
    
    -a (append) — добавить.
    -G (groups) — в группу.
    

    Чтобы убедиться, что всё прошло успешно, переключитесь на нового пользователя:

    su - forumuser
    

    Затем попробуйте выполнить любую команду с sudo, например, обновить список пакетов:

    sudo apt update
    

    Если система приняла пароль и начала обновление — пользователь успешно настроен.

    Выходим из режима пользователя

    exit
    

    Выходим из контейнера

    exit
    
  • A
    951
    0

    2. Устанавливаем компоненты форума


    Заходим в контейнер

    incus exec incus-forum -- bash
    

    Заходим под созданным ранее пользователем

    su - forumuser
    

    Установка Node.js (версия 22 LTS)

    NodeBB требует Node.js 22.x (LTS на ноябрь 2025 года). Устанавливаем из репозитория NodeSource.

    1. Импорт GPG-ключа NodeSource

    sudo apt-get install -y ca-certificates curl gnupg
    sudo mkdir -p /etc/apt/keyrings
    curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | sudo gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg
    

    2. Добавление репозитория Node.js 22.x

    echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_22.x nodistro main" | sudo tee /etc/apt/sources.list.d/nodesource.list
    

    3. Установка

    sudo apt update
    sudo apt install nodejs -y
    

    Проверка

    node -v    # должно быть v22.x.x
    npm -v     # должно быть 10.x.x
    

    Установка MongoDB 8.0

    MongoDB 8.0 — официально поддерживаемая версия. Используем репозиторий MongoDB для Debian 12 (bookworm).

    1. Импорт GPG-ключа MongoDB

    sudo apt-get install -y gnupg curl
    curl -fsSL https://pgp.mongodb.com/server-8.0.asc | \
       sudo gpg -o /usr/share/keyrings/mongodb-server-8.0.gpg --dearmor
    

    2. Добавление репозитория

    echo "deb [ signed-by=/usr/share/keyrings/mongodb-server-8.0.gpg ] http://repo.mongodb.org/apt/debian bookworm/mongodb-org/8.0 main" | sudo tee /etc/apt/sources.list.d/mongodb-org-8.0.list
    

    3. Установка

    sudo apt update
    sudo apt install -y mongodb-org
    

    Проверка

    mongod --version
    # db version v8.0.x
    

    Запуск и проверка службы

    sudo systemctl start mongod
    sudo systemctl enable mongod
    sudo systemctl status mongod
    

    Установка NodeBB

    1. Установка Git

    sudo apt install -y git
    

    Важно: Для следующей операции НЕ используйте sudo!

    2. Клонирование репозитория (ветка v4.x — стабильная)

    git clone -b v4.x https://github.com/NodeBB/NodeBB.git nodebb
    

    3. Переходим в каталог nodebb и копируем туда файл package.json

    cd nodebb
    cp install/package.json ./     # Тоже без sudo
    

    Или:

    • Заходим через файловый менеджер mc
    • Выбираем каталог install (получится nodebb/install)
    • Копируем оттуда файл package.json на уровень выше, то есть в каталог nodebb
    • Выходим из mc
  • A
    951
    0

    3. Настраиваем базу данных


    Настройка MongoDB (с авторизацией)

    1. Подключение к MongoDB Shell

    mongosh
    

    2. Создание администратора (в базе admin)

    use admin
    db.createUser({
      user: "admin",
      pwd: "ВАШ_НАДЁЖНЫЙ_ПАРОЛЬ",
      roles: [ { role: "root", db: "admin" } ]
    })
    

    Замените ВАШ_НАДЁЖНЫЙ_ПАРОЛЬ на сложный пароль (без <>).

    3. Создание базы и пользователя для NodeBB

    use nodebb
    db.createUser({
      user: "nodebb",
      pwd: "ВАШ_ПАРОЛЬ_NODEBB",
      roles: [
        { role: "readWrite", db: "nodebb" },
        { role: "clusterMonitor", db: "admin" }
      ]
    })
    

    4. Выход

    quit()
    

    5. Включение авторизации

    Отредактируйте конфигурацию:

    sudo nano /etc/mongod.conf
    

    Добавьте в конец:

    security:
      authorization: enabled
    

    6. Перезапуск MongoDB

    sudo systemctl restart mongod
    

    7. Проверка подключения с авторизацией

    mongosh "mongodb://localhost:27017" --username admin --authenticationDatabase admin
    

    (Вас попросят ввести пароль admin. Выйдите через quit().)

  • A
    951
    0

    4. Настройка и запуск NodeBB


    Внимание!
    Операции по настройке и запуску форума NodeBB осуществляем без входа в режим sudo


    cd nodebb
    

    1. Запуск настройки

    • Заходим через файловый менеджер mc
    • Выбираем каталог install (получится nodebb/install)
    • Копируем оттуда файл package.json на уровень выше, то есть в каталог nodebb
    • Выходим из mc

    2. Запуск настройки

    ./nodebb setup
    

    Ответы на вопросы:

    • URL сайта: http://ваш-домен.ру (точно так, как будете открывать)
    • Порт: 4567 (по умолчанию)
    • База данных: mongo
    • Хост MongoDB: localhost
    • Порт MongoDB: 27017
    • Имя пользователя: nodebb
    • Пароль: ВАШ_ПАРОЛЬ_NODEBB (из шага выше)
    • Создание администратора: заполните логин, email, пароль

    ПРИМЕР


    Welcome to NodeBB v4.7.0!
    
    This looks like a new installation, so you'll have to answer a few questions about your environment before we can proceed.
    Press enter to accept the default setting (shown in brackets).
    URL used to access this NodeBB (http://localhost:4567) https://pixelfed.nbics.net
    Please enter a NodeBB secret (90a569b2-f42b-4be2-b36b-35606094bfea) 
    Would you like to submit anonymous plugin usage to nbbpm? (yes) no
    Which database to use (mongo) 
    2025-12-05T20:15:09.594Z [5423] - info: 
    Now configuring mongo database:
    MongoDB connection URI: (leave blank if you wish to specify host, port, username/password and database individually)
    Format: mongodb://[username:password@]host1[:port1][,host2[:port2],...[,hostN[:portN]]][/[database][?options]] 
    Host IP or address of your MongoDB instance (127.0.0.1) 
    Host port of your MongoDB instance (27017) 
    MongoDB username nodebb
    Password of your MongoDB database 
    MongoDB database name (nodebb) nodebb
    2025-12-05T20:16:31.596Z [5423] - info: [database] Checking database indices.
    2025-12-05T20:16:32.210Z [5423] - info: [database] Checking database indices done!
    2025-12-05T20:16:33.290Z [5423] - verbose: [minifier] utilizing a maximum of 7 additional threads
    Configuration Saved OK
    Populating database with default configs, if not already set...
    2025-12-05T20:16:33.348Z [5423] - warn: [cache-buster] could not read cache buster ENOENT: no such file or directory, open '/nodebb/build/cache-buster' {"code":"ENOENT","errno":-2,"path":"/nodebb/build/cache-buster","stack":"Error: ENOENT: no such file or directory, open '/nodebb/build/cache-buster'\n    at async open (node:internal/fs/promises:641:25)\n    at async Object.readFile (node:internal/fs/promises:1245:14)\n    at async read (/nodebb/src/meta/cacheBuster.js:31:18)\n    at async Configs.init (/nodebb/src/meta/configs.js:90:17)\n    at async setupDefaultConfigs (/nodebb/src/install.js:249:2)\n    at async install.setup (/nodebb/src/install.js:617:3)\n    at async Object.setup (/nodebb/src/cli/setup.js:30:15)","syscall":"open"}
    Enabling default theme: nodebb-theme-harmony
    No categories found, populating instance with default categories
    2025-12-05T20:16:33.760Z [5423] - warn: No administrators have been detected, running initial user setup
    
    Administrator username Admin
    Administrator email address oleg75@mail.nbics.net
    Password 
    Confirm Password 
    
    

    После завершения появится: NodeBB Setup Completed.

    3. Запуск NodeBB

    ./nodebb start
    

    Проверьте: http://ваш-ip:4567 — должен открыться форум.


    Управление NodeBB

    Команда Описание
    ./nodebb start Запуск
    ./nodebb stop Остановка
    ./nodebb restart Перезапуск
    ./nodebb log Просмотр логов в реальном времени
  • A
    951
    0

    5. Создание конфига для NGINX и сертификата


    Внимание!
    Работа с Nginx производится вне контейнера, на хостовой системе


    1. Создаём простой стандартный конфиг для нужного домена
    cd /etc/nginx/sites-available
    sudo touch nodebb.conf
    sudo nano nodebb.conf
    
    1. Вписываем в конфиг примитив, сохраняем
    server {
        listen 80;
        server_name my_domain.tld;  # Замените на ваш домен
    
        location / {
            root /var/www/html;
        }
    }
    
    1. Создаём линк
    sudo ln -s /etc/nginx/sites-available/nodebb.conf /etc/nginx/sites-enabled/
    
    1. Устанавливаем certbot, если ещё не установлен
    sudo apt install certbot python3-certbot-nginx -y
    
    1. Создаём сертификат для домена
    sudo certbot --nginx -d my_domain.tld
    
    1. Заходим сюда /etc/nginx/sites-available/nodebb.conf и меняем текст конфига таком образом:
    server {
    
        server_name my_domain.tld; # Подставляем свой домен
    
        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://10.0.3.180:4567;  # Меняем на айпи своего контейнера с форумом
            proxy_redirect off;
    
            # Socket.IO Support
            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection "upgrade";
        }
    
        listen 443 ssl; # managed by Certbot
        ssl_certificate /etc/letsencrypt/live/my_domain.tld/fullchain.pem; # Сюда тоже свой домен
        ssl_certificate_key /etc/letsencrypt/live/my_domain.tld/privkey.pem; # И сюда свой домен                                                                                                                
        include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot                                                                                                                                         
        ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot                                                                                                                                           
    
    }server {
        if ($host = my_domain.tld) {    # Ещё раз прописываем свой домен
            return 301 https://$host$request_uri;
        } # managed by Certbot
    
    
        listen 80;
    
        server_name my_domain.tld;   #  И снова свой домен вписываем
        return 404; # managed by Certbot
    }
    
    1. Проверка и перезагрузка
    sudo nginx -t
    sudo systemctl reload nginx
    
  • A Admin переместил эту тему из Разное в
  • A
    951
    0

    Управление NodeBB


    ⚙️ Основные команды NodeBB

    Команда Описание
    ./nodebb start Запуск экземпляра NodeBB (в фоновом режиме).
    ./nodebb stop Остановка запущенного экземпляра NodeBB.
    ./nodebb restart Перезапуск экземпляра NodeBB.
    ./nodebb log Просмотр логов в реальном времени (с использованием tail -f).
    ./nodebb status Проверка статуса запущенного процесса NodeBB.

    🛠️ Команды для разработки и обслуживания

    Команда Описание
    ./nodebb dev Запуск NodeBB в режиме разработки. Включает горячую перезагрузку шаблонов и логов.
    ./nodebb setup Настройка NodeBB (первоначальная установка или изменение конфигурации).
    ./nodebb upgrade Выполнение обновления базы данных и файлов NodeBB до последней версии.
    ./nodebb reset Сброс конфигурации NodeBB (не рекомендуется без необходимости).
    ./nodebb build Пересборка клиентских скриптов и стилей (обычно требуется после обновления или установки плагинов).
    ./nodebb activate plugin-name Активация указанного плагина.
    ./nodebb deactivate plugin-name Деактивация указанного плагина.

    📂 Команды для базы данных

    Команда Описание
    ./nodebb backup Создание резервной копии базы данных (требует дополнительной настройки или внешних утилит в зависимости от используемой БД).
    ./nodebb restore Восстановление базы данных из резервной копии.

    Примечание: Все эти команды должны выполняться из корневой директории установки NodeBB.

  • A
    951
    0

    Создаём и запускаем службу 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
    
    
  • A Admin переместил эту тему из NodeBB в
  • A Admin переместил эту тему из