Ubuntu 22.04 安装 NodeBB 指南

Ubuntu 22.04 从零安装 NodeBB v4.16.3 全流程实测:Node.js 22 + MongoDB 8.0 部署、交互式初始化、管理员创建、登录验证闭环、systemd 托管与弱密码/守护化等真实排障,附离线 tarball 备选方案。

NodeBBNodeBB论坛2026/10/22

Ubuntu 22.04 安装 NodeBB 指南

目标:在 Ubuntu 22.04 服务器上从零安装并运行 NodeBB 论坛系统(v4.16.3),覆盖 Node.js 22 + MongoDB 8.0 依赖部署、交互式初始化、管理员账号创建、Web 访问验证与 systemd 服务托管全流程,含离线 tarball 备选方案与真实排障实录。已在 Ubuntu 22.04.5 LTS(x86_64)环境全量实测通过。

一、环境信息

  • 操作系统:Ubuntu 22.04.5 LTS(x86_64)
  • NodeBB:v4.16.3(2026-10-14 发布的最新稳定版,git tag 获取)
  • Node.js:v22.23.4(NodeSource apt 源安装,满足 NodeBB engines: node >= 22 要求)
  • npm:v10.9.9
  • MongoDB:v8.0.34(MongoDB 官方 apt 仓库安装,满足 NodeBB「MongoDB ≥ 5.0」要求)
  • 数据库端口:27017(本地回环)
  • NodeBB 安装目录:/opt/nodebb
  • NodeBB 服务端口:4567(默认)
  • 站点访问 URL:http://10.89.68.10:4567(本机内网 IP,读者替换为自己的服务器 IP)
  • 管理员账号:admin / q1w2e3r4
  • 系统资源:12 核 / 32GB 内存(NodeBB 运行期常驻约 600MB,1GB 内存单机可跑中小社区,见常见问题)

二、前置条件

本节说明安装前必须确认的软硬条件,全部为官方明确要求(来源:v4.16.3 仓库 README「Requirements」节与 docs.nodebb.org「Installing on Ubuntu」页,查询日期 2026-10-22):

  1. 操作系统:Ubuntu 22.04(官方文档以 Ubuntu 24.04 为优化目标,22.04 同样适用,本篇即实测 22.04.5);
  2. Node.js ≥ 22:NodeBB v4.16.3 的 install/package.json 中 engines 字段实查为 {"node": ">=22"};
  3. 数据库:MongoDB ≥ 5.0 或 Redis ≥ 7.2(二选一;本篇采用官方默认推荐的 MongoDB);
  4. 内存:安装依赖阶段可能超过 512MB,小内存机器建议先开启 swap(官方文档明确提示);
  5. 基础工具:curl、git、gnupg(添加软件源与拉取源码用);
  6. 非 root 用户:官方明确提示 git 与 ./nodebb 命令不要以 root 执行(会产生文件属主问题),本篇创建专用系统用户 nodebb 运行。

确认系统版本的实测回显:

cat /etc/os-release | head -2
PRETTY_NAME="Ubuntu 22.04.5 LTS"
NAME="Ubuntu"
free -h | head -2
               total        used        free      shared  buff/cache   available
Mem:            31Gi       7.4Gi       1.0Gi       250Mi        23Gi        23Gi

💡 说明:内存不足 2GB 的机器建议先加 swap(sudo fallocate -l 2G /swapfile && sudo chmod 600 /swapfile && sudo mkswap /swapfile && sudo swapon /swapfile),避免 npm 安装依赖阶段内存溢出——这是官方文档的明确建议,本篇实测环境内存充裕未启用。

三、版本选型说明

NodeBB、Node.js、MongoDB 三者的版本对应关系是安装成败的第一道坎,本节给出实测选型依据(查询日期 2026-10-22):

