本页内容

  • 准备工作
  • 安装依赖
  • 配置 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 12 上使用 Nginx 反向代理安装 NodeBB 论坛

现在更新 Debian 软件包索引,并安装 MongoDB、Node.js、NPM、Nginx 和 Git。输入 Y 确认安装。

sudo apt update
sudo apt install mongodb-org nodejs npm git nginx

在 Debian 12 上使用 Nginx 反向代理安装 NodeBB 论坛

安装完成后,使用以下命令重新加载 systemd 管理器:

sudo systemctl daemon-reload

现在运行以下命令来启动、设置开机自启并查看 MongoDB 服务状态。

sudo systemctl enable --now mongod
sudo systemctl status mongod

以下输出表明 MongoDB 正在运行。

在 Debian 12 上使用 Nginx 反向代理安装 NodeBB 论坛

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

sudo systemctl is-enabled nginx
sudo systemctl status nginx

在 Debian 12 上使用 Nginx 反向代理安装 NodeBB 论坛

最后,使用以下命令检查 Node.js 和 NPM 的版本:

sudo node-v
sudo npm -v

如下图所示,已安装 Node.js 18 和 NPM 9。

在 Debian 12 上使用 Nginx 反向代理安装 NodeBB 论坛

配置 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。

在 Debian 12 上使用 Nginx 反向代理安装 NodeBB 论坛

接下来,使用 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' 数据库。

在 Debian 12 上使用 Nginx 反向代理安装 NodeBB 论坛

安装 NodeBB

完成 MongoDB 配置后,你将下载并安装 NodeBB。你需要为 NodeBB 创建一个专用用户,下载并安装 NodeBB 依赖项,然后为 NodeBB 安装设置服务文件。

使用以下命令添加一个新的系统用户 'nodebb',默认主目录为 '/opt/nodebb':

sudo adduser --system --no-create-home --home=/opt/nodebb --group nodebb

在 Debian 12 上使用 Nginx 反向代理安装 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 的命令。

在 Debian 12 上使用 Nginx 反向代理安装 NodeBB 论坛

接下来,执行以下命令来启动或停止 NodeBB。当你需要手动启动或停止 NodeBB 时可以使用这些命令。

sudo su -s /bin/bash -c "./nodebb start" nodebb
sudo su -s /bin/bash -c "./nodebb stop" nodebb

在 Debian 12 上使用 Nginx 反向代理安装 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 服务在后台运行。

在 Debian 12 上使用 Nginx 反向代理安装 NodeBB 论坛

配置 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' 的输出。

在 Debian 12 上使用 Nginx 反向代理安装 NodeBB 论坛

最后,运行以下命令重启 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 默认首页:

在 Debian 12 上使用 Nginx 反向代理安装 NodeBB 论坛

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

在 Debian 12 上使用 Nginx 反向代理安装 NodeBB 论坛

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

在 Debian 12 上使用 Nginx 反向代理安装 NodeBB 论坛

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

在 Debian 12 上使用 Nginx 反向代理安装 NodeBB 论坛

总结

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