如何在 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 root@154.9.227.239 回车后,首次需要输入 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:NodeBBPassword@127.0.0.1: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 user@howtoforge.local -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

相关推荐
gallonyin9 分钟前
Linux Docker环境中解决中文字体乱码问题完整指南
linux·运维·docker
简 洁 冬冬11 分钟前
scp命令
linux
qq_3344078120 分钟前
docker安装mysql8
linux·运维·mysql·docker·容器
A_New_World1 小时前
线程池、内存池 和 数据库连接池
linux·服务器·c++
运维小文1 小时前
TCP协议简单分析和握手挥手过程
服务器·网络·网络协议·tcp/ip·三次握手
呆呆在发呆.1 小时前
计组实验-Bomb Lab -2
java·服务器·前端
gywl1 小时前
计算机网络-应用层
服务器·网络·计算机网络
重生之我在VS写bug2 小时前
【操作系统1】一篇文章便可入门操作系统
linux·服务器·开发语言·jvm
伤心男孩拯救世界(Code King)2 小时前
【Linux】--- 进程的概念
linux
艾德金的溪2 小时前
ES(elasticsearch)端口漏洞处理
服务器·网络·elasticsearch