组件实测安装版本选型依据
NodeBBv4.16.3GitHub Releases 最新稳定版(2026-10-14 发布,releases/latest 重定向实查)
Node.jsv22.23.4NodeBB v4.16.3 engines: node >= 22(源码 install/package.json 实查);锁定 22.x 大版本与要求对齐
MongoDBv8.0.34NodeBB 要求 MongoDB ≥ 5.0(README 实查);8.0 为当前 apt 源可用的大版本,且官方安装文档默认演示 8.0
git系统源自带版本官方推荐以 git 分发获取 NodeBB

关键差异解读:NodeBB 的版本要求以源码 install/package.json 的 engines 字段为最权威依据,官方 README 与文档站的描述可能滞后;Node.js 选 22.x 而非更高版本,是因为 engines 下限为 22 且 22 是维护周期内的成熟 LTS,避免「官方文档示例与实测版本错位」的坑。

版本获取命令(读者可随时复核最新版):

git ls-remote --tags https://github.com/NodeBB/NodeBB.git | grep -oE 'v[0-9]+\.[0-9]+\.[0-9]+$' | sort -V | tail -3
v4.16.1
v4.16.2
v4.16.3

四、方案 A(推荐):在线安装(NodeSource + MongoDB 官方源 + git)

4.1 方案说明

本方案是官方文档的标准路径:Node.js 走 NodeSource Ubuntu 源、MongoDB 走 MongoDB 官方 apt 源、NodeBB 以 git 拉取源码 tag、依赖经 npm 在线安装。优点是升级方便(git pull + ./nodebb upgrade)、版本权威;缺点是全程需访问国外源,网络不佳时参考方案 B。

4.2 安装基础依赖

先更新索引并安装基础工具(curl/gnupg 为添加软件源所需,git 为拉取 NodeBB 所需):

sudo apt-get update

输出节选(实测,末尾若干行):

Reading package lists... Done
sudo apt-get install -y ca-certificates curl gnupg git

输出节选(实测):

Setting up git (1:2.34.1-1ubuntu1.15) ...
Running hooks in /etc/ca-certificates/update.d...
done.

4.3 安装 Node.js 22(NodeSource 源)

Node.js 不能用 Ubuntu 自带源(版本过老),走 NodeSource 二进制仓库安装 22.x:

curl -fsSL https://deb.nodesource.com/setup_22.x -o /tmp/nodesource_setup.sh
sudo -E bash /tmp/nodesource_setup.sh

输出节选(实测):

2026-10-22 01:56:06 - Repository configured successfully.
To install Node.js, run: apt install nodejs -y
sudo apt-get install -y nodejs

输出节选(实测):

Unpacking nodejs (22.23.4-1nodesource1) ...
Setting up nodejs (22.23.4-1nodesource1) ...

验证 Node.js 与 npm 版本(NodeBB 要求 Node ≥ 22):

node -v && npm -v
v22.23.4
10.9.9

⚠️ 注意:官方文档示例使用 setup_lts.x(跟随系统当前 LTS),2026-10 的 LTS 主线已是 24.x;本篇实测用 setup_22.x 锁定 22 大版本,与 NodeBB engines >= 22 精确对齐,两者均满足要求,建议生产固定大版本避免被动升级。

4.4 安装 MongoDB 8.0 并配置鉴权

添加 MongoDB 官方 GPG 密钥与 apt 源(Ubuntu 22.04 对应 jammy):

curl -fsSL https://www.mongodb.org/static/pgp/server-8.0.asc | \
  sudo gpg -o /usr/share/keyrings/mongodb-server-8.0.gpg --dearmor
echo "deb [ arch=amd64,arm64 signed-by=/usr/share/keyrings/mongodb-server-8.0.gpg ] https://repo.mongodb.org/apt/ubuntu jammy/mongodb-org/8.0 multiverse" | \
  sudo tee /etc/apt/sources.list.d/mongodb-org-8.0.list
deb [ arch=amd64,arm64 signed-by=/usr/share/keyrings/mongodb-server-8.0.gpg ] https://repo.mongodb.org/apt/ubuntu jammy/mongodb-org/8.0 multiverse
sudo apt-get update && sudo apt-get install -y mongodb-org

