如何在 Ubuntu 上安装 NodeBB 并使用 Nginx 反向代理

简介

NodeBB 是一款基于 Node.js 的开源论坛软件,为在线社区提供了现代化和响应式的解决方案。在 Ubuntu Linux 上运行的 NodeBB 利用了操作系统的强大性和灵活性,以提供高性能和可扩展性。它结合了 MongoDB 或 Redis 进行数据库管理,使其能够高效地处理大量的用户生成内容。NodeBB 以其实时通知、与各种社交媒体平台的无缝集成以及广泛的插件生态系统而闻名,允许管理员自定义他们的论坛以满足特定需求。此外,其移动优先的设计确保了在所有设备上一致且引人入胜的用户体验。Ubuntu 的稳定性和安全功能与 NodeBB 相得益彰,使其成为托管和管理动态在线社区的理想选择。

在本指南中,你将学习如何在 Ubuntu 22.04 服务器上安装 NodeBB,并使用 MongoDB 数据库和 Nginx Web 服务器。你还将学习如何通过 Certbot 和 Letsencrypt 使用 HTTPS 来保护 NodeBB。

接下来,我将一步一步教大家如何进行安装和部署!!

准备工作

服务器准备

必要前提:

  • 一个充满求知欲的大脑。
  • 一台 Linux 服务器(推荐腾讯云、阿里云或雨云等)。
  • 指向服务器 IP 地址的域名。(可选)

我将以 雨云 为例,带大家创建一台自己的云服务器,以便学习本篇文章的内容。

注册链接: https://rainyun.ivwv.site

创建雨云服务器

以下步骤仅供参考,请根据实际需求选择配置。

  • 点击 云产品云服务器立即购买
  • 选择距离你较近的区域,以保证低延迟。
  • 按照自己需求选择配置,选择Ubuntu 22.04 版本,按照自己需求是否预装Docker。
  • 最后按照提示进行购买。
  • 购买后等待机器部署完毕,点击刚刚创建好的服务器,进入管理面板,找到远程连接相关信息。
  • 我们使用 PowerShell 进行 SSH 远程连接到服务器,Win+R 打开运行窗口,输入 powershell 后点击确定。
  • 输入 ssh root@你的服务器IP 例如 ssh [email protected] 回车后,首次需要输入 yes,再次回车后即可登录服务器。
  • 到此为止,我们的云服务器就远程连接上了。

开始部署

安装 MongoDB 服务器

NodeBB 使用 Node.js 编写,并使用 MongoDB 作为数据库。要安装 NodeBB,你必须在系统上安装 MongoDB 服务器。在本节中,你将在 Ubuntu 22.04 服务器上安装 MongoDB 服务器 7。

首先,运行以下命令将 gnupg 和 curl 软件包安装到你的 Ubuntu 系统。

bash 复制代码
sudo apt install gnupg curl

现在,使用以下命令添加 MongoDB 的 GPG 密钥和存储库。目前,MongoDB 7.0 仅适用于 Ubuntu 22.04 及以下版本,因此我们将在 Ubuntu 22.04 服务器上使用它。

bash 复制代码
curl -fsSL https://www.mongodb.org/static/pgp/server-7.0.asc |
sudo gpg -o /usr/share/keyrings/mongodb-server-7.0.gpg
--dearmor
bash 复制代码
echo "deb [ arch=amd64,arm64 signed-by=/usr/share/keyrings/mongodb-server-7.0.gpg ] https://repo.mongodb.org/apt/ubuntu jammy/mongodb-org/7.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-7.0.list

接下来,运行以下 apt 命令以更新 Ubuntu 软件包索引并安装 mongodb-org 软件包。输入 Y 以确认安装。

bash 复制代码
sudo apt update
sudo apt install mongodb-org

安装完成后,运行以下 systemctl 命令以重新加载 systemd 管理器。这是因为新的服务文件 mongod 已添加到你的系统中。

bash 复制代码
sudo systemctl daemon-reload

现在,运行以下 systemctl 命令来启动并启用 MongoDB mongod 服务。然后,检查其状态以确保 mongod 服务正在运行。

bash 复制代码
sudo systemctl enable --now mongod
sudo systemctl status mongod

如下所示,mongod 服务已启用并正在运行。

为 NodeBB 设置 MongoDB 服务器和数据库

安装 MongoDB 服务器后,你将在 MongoDB 上启用身份验证,创建一个管理员用户,然后为 NodeBB 安装创建一个新用户和数据库。

使用以下 mongosh 客户端命令登录到 MongoDB shell。

bash 复制代码
mongosh

在 mongosh shell 上,切换到 admin 数据库并为 MongoDB 创建一个新的管理员用户。在此示例中,你将创建一个 MongoDB 用户 admin ,密码为 MongoDBAdminPass。请务必使用你的信息更改用户详细信息。

