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

news2024/12/17 18:13:03

简介

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

创建雨云服务器

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

  • 点击 云产品云服务器立即购买
  • 选择距离你较近的区域,以保证低延迟。

img

  • 按照自己需求选择配置,选择Ubuntu 22.04 版本,按照自己需求是否预装Docker。
  • 最后按照提示进行购买。
  • 购买后等待机器部署完毕,点击刚刚创建好的服务器,进入管理面板,找到远程连接相关信息。

img

  • 我们使用 PowerShell 进行 SSH 远程连接到服务器,Win+R 打开运行窗口,输入 powershell 后点击确定。

img

  • 输入 ssh root@你的服务器IP 例如 ssh root@154.9.227.239 回车后,首次需要输入 yes,再次回车后即可登录服务器。

img

  • 到此为止,我们的云服务器就远程连接上了。

开始部署

安装 MongoDB 服务器

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

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

sudo apt install gnupg curl

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

curl -fsSL https://www.mongodb.org/static/pgp/server-7.0.asc |
sudo gpg -o /usr/share/keyrings/mongodb-server-7.0.gpg
--dearmor
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

img

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

sudo apt update
sudo apt install mongodb-org

img

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

sudo systemctl daemon-reload

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

sudo systemctl enable --now mongod
sudo systemctl status mongod

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

img

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

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

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

mongosh

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

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

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

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

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

quit()

img

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

sudo nano /etc/mongod.conf

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

security:
  authorization: enabled

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

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

sudo systemctl restart mongod

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

mongosh "mongodb://127.0.0.1:27017" --username nodebb --authenticationDatabase nodebb

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

db.runCommand( { connectionStatus: 1, showPrivileges: false } )

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

键入 quit() 以退出 MongoDB shell。

img

安装 NodeBB

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

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

sudo apt install nodejs npm

img

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

node --version
npm --version

img

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

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

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

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

img

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

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

img

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

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

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

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

img

以 systemd 服务运行 NodeBB

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

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

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 管理器并应用你的更改。

sudo systemctl daemon-reload

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

sudo systemctl enable --now nodebb
sudo systemctl status nodebb

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

img

将 Nginx 设置为反向代理

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

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

sudo apt install nginx -y

img

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

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

sudo ln -s /etc/nginx/sites-available/nodebb /etc/nginx/sites-enabled/
sudo nginx -t

img

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

sudo systemctl restart nginx
sudo systemctl status nginx

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

img

使用 HTTPS 保护 NodeBB

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

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

sudo apt install certbot python3-certbot-nginx -y

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

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 的默认主页,如下所示:

img

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

img

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

img

结论

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

相关链接
雨云 - 新一代云服务提供商: https://rainyun.ivwv.site
我的博客:https://blog.ivwv.site

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2261193.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【UE5 C++课程系列笔记】09——多播委托的基本使用

目录 多播委托——申明委托 一、DECLARE_MULTICAST_DELEGATE 二、DECLARE_DYNAMIC_MULTICAST_DELEGATE 多播委托——绑定委托 一、Add 二、AddStatic 三、AddRaw 四、AddSP 五、AddUObject 六、Remove 七、RemoveAll 多播委托——执行 上一篇&#xff1a;【UE5 C课程…

车牌识别OCR授权:助力国产化升级,全面提升道路监控效率

政策背景&#xff1a;国产化升级&#xff0c;推动道路监控产业转型 随着国家对信息安全的重视&#xff0c;国内各大公安、政企机构已进入全面升级国产化平台的实施阶段。根据最新的政策要求&#xff0c;公安和政府部门必须在未来三年内完成平台的国产化替换工作。这一举措不仅…

无人机推流直播平台EasyDSS视频技术如何助力冬季森林防火

冬季天干物燥&#xff0c;大风天气频繁&#xff0c;是森林火灾的高发期。相比传统的人力巡查&#xff0c;无人机具有更高的灵敏度和准确性&#xff0c;尤其在夜间或浓雾天气中&#xff0c;依然能有效地监测潜在火源。 无人机可以提供高空视角和实时图像传输&#xff0c;帮助巡…

linux下查看nginx的安装路径

一般会安装在默认位置下&#xff1a;/usr/local/openresty/nginx 或/usr/local/nginx 查看nginx运行进程&#xff0c;mast process 后面一般是nginx 的安装目录 ps -aux|grep nginx执行ls -l /proc/进程号/exe 会打印出安装/运行位置 ps -aux|grep nginx ls -l /proc/进程号/ex…

Python随机抽取Excel数据并在处理后整合为一个文件

本文介绍基于Python语言&#xff0c;针对一个文件夹下大量的Excel表格文件&#xff0c;基于其中每一个文件&#xff0c;随机从其中选取一部分数据&#xff0c;并将全部文件中随机获取的数据合并为一个新的Excel表格文件的方法。 首先&#xff0c;我们来明确一下本文的具体需求。…

网络基础 - TCP/IP 五层模型

文章目录 一、OSI 参考模型中各个分层的作用1、应用层2、表示层3、会话层4、传输层5、网络层6、数据链路层7、物理层 二、OSI 参考模型通信处理示例三、TCP/IP1、定义2、规范 - RFC(Request For Comment) 一、OSI 参考模型中各个分层的作用 1、应用层 2、表示层 负责设备固有数…

探索Web3:从去中心化应用到全球数字化未来

Web3 是互联网发展的下一步&#xff0c;它通过去中心化的理念重新定义了数字世界。与传统的Web2相比&#xff0c;Web3将数据主权交还给用户&#xff0c;让每个人都可以在没有中介的情况下安全地交换信息和价值。本文将探索Web3的基本概念&#xff0c;去中心化应用&#xff08;D…