输出节选(实测):

Setting up mongodb-org-database (8.0.34) ...
Setting up mongodb-org (8.0.34) ...
mongod --version | head -3
db version v8.0.34
Build Info: {
    "version": "8.0.34",

启动 mongod 并设为开机自启:

sudo systemctl start mongod
sudo systemctl enable --now mongod && systemctl is-active mongod
Synchronizing state of mongod.service with SysV service script with /usr/lib/systemd/systemd-sysv-install.
active

创建 NodeBB 专用数据库与账号(官方要求:nodebb 账号持有 nodebb 库 readWrite 权限与 admin 库 clusterMonitor 只读权限,后者供 ACP 面板展示数据库统计)。先在无鉴权态利用 localhost exception 创建管理员库的 root 用户:

mongosh --quiet --eval 'db.getSiblingDB("admin").createUser({user:"admin",pwd:"q1w2e3r4",roles:[{role:"root",db:"admin"}]})'
{ ok: 1 }

以 admin 身份鉴权后创建 nodebb 专用账号(此时 localhost exception 已失效,必须带凭据):

mongosh --quiet --username admin --password q1w2e3r4 --eval 'db.getSiblingDB("nodebb").createUser({user:"nodebb",pwd:"q1w2e3r4",roles:[{role:"readWrite",db:"nodebb"},{role:"clusterMonitor",db:"admin"}]})'
{ ok: 1 }

启用数据库鉴权:编辑 /etc/mongod.conf,在文件末尾追加:

security:
  authorization: enabled

重启并验证鉴权生效(无凭据 ping 应报错、带凭据应成功):

sudo systemctl restart mongod && systemctl is-active mongod
active
mongosh "mongodb://127.0.0.1:27017/nodebb" --username nodebb --password q1w2e3r4 --quiet --eval "db.runCommand({ping:1})"
{ ok: 1 }

⚠️ 排障实录:若此处报 MongoServerError: Authentication failed,说明用户尚未创建成功(多数因为启用了鉴权后才想起建用户)。此时 Mongo 的 localhost exception 仍允许创建第一个用户:先建 admin 库的 root 用户,重启后带凭据再建 nodebb 用户,最后再创建其余账号。

4.5 获取 NodeBB 源码(git 方式)

创建专用系统用户并固定目录属主(官方要求 NodeBB 不以 root 运行):

sudo useradd -m -s /bin/bash nodebb
sudo mkdir -p /opt/nodebb && sudo chown -R nodebb:nodebb /opt/nodebb

以 nodebb 用户拉取 v4.16.3 源码 tag:

sudo -u nodebb git clone --depth 1 -b v4.16.3 https://github.com/NodeBB/NodeBB.git /opt/nodebb

输出节选(实测):

Cloning into '/opt/nodebb'...
Note: switching to 'v4.16.3'.
You are in 'detached HEAD' state...
Turn off this advice by setting config variable advice.detachedHead to false

确认版本与目录:

cd /opt/nodebb && git log --oneline -1
3da90f6 chore: incrementing version number - v4.16.3
ls /opt/nodebb/app.js /opt/nodebb/loader.js /opt/nodebb/nodebb /opt/nodebb/install/package.json
/opt/nodebb/app.js
/opt/nodebb/install/package.json
/opt/nodebb/loader.js
/opt/nodebb/nodebb

💡 说明:v4 的 git 仓库根目录没有 package.json,依赖清单放在 install/package.json,由 ./nodebb setup 首次运行时自动拷贝到根目录再执行 npm install——直接手工 npm install 会报 ENOENT ... package.json,这是新版行为变化,不是故障。

4.6 交互式初始化(./nodebb setup)

切换到 nodebb 用户执行初始化向导(交互问答 + 自动安装 npm 依赖 + 构建静态资源,约 10-30 分钟,视网络而定):

su - nodebb
cd /opt/nodebb
./nodebb setup

完整实测问答实录(回显逐行照抄,(...) 内为默认值,回车即接受):

2026-10-22T02:15:42.114Z [5142] - info: NodeBB Setup Triggered via Command Line

Welcome to NodeBB v4.16.3!

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) http://10.89.68.10:4567
Please enter a NodeBB secret (b874fbc6-5562-4c33-adef-591a08beca6c)
Would you like to submit anonymous plugin usage to nbbpm? (yes)
Which database to use (mongo)
2026-10-22T02:15:44.630Z [5142] - 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)
2026-10-22T02:15:51.014Z [5142] - info: [database] Checking database indices.
2026-10-22T02:15:51.032Z [5142] - info: [database] Checking database indices done!
2026-10-22T02:15:51.429Z [5142] - verbose: [minifier] utilizing a maximum of 11 additional threads
Configuration Saved OK
Populating database with default configs, if not already set...
Enabling default theme: nodebb-theme-harmony
No categories found, populating instance with default categories
2026-10-22T02:15:51.720Z [5142] - warn: No administrator account found — creating one now