bash 复制代码
use admin
db.createUser( { user: "admin", pwd: "MongoDBAdminPass", roles: [ { role: "root", db: "admin" } ] } )

之后,切换并创建数据库 nodebb,然后创建新用户 nodebb ,密码为 NodeBBPassword。数据库和用户 nodebb 将用于 NodeBB 安装。

bash 复制代码
use nodebb
db.createUser( { user: "nodebb", pwd: "NodeBBPassword", roles: [ { role: "readWrite", db: "nodebb" }, { role: "clusterMonitor", db: "admin" } ] } )

现在键入 quit() 以退出 mongosh shell。

bash 复制代码
quit()

接下来,使用以下 nano 编辑器打开默认的 MongoDB 配置 /etc/mongod.conf

bash 复制代码
sudo nano /etc/mongod.conf

取消注释 security 选项,并将 authorization 更改为 enabled。这将在你的 MongoDB 服务器上启用身份验证。

复制代码
security:
  authorization: enabled

完成后,保存文件并退出编辑器。

现在,运行以下 systemctl 命令来重新启动 mongod 服务并应用你的更改。重新启动 mongod 服务后,将启用 MongoDB 身份验证。

bash 复制代码
sudo systemctl restart mongod

运行以下 mongosh 命令,以用户 nodedbb 的身份连接到数据库 nodebb。出现提示时,输入你的密码。

bash 复制代码
mongosh "mongodb://127.0.0.1:27017" --username nodebb --authenticationDatabase nodebb

现在运行以下查询以检查与 MongoDB 服务器的连接。

bash 复制代码
db.runCommand( { connectionStatus: 1, showPrivileges: false } )

如下所示,你已作为用户 nodebb 身份验证到数据库 nodebb。

键入 quit() 以退出 MongoDB shell。

安装 NodeBB

现在你已经配置了 MongoDB 服务器,你将通过官方 Ubuntu 存储库安装 Node.js,然后在你的 Ubuntu 系统上下载并安装 NodeBB。

在安装 NodeBB 之前,运行以下 apt 命令将 Node.js 和 NPM 软件包安装到你的 Ubuntu 系统。输入 Y 以确认安装。

bash 复制代码
sudo apt install nodejs npm

安装完成后,使用以下命令检查 Node.js 和 NPM 版本 - 你可以看到已安装 Node.js 18 和 NPM 9。

bash 复制代码
node --version
npm --version

现在,运行以下命令创建一个新的系统用户和组 nodebb。此用户将用于运行 NodeBB 安装。

bash 复制代码
sudo adduser --system --no-create-home --home=/opt/nodebb --group nodebb

运行以下 git 命令以下载 NodeBB 源代码到 /opt/nodebb 目录,然后将其所有权更改为用户 nodebb。

bash 复制代码
git clone -b v3.x <https://github.com/NodeBB/NodeBB.git> /opt/nodebb
sudo chown -R nodebb:nodebb /opt/nodebb

转到 /opt/nodebb 目录并执行 nodebb setup 命令以开始 NodeBB 安装。

bash 复制代码
cd /opt/nodebb
sudo su -s /bin/bash -c "./nodebb setup" nodebb

系统会询问你以下 NodeBB 配置:

  • 输入 NodeBB 的域名,例如 forum.howtoforge.local。
  • 在 NodeBB 密钥配置上按 ENTER。保持默认值。
  • 输入 no 以禁用对 NodeBB 的匿名访问。
  • 选择 MongoDB 作为数据库。
  • 输入你的 MongoDB 数据库详细信息,格式如 mongodb://nodebb:[email protected]:27017/nodebb
  • 输入 NodeBB 的新管理员用户和电子邮件地址。
  • 输入你的 NodeBB 管理员用户的密码并重复。

安装完成后,你将看到输出 NodeBB Setup Completed

要从命令行运行 NodeBB,请执行以下 nodebb start 命令:

bash 复制代码
sudo su -s /bin/bash -c "./nodebb start" nodebb

要设置 NodeBB 进程,请使用以下 nodebb stop 命令。

bash 复制代码
sudo su -s /bin/bash -c "./nodebb stop" nodebb

以 systemd 服务运行 NodeBB

在本指南中,你将以 systemd 服务在后台运行 NodeBB。因此,现在你将为 NodeBB 创建一个新的服务文件,这使得通过 systemctl 实用程序管理 NodeBB 服务更加容易。

使用以下 nano 编辑器创建新的 systemd 服务文件 /etc/systemd/system/nodebb.service

bash 复制代码
sudo nano /etc/systemd/system/nodebb.service

粘贴以下 NodeBB 服务文件。在此示例中,你将以 nodebb 用户身份运行 nodebb 服务。