pydub AudioSegment实现音频重采样 - python 实现

DataBall 助力快速掌握数据集的信息和使用方式&#xff0c;会员享有 百种数据集&#xff0c;持续增加中。 需要更多数据资源和技术解决方案&#xff0c;知识星球&#xff1a; “DataBall - X 数据球(free)” -------------------------------------------------------------…

uniapp/HBuilder X引入weex报错weex is not defined

出现错误&#xff1a; ‍[⁠ReferenceError⁠]‍ {message: "weex is not defined"} 在www.iconfont.cn把想要的图标放进个人项目中并且下载css文件&#xff1a; 进入HBuilder自己创建的项目中添加一个目录common&#xff0c;添加一个文件free-icon.css 把刚才下载…

音频进阶学习八——傅里叶变换的介绍

文章目录 前言一、傅里叶变换1.傅里叶变换的发展2.常见的傅里叶变换3.频域 二、欧拉公式1.实数、虚数、复数2.对虚数和复数的理解3.复平面4.复数和三角函数5.复数的运算6.欧拉公式 三、积分运算1.定积分2.不定积分3.基本的积分公式4.积分规则线性替换法分部积分法 5.定积分计算…

ActiveMQ 反序列化漏洞CVE-2015-5254复现

文章目录 一、产生原因二、利用条件三、利用过程四、PoC&#xff08;概念验证&#xff09;五、poc环境验证使用find搜索vulhub已安装目录打开activeMQ组件查看配置文件端口启动镜像-文件配置好后对于Docker 镜像下载问题及解决办法设置好镜像源地址&#xff0c;进行重启docker查…

主成分分析法大全(包括stata+matlab)

数据简介&#xff1a;主成分分析&#xff08;Principal Component Analysis&#xff0c;PCA&#xff09;&#xff0c; 是一种统计方法。通过正交变换将一组可能存在相关性的变量转换为一组线性不相关的变量&#xff0c;转换后的这组变量叫主成分。在实际课题中&#xff0c;为了…

qt中tr的使用

在 Qt 中使用 tr 函数对字符串进行翻译时&#xff0c;通常会通过 Qt Linguist 工具来处理翻译。以下是一个基本的步骤说明&#xff0c;展示如何将 QPushButton *btnnew QPushButton(tr("Hello World"),this); 翻译成其他语言&#xff0c;比如中文&#xff1a; 1.创建…

【Unity3D】报错libil2cpp.so找不到问题

mainTemplate.gradle文件末尾添加&#xff1a; **IL_CPP_BUILD_SETUP** 此报错发生在低版本的Unity升级到高版本后&#xff0c;例如Unity2019升级到Unity2021&#xff0c;而Unity2019默认创建的mainTemplate.gradle文件是不包含**IL_CPP_BUILD_SETUP** 因此会导致libil2cpp.so…

GLM4模型详解 - 智谱AI开源大模型全面解析

&#x1f4da; 2024年6月5日,智谱AI在开发者大会上正式开源GLM-4-9B系列大模型。本文将全面解析GLM4的技术特点、部署方案和应用场景。 GLM-4-9B 模型具备了更强大的推理性能、更长的上下文处理能力、多语言、多模态和 All Tools 等突出能力。 “All Tools” 一、模型概述 1.…

嵌入式驱动开发详解17(CAN驱动开发)

文章目录 前言CAN简介CAN收发器CAN协议讲解电气特性传输协议数据帧遥控帧错误帧过载帧帧间隔 同步矫正 CAN控制器CAN控制器模式CAN接收器CAN波特率 CAN设备树分析CAN测试后续参考文献 前言 该专栏主要是讲解嵌入式相关的驱动开发&#xff0c;但是由于部分模块的驱动框架过于复…

【Qt】qt安装

在工作一年之后&#xff0c;还是想做一个Qt的教程&#xff0c;遥想研一刚刚接触Qt&#xff0c;从0到1学习&#xff0c;没有什么参考书籍&#xff0c;网上的资料也不多&#xff0c;幸好Qt官方文档写得好&#xff0c;加上自己肯研究&#xff0c;才堪堪入门。 现在我想自己写一个…

Scala学习记录

dao --------> 数据访问 mode ------> 模型 service ---->业务逻辑 Main -------> UI:用户直接操作&#xff0c;调用Service 改造UI层&#xff1a;

FPGA 17 ,FPGA 与 SR-IOV虚拟化技术,高性能计算与虚拟化技术的结合(FPGA 与 SR-IOV 和 PCI,高性能计算与虚拟化的完美融合)

目录 前言 一. SR-IOV 的起源与发展 1. SR-IOV 的起源与时间线 2. SR-IOV 的诞生原因 3. SR-IOV 的详细介绍 二. SR-IOV 和 PCI 之间的关系 三. PCI 的起源与演进 1. PCI 的起源与时间线 2. PCI 的关键特性 四. FPGA 的独特魅力 1. FPGA 的定义与特性 2. FPGA 的内…

Spring Security 6 系列之二 - 基于数据库的用户认证和认证原理

之所以想写这一系列&#xff0c;是因为之前工作过程中使用Spring Security&#xff0c;但当时基于spring-boot 2.3.x&#xff0c;其默认的Spring Security是5.3.x。之后新项目升级到了spring-boot 3.3.0&#xff0c;结果一看Spring Security也升级为6.3.0&#xff0c;关键是其风…