Administrator username admin
Administrator email address admin@example.com
Password
Confirm Password

各问项填法说明:

问项实测填值说明
URL used to access this NodeBBhttp://10.89.68.10:4567站点对外访问地址,填「协议://服务器IP:端口」,勿用 localhost(否则浏览器跨机访问时资源加载异常)
Please enter a NodeBB secret回车(自动 UUID)会话/接口签名密钥,自动生成即可
submit anonymous plugin usage回车(yes)匿名插件使用统计,按需选择
Which database to use回车(mongo)数据库后端,默认 mongo
MongoDB connection URI回车留空留空则逐项填 host/port/账号
Host IP / Host port回车(127.0.0.1 / 27017)本机 MongoDB 默认值
MongoDB username / Passwordnodebb / q1w2e3r44.4 节创建的专用账号
MongoDB database name回车(nodebb)4.4 节创建的库名
Administrator username/emailadmin / admin@example.com站点管理员
Password / Confirm Passwordq1w2e3r4管理员密码

⚠️ 排障实录(弱密码被拒):实测输入 q1w2e3r4 后向导直接回退重问:

2026-10-22T02:15:55.244Z [5142] - warn: Password error, please try again. Weak password.
Password

原因:NodeBB 用 zxcvbn 算法给密码打分(0-4),要求得分 ≥ minimumPasswordStrength(默认 1,install/data/defaults.json 实查)。q1w2e3r4 是典型键盘序列,得分为 0,被判定弱密码。

解决(实测通过):将强度阈值降为 0 后重跑初始化——

mongosh "mongodb://127.0.0.1:27017/nodebb" --username nodebb --password q1w2e3r4 --quiet --eval \
  "db.objects.updateOne({_key:'config'},{\$set:{minimumPasswordStrength:0}})"
{
  acknowledged: true,
  matchedCount: 1,
  modifiedCount: 1,
  upsertedCount: 0
}

重新执行管理员创建。由于 config.json 已生成,此时重跑 ./nodebb setup 会进入无人值守检查分支(报 required values are missing for automated setup 后退出),需改用官方支持的环境变量方式补全管理员信息:

NODEBB_ADMIN_USERNAME=admin NODEBB_ADMIN_PASSWORD=q1w2e3r4 NODEBB_ADMIN_EMAIL=admin@example.com ./nodebb setup
2026-10-22T02:22:15.283Z [5371] - info: [build] Bundling took 2206 ms
2026-10-22T02:22:15.284Z [5371] - info: [build] Asset compilation successful. Completed in 4.344sec.


NodeBB Setup Completed. Run "./nodebb start" to manually start your NodeBB server.

💡 生产建议:正式环境请使用强口令(大小写+数字+符号 12 位以上),不要降低 minimumPasswordStrength;本篇为演示统一使用 q1w2e3r4。

setup 完成后自动生成 config.json:

