本页内容
- 准备工作
- 安装依赖
- 配置 MongoDB 服务器
- 安装 NodeBB
- 配置 Nginx 反向代理
- 使用 HTTPS 保护 NodeBB
- 访问 NodeBB
- 总结
NodeBB 是一款使用 JavaScript 和 Node.js 编写的开源论坛软件,默认使用 MongoDB 作为数据库。NodeBB 提供了众多功能,例如通过 WebSocket 实现的实时通知、社交媒体集成以及完整的 REST API。
本指南将介绍如何在 Debian 12 服务器上安装 NodeBB,使用 MongoDB 作为数据库、Nginx 作为反向代理。
准备工作
在开始之前,请确保你已具备以下条件:
- 一台 Debian 12 服务器。
- 一个具有 sudo 权限的非 root 用户。
- 一个已解析到服务器 IP 地址的域名。
安装依赖
在开始之前,你需要安装 NodeBB 所需的依赖项,包括来自 Debian 软件源的 Node.js、NPM(Node.js 包管理器)和 Nginx Web 服务器。至于 MongoDB,则通过官方 MongoDB 软件源进行安装。
首先,运行以下命令在 Debian 系统上安装 gnupg 和 curl 软件包。
sudo apt install gnupg curl -y
使用以下命令添加 MongoDB 的 GPG 密钥和软件源:
curl -fsSL https://pgp.mongodb.com/server-7.0.asc | \
sudo gpg -o /usr/share/keyrings/mongodb-server-7.0.gpg \
--dearmor
echo "deb [ signed-by=/usr/share/keyrings/mongodb-server-7.0.gpg ] http://repo.mongodb.org/apt/debian bookworm/mongodb-org/7.0 main" | sudo tee /etc/apt/sources.list.d/mongodb-org-7.0.list

现在更新 Debian 软件包索引,并安装 MongoDB、Node.js、NPM、Nginx 和 Git。输入 Y 确认安装。
sudo apt update
sudo apt install mongodb-org nodejs npm git nginx

安装完成后,使用以下命令重新加载 systemd 管理器:
sudo systemctl daemon-reload
现在运行以下命令来启动、设置开机自启并查看 MongoDB 服务状态。
sudo systemctl enable --now mongod
sudo systemctl status mongod
以下输出表明 MongoDB 正在运行。

接下来,使用以下命令检查 Nginx 服务状态。你应该能看到 Nginx 已启用并在系统中运行。
sudo systemctl is-enabled nginx
sudo systemctl status nginx

最后,使用以下命令检查 Node.js 和 NPM 的版本:
sudo node-v
sudo npm -v
如下图所示,已安装 Node.js 18 和 NPM 9。

配置 MongoDB 服务器
在本节中,你将启用 MongoDB 身份验证,为 MongoDB 创建一个新管理员用户,然后为 NodeBB 安装创建新的数据库和用户。
使用以下命令登录 MongoDB 服务器:
mongosh
运行以下查询切换到 'admin' 数据库,并为 MongoDB 创建一个新管理员用户 'admin'。请务必将密码 'MongoDBAdminPass' 替换为你自己的新密码。
use admin
db.createUser( { user: "admin", pwd: "MongoDBAdminPass", roles: [ { role: "root", db: "admin" } ] } )
接下来,创建一个新数据库和用户 'nodebb',密码为 'NodeBBPassword'。该数据库和用户将用于 NodeBB 安装。
use nodebb
db.createUser( { user: "nodebb", pwd: "NodeBBPassword", roles: [ { role: "readWrite", db: "nodebb" }, { role: "clusterMonitor", db: "admin" } ] } )
现在输入 'quit()' 退出 MongoDB。

接下来,使用 nano 编辑器打开 MongoDB 配置文件 '/etc/mongod.conf'。
sudo nano /etc/mongod.conf
通过添加以下配置来启用 MongoDB 身份验证。
security: authorization: enabled
完成后保存并关闭文件。
现在运行以下命令重启 MongoDB 服务以应用新的更改。命令执行后,MongoDB 身份验证即被启用。
sudo systemctl restart mongod
为确保 MongoDB 配置成功,使用用户 'nodebb' 登录到 'nodebb' 数据库。在提示时输入你的密码。
mongosh "mongodb://127.0.0.1:27017" --username nodebb --authenticationDatabase nodebb
登录后,运行以下查询来检查连接并退出 MongoDB。
db.runCommand( { connectionStatus: 1, showPrivileges: false } )
quit()
在以下输出中,你可以看到已以 'nodebb' 身份认证到 'nodebb' 数据库。

安装 NodeBB
完成 MongoDB 配置后,你将下载并安装 NodeBB。你需要为 NodeBB 创建一个专用用户,下载并安装 NodeBB 依赖项,然后为 NodeBB 安装设置服务文件。
使用以下命令添加一个新的系统用户 'nodebb',默认主目录为 '/opt/nodebb':
sudo adduser --system --no-create-home --home=/opt/nodebb --group nodebb