复制代码
[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

完成后,保存文件并退出编辑器。

现在运行以下 systemctl 命令来重新加载 systemd 管理器并应用你的更改。

bash 复制代码
sudo systemctl daemon-reload

之后,使用以下命令启动、启用和验证 nodebb 服务。

bash 复制代码
sudo systemctl enable --now nodebb
sudo systemctl status nodebb

你可以在下面看到 nodebb 服务在后台作为 systemd 服务运行。

将 Nginx 设置为反向代理

在本教程中,你将使用 Nginx Web 服务器作为 NodeBB 的反向代理。因此,现在你将安装 Nginx,并为反向代理创建一个新的服务器块。请确保你的域名已指向服务器 IP 地址。

使用以下 apt install 命令将 Nginx Web 服务器安装到你的系统中。

bash 复制代码
sudo apt install nginx -y

安装完成后,使用 nano 编辑器创建新的服务器块配置 /etc/nginx/sites-available/nodebb

bash 复制代码
sudo nano /etc/nginx/sites-available/nodebb

插入以下配置,并确保将 forum.howtoforge.local 更改为你的域名。使用此配置,你将为在后台端口 4567 上运行的 NodeBB 设置反向代理。

复制代码
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 支持
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
  }
}

保存文件并退出编辑器。

现在,运行以下命令来激活服务器块文件 nodebb 并验证你的 Nginx 配置。如果你是正确的并且具有正确的 Nginx 配置,你将看到输出 syntax is ok - test is successful

bash 复制代码
sudo ln -s /etc/nginx/sites-available/nodebb /etc/nginx/sites-enabled/
sudo nginx -t

最后,运行以下 systemctl 命令来重新启动 Nginx 服务并应用你的更改。然后,检查 Nginx 服务状态以确保其正在运行。

bash 复制代码
sudo systemctl restart nginx
sudo systemctl status nginx

如下面的输出所示,Nginx 服务正在运行。

使用 HTTPS 保护 NodeBB

在本节中,你将通过 Certbot 和 Letsencrypt 使用 HTTPS 保护 NodeBB。结合 Certbot 和 Nginx,你可以在 Web 服务器上设置自动 HTTPS。

使用以下命令安装 certbot 和 python3-certbot-nginx 软件包:

bash 复制代码
sudo apt install certbot python3-certbot-nginx -y

现在,运行以下 certbot 命令来生成 SSL 证书并通过 HTTPS 保护你的 NodeBB 安装。请务必使用你的信息更改电子邮件地址和域名。

bash 复制代码
sudo certbot --nginx --agree-tos --redirect --hsts --staple-ocsp --email [email protected] -d forum.howtoforge.local

该过程完成后,你将在 /etc/letsencrypt/live/domain.com 目录中看到你的证书。并且你的 NodeBB 安装将自动使用 HTTPS 进行保护。

访问 NodeBB

使用 Web 浏览器打开你的 NodeBB 域名,例如 https://forum.howtoforge.local。如果安装成功,你将看到 NodeBB 的默认主页,如下所示:

单击 Login 链接,系统将提示你进入 NodeBB 登录页面。然后,输入你的管理员用户和密码,然后单击 Login 进行确认。如果你有正确的凭据,你将看到以下管理员仪表板。

在 NodeBB 管理员设置中,你将看到以下内容:

结论

你已在 Ubuntu 22.04 服务器上安装了开源论坛软件 NodeBB。你的 NodeBB 已使用 MongoDB 作为数据库和 Nginx 作为反向代理运行。你还通过 Certbot 和 Letsencrypt 使用 HTTPS 保护了 NodeBB。你现在可以添加 SMTP 服务器以通过电子邮件链接设置注册和确认。

相关链接

雨云 - 新一代云服务提供商: https://rainyun.ivwv.site

我的博客:https://blog.ivwv.site

相关推荐
小羊Linux客栈1 小时前
自动化:批量文件重命名
运维·人工智能·python·自动化·游戏程序
伤不起bb2 小时前
MySQL 高可用
linux·运维·数据库·mysql·安全·高可用
大大小小聪明4 小时前
Git合并多个提交方法详解
git·github
whgjjim4 小时前
docker迅雷自定义端口号、登录用户名密码
运维·docker·容器
tmacfrank5 小时前
网络编程中的直接内存与零拷贝
java·linux·网络
瀚高PG实验室7 小时前
连接指定数据库时提示not currently accepting connections
运维·数据库
QQ2740287567 小时前
Soundness Gitpod 部署教程
linux·运维·服务器·前端·chrome·web3
淡忘_cx7 小时前
【frp XTCP 穿透配置教程
运维
qwfys2008 小时前
How to configure Linux mint desktop
linux·desktop·configure·mint
南方以南_8 小时前
Ubuntu操作合集
linux·运维·ubuntu