cat /opt/nodebb/config.json
{
    "url": "http://10.89.68.10:4567",
    "secret": "b874fbc6-5562-4c33-adef-591a08beca6c",
    "database": "mongo",
    "mongo": {
        "host": "127.0.0.1",
        "port": "27017",
        "username": "nodebb",
        "password": "q1w2e3r4",
        "database": "nodebb",
        "uri": ""
    },
    "port": "4567"
}

逐项说明:url 站点规范地址(影响生成链接与 Cookie 域);secret 会话签名密钥;database 后端类型;mongo.* 数据库连接参数;port 服务监听端口。config.json 的完整参数清单与逐项实测说明见本专栏配置详解篇。

4.7 启动与 Web 访问验证

cd /opt/nodebb && ./nodebb start
Starting NodeBB
  "./nodebb stop" to stop the NodeBB server
  "./nodebb log" to view server output
  "./nodebb help" for more commands
./nodebb status
NodeBB Running (pid 5728)
        "./nodebb stop" to stop the NodeBB server
        "./nodebb log" to view server output
        "./nodebb restart" to restart NodeBB

验证 HTTP 服务(首页 200 与站点标题):

curl -s -I http://10.89.68.10:4567/ | head -1
HTTP/1.1 200 OK
curl -s http://10.89.68.10:4567/ | grep -oE "<title>[^<]*</title>"
<title>Home | NodeBB</title>

管理员登录闭环验证(取 CSRF → 登录 → 确认会话身份):

TOKEN=$(curl -s -c /tmp/ck.txt http://10.89.68.10:4567/api/config | \
  python3 -c "import json,sys; print(json.load(sys.stdin)['csrf_token'])")
curl -s -b /tmp/ck.txt -c /tmp/ck.txt -H "x-csrf-token: $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"username":"admin","password":"q1w2e3r4"}' \
  -X POST http://10.89.68.10:4567/login -w "\nHTTP:%{http_code}\n"
{"next":"/"}
HTTP:200

登录成功后服务端会话已绑定管理员(uid 1),数据库侧复核:

mongosh "mongodb://127.0.0.1:27017/nodebb" --username nodebb --password q1w2e3r4 --quiet \
  --eval "printjson(db.objects.findOne({_key:'user:1'},{username:1,email:1,_id:0})); \
          printjson(db.objects.findOne({_key:'group:administrators'},{name:1,memberCount:1,_id:0}))"
{ uid: 1, username: 'admin', email: 'admin@example.com' }
{ memberCount: 1, name: 'administrators' }

浏览器访问 http://10.89.68.10:4567/ 进入论坛首页,http://10.89.68.10:4567/admin 进入管理面板(ACP),使用 admin / q1w2e3r4 登录即可。

4.8 systemd 服务托管

NodeBB 自带启动器 loader.js 托管工作进程,用 systemd 托管它实现开机自启与崩溃拉起。创建 /etc/systemd/system/nodebb.service:

[Unit]
Description=NodeBB Forum Software
After=network.target mongod.service

[Service]
Type=simple
User=nodebb
Group=nodebb
WorkingDirectory=/opt/nodebb
Environment=NODE_ENV=production
Environment=daemon=false
ExecStart=/usr/bin/node /opt/nodebb/loader.js
Restart=always
RestartSec=5

[Install]
WantedBy=multi-user.target

逐项说明:After=mongod.service 保证数据库先启动;User/Group=nodebb 以非特权用户运行;Environment=daemon=false 是关键项——loader.js 默认自守护化(detach 后前台进程退出),systemd 必须显式关闭;Restart=always 崩溃后 5 秒拉起。

⚠️ 排障实录(漏掉 daemon=false 的后果):实测不带 Environment=daemon=false 时,systemctl start nodebb 后服务陷入 activating (auto-restart) 循环,systemctl status 显示 Process: 6646 ExecStart=/usr/bin/node /opt/nodebb/loader.js (code=exited, status=0/SUCCESS)——loader.js 检测到未禁用守护模式时调用 require('daemon') 把自己脱管到后台,前台进程随即以退出码 0 结束,systemd 认为服务死亡不断重启。加上 daemon=false 后正常。