现在使用 git 将 NodeBB v3 源码下载到 '/opt/nodebb' 目录,并将 '/opt/nodebb' 目录的所有权更改为用户 'nodebb'。
git clone -b v3.x https://github.com/NodeBB/NodeBB.git /opt/nodebb
sudo chown -R nodebb:nodebb /opt/nodebb
进入 '/opt/nodebb' 目录,并使用以下命令配置你的 NodeBB 安装。
cd /opt/nodebb
sudo su -s /bin/bash -c "./nodebb setup" nodebb
- 输入 NodeBB 的域名。
- 保持 NodeBB 密钥为默认值并按 ENTER。
- 输入 no 以禁用匿名插件使用情况统计。
- 选择数据库为 MongoDB。
- 输入 MongoDB 数据库连接 URL:mongodb://nodebb:[email protected]:27017/nodebb。
- 输入 NodeBB 的管理员用户名和电子邮件地址。
- 输入你的密码并重复确认。
过程完成后,你会看到 'NodeBB Setup Completed' 的输出,还能看到用于运行 NodeBB 的命令。

接下来,执行以下命令来启动或停止 NodeBB。当你需要手动启动或停止 NodeBB 时可以使用这些命令。
sudo su -s /bin/bash -c "./nodebb start" nodebb
sudo su -s /bin/bash -c "./nodebb stop" nodebb

为了让 NodeBB 管理更加方便,你将为其创建一个新的 systemd 服务文件。这样一来,NodeBB 安装将在后台运行,并且可以通过 systemctl 命令进行管理。
使用 nano 编辑器命令创建新的 systemd 服务文件 '/etc/systemd/system/nodebb.service'。
sudo nano /etc/systemd/system/nodebb.service
将以下配置插入到文件中:
[Unit] Description=NodeBB Documentation=https://docs.nodebb.org After=system.slice multi-user.target mongod.service [Service] Type=simple User=nodebb StandardError=syslog SyslogIdentifier=nodebb Environment=NODE_ENV=production WorkingDirectory=/opt/nodebb ExecStart=/usr/bin/env node loader.js --no-silent --no-daemon Restart=always [Install] WantedBy=multi-user.target
保存并关闭文件。
现在运行以下命令重新加载 systemd 管理器并应用新的 NodeBB 服务文件。
sudo systemctl daemon-reload
之后,使用以下 systemctl 命令启动并设置开机自启 'nodebb' 服务。
sudo systemctl start nodebb
sudo systemctl enable nodebb
使用以下命令验证 'nodebb' 服务,以确保其正在运行。
sudo systemctl status nodebb
如下图所示,NodeBB 正作为 systemd 服务在后台运行。

配置 Nginx 反向代理
此时,NodeBB 正在后台的 4567 端口上运行。现在你将创建一个新的 Nginx 服务器块,用作 NodeBB 论坛的反向代理。请确保你的域名已解析到服务器 IP 地址。
使用 nano 编辑器创建新的 Nginx 服务器块配置文件 '/etc/nginx/sites-available/nodebb'。
sudo nano /etc/nginx/sites-available/nodebb
添加以下配置,将 Nginx 设置为 NodeBB 的反向代理。请务必将 server_name 参数修改为你的域名。
server {
listen 80;
server_name forum.howtoforge.local;
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";
}
}
完成后,保存文件并退出。
现在启用服务器块文件 'nodebb',并使用以下命令测试 Nginx 配置语法:
sudo ln -s /etc/nginx/sites-available/nodebb /etc/nginx/sites-enabled/
sudo nginx -t
如果你的 Nginx 语法正确,你将看到 'syntax is ok - test is successful' 的输出。

最后,运行以下命令重启 Nginx 服务以应用更改。
sudo systemctl restart nginx
使用 HTTPS 保护 NodeBB
在本指南中,你将通过 Certbot 和 Let's Encrypt 使用 HTTPS 来保护 NodeBB。如果你使用的是本地域名,可以跳过此步骤,也可以生成自签名证书。
使用以下 apt 命令安装 Certbot 和 Certbot Nginx 插件。输入 Y 继续安装。
sudo apt install certbot python3-certbot-nginx
现在运行以下 certbot 命令为你的 NodeBB 域名生成 SSL 证书。请务必将电子邮件地址和域名替换为你自己的信息。
sudo certbot --nginx --agree-tos --no-eff-email --redirect --hsts --staple-ocsp --email
[email protected]
-d forum.hwdomain.i
完成该过程后,你的 NodeBB 安装应该已通过 HTTPS 自动得到保护。你的 SSL/TLS 证书将位于 '/etc/letsencrypt/live/domain.com' 目录中。
访问 NodeBB
使用 Web 浏览器访问 https://forum.howtoforge.local/,你将看到如下所示的 NodeBB 默认首页:

在首页中,点击 Login 菜单,将显示 NodeBB 登录页面。输入你的管理员用户名和密码,然后点击 Login。

如果成功,你将看到如下用户仪表盘。

点击 Admin 菜单,即可访问如下所示的 NodeBB 管理仪表盘:

总结
恭喜!你已在 Debian 12 服务器上安装了 NodeBB。现在 NodeBB 正与 MongoDB 数据库和 Nginx 反向代理一起运行。你还通过 Certbot 和 Let's Encrypt 使用 HTTPS 对其进行了保护。