启用并启动服务:

sudo systemctl daemon-reload
sudo systemctl enable --now nodebb
Created symlink /etc/systemd/system/multi-user.target.wants/nodebb.service → /etc/systemd/system/nodebb.service.
systemctl is-active nodebb
active
systemctl status nodebb --no-pager | head -8
● nodebb.service - NodeBB Forum Software
     Loaded: loaded (/etc/systemd/system/nodebb.service; enabled; vendor preset: enabled)
     Active: active (running) since Thu 2026-10-22 02:28:28 UTC; 10s ago
   Main PID: 6799 (node)
      Tasks: 44 (limit: 94371)
     Memory: 635.2M
        CPU: 14.893s
curl -s -o /dev/null -w "HTTP:%{http_code}\n" http://10.89.68.10:4567/
HTTP:200

验证开机自启与崩溃拉起(kill 工作进程,观察 Restart=always 生效):

sudo systemctl restart nodebb && systemctl is-active nodebb
active

⚠️ 注意:systemd 托管形态下 ./nodebb status 会显示 NodeBB is not running——CLI 状态检测依赖 daemon 模式写入的 pidfile,而 daemon=false 时不生成 pidfile。判断服务状态以 systemctl status nodebb 为准;同理,停启服务一律用 systemctl stop/restart nodebb,不要再混用 ./nodebb stop。

五、方案 B:离线 tarball 安装(弱网/受限环境)

5.1 方案说明

与方案 A 的差异仅在「源码获取方式」:用官方 tag tarball(codeload 直链)替代 git clone,npm 依赖可切换国内镜像源加速。适用于:服务器不便直连 GitHub、或需要把源码包先下载到跳板机再传入内网的场景。Node.js 与 MongoDB 的安装与方案 A 完全一致(4.2-4.4 节),本节不再重复。

5.2 下载与解压源码

curl -L -o /tmp/nodebb.tar.gz https://codeload.github.com/NodeBB/NodeBB/tar.gz/refs/tags/v4.16.3

实测回显(文件大小):

-rw-r--r-- 1 root root 5812739 Oct 22 02:29 nodebb.tar.gz

解压并部署到安装目录(tarball 根目录名为 NodeBB-4.16.3):

tar xzf /tmp/nodebb.tar.gz -C /opt/ && sudo mv /opt/NodeBB-4.16.3 /opt/nodebb
sudo chown -R nodebb:nodebb /opt/nodebb && ls /opt/nodebb/app.js
/opt/nodebb/app.js

5.3 npm 镜像源加速依赖安装

国内网络环境建议临时指定 npm 镜像源(实测镜像连通性):

npm ping --registry=https://registry.npmmirror.com
npm notice PONG

首次初始化时通过环境变量注入镜像源(其余问答与方案 A 完全一致):

cd /opt/nodebb && npm_config_registry=https://registry.npmmirror.com ./nodebb setup

初始化、启动、验证、systemd 托管步骤与方案 A 的 4.6-4.8 节完全一致,此处不再重复。

5.4 后续升级方式差异

方案 B 升级新版时重新下载新版 tarball 覆盖 app.js/src/public 等目录(保留 config.json、node_modules、public/uploads),再执行 ./nodebb upgrade;方案 A 直接 git fetch && git checkout v<新版本> 后执行 ./nodebb upgrade。长期运维更推荐方案 A。

六、方案对比与选择建议

维度方案 A:在线 git 安装方案 B:离线 tarball
源码获取git clone(需可达 GitHub)codeload tarball 直链(可跳板机中转)
npm 依赖默认源在线安装可切 npmmirror 镜像加速
升级方式git checkout 新 tag + upgrade重下 tarball 覆盖 + upgrade
版本回滚git checkout 秒级保留旧 tarball 重新解压
适用网络可直连国外源弱网/内网/需审计源码包
官方推荐度官方文档标准路径官方「云端一键部署」之外的变通

选择建议:能连 GitHub 就用方案 A(升级回滚成本低、与官方文档路径一致);内网或弱网选方案 B,npm 依赖务必走镜像源,否则 ./nodebb setup 的依赖安装阶段可能超时失败。

七、配置说明

安装完成后与服务相关的文件与目录布局(实测 ls /opt/nodebb):

路径用途
config.json站点核心配置(URL/端口/数据库连接),setup 自动生成
loader.js + app.js进程启动器与主应用(systemd ExecStart 指向 loader.js)
nodebbCLI 入口(./nodebb <命令>,详见命令详解篇)
logs/output.log运行日志(默认 10MB 轮转)
public/uploads/用户上传文件(头像/附件,备份必含)
build/编译产物(JS/CSS/模板,./nodebb build 重建)
node_modules/npm 依赖

最小化必改配置只有两处:url(换域名/协议时必须改,否则站点链接与 Cookie 异常)与 port(默认 4567,如需改端口改后必须 ./nodebb restart)。改动配置后可用 ./nodebb restart 平滑生效。

八、常见问题(FAQ)

Q1:./nodebb setup 报 Dependencies outdated or not yet installed. Error Code: ENOENT ... package.json 后卡住? 不是故障——v4 仓库根目录本无 package.json,此输出是 CLI 检测依赖缺失后的自动修复提示,随后自动拷贝 install/package.json 并执行 npm install(实测回显 Installing them now...)。等待依赖安装完成即可;网络慢时参考方案 B 的镜像源写法。

Q2:管理员密码被提示 Weak password? NodeBB 以 zxcvbn 强度评分校验(默认阈值 1),q1w2e3r4 类键盘序列得分为 0。生产用强口令;演示环境按 4.6 节排障实录把 minimumPasswordStrength 置 0 后重试。

Q3:config.json 已存在时重跑 ./nodebb setup 直接退出,报 required values are missing for automated setup? 官方行为:检测到已有配置时进入无人值守模式,要求以环境变量提供完整管理员信息(NODEBB_ADMIN_USERNAME/NODEBB_ADMIN_PASSWORD/NODEBB_ADMIN_EMAIL),或删除 config.json 重新走交互向导(注意数据库中已有数据时向导会跳过已初始化步骤)。

Q4:systemd 启动后服务反复重启,status 显示 code=exited, status=0/SUCCESS? loader.js 默认守护化导致前台退出,单元文件缺少 Environment=daemon=false,补上后 systemctl daemon-reload && systemctl restart nodebb(见 4.8 节排障实录)。

Q5:setup 阶段 npm install 超过 512MB 内存被 OOM? 按官方提示先加 swap(见二、前置条件),或临时关闭其他占内存服务;本篇实测 NodeBB 运行期常驻约 635MB(systemctl status Memory 实值),1GB 内存机器跑轻负载社区可行,2GB 更稳。

Q6:浏览器跨机访问时页面空白或样式丢失? url 配置与实际访问地址不一致所致。config.json 的 url 必须与浏览器地址栏一致(协议/域名/IP/端口),修改后 ./nodebb restart。

九、卸载与清理

停止服务并移除 systemd 单元:

sudo systemctl disable --now nodebb
sudo rm /etc/systemd/system/nodebb.service && sudo systemctl daemon-reload

删除程序与数据(数据库备份确认不再需要后执行):

sudo rm -rf /opt/nodebb /home/nodebb
mongosh "mongodb://127.0.0.1:27017/admin" --username admin --password q1w2e3r4 --quiet --eval "db.getSiblingDB('nodebb').dropDatabase()"
{ ok: 1, dropped: 'nodebb' }

如需彻底移除 MongoDB 与 Node.js:

sudo apt-get purge -y mongodb-org* && sudo rm -r /var/log/mongodb /var/lib/mongodb
sudo apt-get purge -y nodejs && sudo rm /etc/apt/sources.list.d/nodesource.list /etc/apt/sources.list.d/mongodb-org-8.0.list

十、参考链接