开源论坛软件Nodebb 现代网络社区平台搭建教程

互联网上,听说论坛的诞生比博客、社交网络和智能手机还要早。创建这个论坛是为我们一个小圈子打造一个高质量的交流社区。我已经自由职业两年多了,自由职业不像上班每天会和许多人线下交流,更多时候会是一个人坐在办公电脑前边,因此,希望有更多像我这样的朋友加入交流。

我想应该很多人都想过不想要固定时间地上下班,想要更自由地随时随地工作就能赚钱,如果你曾经有过这个想法,那么也许你会在自由职业论坛上收获有用的东西,尽管现在里面的内容几乎没有。

无论你是网站站长,独立开发者,自媒体运营,UP主,AFFMan、搞网赚项目等这些灵活职业的朋友,还是普通平凡的工作者,欢迎你加入论坛,多多交流,分享不同的人生体验或经历。毕竟,分享快乐,快乐加倍!!你的故事,是怎样的呢?

介绍论坛的同时也记录下 Nodebb 如何搭建。

关于 Nodebb

Nodebb 是在Github上开源并收获12.7K赞的下一代论坛软件,一个更好的现代网络社区平台。它可让用户选择 “所见即所得”的编辑器或Markdown编辑器来撰写主题和回复,支持实时聊天,实时通知,标签主题,控制用户角色与权限,实时分析仪表盘,拖放小部件,许多拓展和插件功能。

开源论坛软件Nodebb 现代网络社区平台搭建教程

Nodebb 搭建步骤

本安装指南针对Ubuntu 20.04进行了优化,将以MongoDB作为数据库安装NodeBB。在整个过程中,我们假设并使用了完全打好补丁的LTS和相应的生产版本的软件。你也可以对照官方安装文档配合使用。

系统要求

内存:安装NodeBB的附属设备需要至少超过512 Mb的系统内存。如果你的Linux系统内存不足,建议启用虚拟内存交换分区来弥补。

配置防火墙

确保将要安装的是最新的。保持80、443端口开放。

sudo apt update && sudo apt upgrade
sudo ufw allow OpenSSH
sudo ufw allow 80
sudo ufw allow 443
sudo ufw enable
sudo ufw status  # 检查防火墙的状态

安装 Node.js

当然,NodeBB是由Node.js驱动的,所以它需要被安装。Node.js是一个快速发展的平台,因此建议安装当前的Node.js的LTS版本,以使未来的更新毫无障碍。Node.js LTS计划详细说明了LTS的发布时间表,包括预计的寿命结束时间。

Node.js可以从NodeSource Ubuntu二进制发布库中获得。

sudo apt install curl
curl -sL https://deb.nodesource.com/setup_lts.x | sudo -E bash -
sudo apt-get install -y nodejs

验证 Node.js 和 npm 的安装。你应该安装了Node.js的第18版,以及npm的第9版:

node -v   # (should output "v18.16.1" or similar)
npm -v  # (should output "9.5.1" or similar)

安装 MongoDB 数据库

MongoDB 是 NodeBB 的默认数据库。官方的详细安装说明可以在MongoDB手册中找到。以下是在 Ubuntu 上安装MongoDB的缩略版本。

wget -qO - https://www.mongodb.org/static/pgp/server-5.0.asc | sudo apt-key add -
echo "deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu focal/mongodb-org/5.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-5.0.list
sudo apt-get update
sudo apt-get install -y mongodb-org

验证 MongoDB 的安装:你应该可以看到输出了 5.0 以上版本。

mongod --version

启动 mongod 服务并验证服务状态:

sudo systemctl start mongod
sudo systemctl enable mongod
sudo systemctl status mongod

配置 MongoDB

一般的MongoDB管理是通过MongoDB Shell mongo完成的。MongoDB的默认安装在27017端口,可在本地访问:

mongo

切换到内置 admin 数据库:

> use admin

创建一个管理用户(与我们稍后要创建的 nodebb 用户不同)。用你自己设定的密码替换占位符<Enter a secure password>,请确保 < > 2个字符也被替换掉。密码建议字母+数字就好,特殊字符似乎会出问题。

> db.createUser( { user: "admin", pwd: "<Enter a secure password>", roles: [ { role: "root", db: "admin" } ] } )

这个用户的范围是管理数据库,一旦启用授权就可以管理MongoDB。

admin 启用授权后,此用户的范围仅限于管理 MongoDB 的数据库。

添加一个名为 nodebb 的新数据库。

> use nodebb

创建 nodebb 用户来管理 nodebb 数据库。

> db.createUser( { user: "nodebb", pwd: "<Enter a secure password>", roles: [ { role: "readWrite", db: "nodebb" }, { role: "clusterMonitor", db: "admin" } ] } )

读写权限允许NodeBB存储和检索nodebb 数据库中的数据。clusterMonitor权限允许NodeBB以只读方式查询数据库服务器的统计数据,然后在NodeBB管理控制面板(ACP)中显示。

退出 Mongo Shell:

> quit()

官方安装指南中:打开 MongoDB 配置文件 /etc/mongod.conf 进行编辑附加以下代码。但进行这一步后出错,因此忽略跳过。

security:
  authorization: enabled

重新启动 MongoDB 并验证之前创建的管理用户可以连接:

sudo systemctl restart mongod
mongo -u admin -p your_password --authenticationDatabase=admin

安装 Nodebb

首先,我们必须安装 git,因为它用于分发 NodeBB:

sudo apt-get install -y git

像 git和 ./nodebb 这样的命令不应该以root权限(sudo或高等级权限)来使用。它将导致NodeBB需要访问的文件的不同所有权问题。

不建议以 root 用户身份运行 NodeBB,因此创建一个非特权用户。

sudo adduser nodebb

设置此用户密码并跳过其他选项。

创建 NodeBB 论坛所在的目录。

sudo mkdir -p /var/www/nodebb

将文件夹的所有权更改为新创建的用户。

sudo chown -R nodebb:nodebb /var/www/nodebb

登录到新创建的用户。

su nodebb

切换到 NodeBB 安装目录。

cd /var/www/nodebb

要安装 NodeBB,首先我们需要克隆它的 Github 存储库。

将 NodeBB 克隆到该 /var/www/nodebb 目录。命令末尾的点表示当前目录。

git clone -b v3.2.0 https://github.com/NodeBB/NodeBB.git .

在这里,我们克隆了 NodeBB 的 v3.2.0,它是编写本教程时最新的稳定版本。你可以从 NodeBB 的最新版本页面 中找到最新的稳定分支。

NodeBB 附带一个命令行实用程序。使用以下命令安装 NodeBB :

./nodebb setup

将提示一系列问题,括号中为默认值。默认设置是本地服务器在默认端口 4567 上侦听,MongoDB 实例在端口上侦听27017。当提示输入 mongodb 用户名和密码时,输入nodebb和你之前配置的密码。

开源论坛软件 Nodebb 搭建安装教程

确认与数据库的连接后,安装程序将提示初始用户安装程序正在运行。由于这是一个全新的 NodeBB 安装,因此必须配置论坛管理员。输入所需的管理员信息。

开源论坛软件 Nodebb 搭建安装教程 - 配置论坛管理员

在 nodebb 目录的根目录下会创建一个配置文件 config.json如果你需要进行更改,例如更改数据库位置或用于访问数据库的凭据,则可以修改此文件。

最后,你可以使用 cli 实用程序启动 NodeBB:

./nodebb start

到这里,如果你服务器上的相应端口已开放,那么你已经可通过http://<yourserverip或yourdomain>:4567 访问.

退出 NodeBB 用户。

exit

安装 Nginx 并配置反向代理

sudo apt-get install -y nginx

验证Nginx的安装

nginx -v

启动并启用开机自启动 Nginx。

sudo systemctl start nginx
sudo systemctl enable nginx
sudo systemctl status nginx

配置Nginx

cd /etc/nginx/sites-available
sudo vi 4ziu.com # 进入文件写入如下相应配置后保存
cd ../sites-enabled
sudo ln -s ../sites-available/4ziu.com

下面是在 4567 端口上运行的 NodeBB 的示例配置。

server {
    listen 80;
    listen [::]:80;

    server_name www.4ziu.com 4ziu.com;

     location ^~ /.well-known/ {
     default_type "text/plain";
     allow all;
     root /var/www/4ziu.com-ssl;
}

     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";
    }
}

完成后,验证 Nginx 配置是否正确。对 Nginx 配置进行更改后,您必须重新加载服务才能使更改生效:

sudo nginx -t
sudo systemctl reload nginx

如果域名解析已生效,那么你可以通过域名打开网站了。

将 NodeBB 作为系统服务运行

系统重启后 NodeBB 服务将无法运行。为了避免每次都启动 NodeBB,我们需要将其安装为系统服务。

先停止NodeBB服务。

cd /var/www/nodebb
./nodebb stop

运行以下命令来创建和编辑nodebb.service systemd 单元配置文件。

sudo vi /etc/systemd/system/nodebb.service

将以下代码粘贴到编辑器中。

[Unit]
Description=NodeBB
Documentation=https://docs.nodebb.org
After=system.slice multi-user.target mongod.service

[Service]
Type=forking
User=nodebb

StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=nodebb

Environment=NODE_ENV=production
WorkingDirectory=/var/www/nodebb
PIDFile=/var/www/nodebb/pidfile
ExecStart=/usr/bin/env node loader.js
Restart=always

[Install]
WantedBy=multi-user.target

根据需要替换你的用户名 (nodebb) 和 NodeBB 的路径。在这里我选择了在之前的步骤中创建的用户名 nodebb 以及我们选择在其中安装 NodeBB 的路径。

启用自启动 NodeBB 服务。

sudo systemctl enable nodebb
sudo systemctl start nodebb
sudo systemctl status nodebb

可通过执行以下操作启动和停止 NodeBB:

systemctl start nodebb
systemctl stop nodebb

为论坛配置HTTPS访问

使用 HTTPS 保护您的 NodeBB 论坛是保护站点流量的必要步骤。在本教程中,使用 acme.sh 脚本生成论坛网站的 SSL证书,并手动配置Nginx。

sudo -i
mkdir -p /var/www/4ziu.com-ssl
chmod a+r /var/www/4ziu.com-ssl

curl https://get.acme.sh | sh -s email=my@example.com
~/.acme.sh/acme.sh --set-default-ca --server letsencrypt
~/.acme.sh/acme.sh --issue -d 4ziu.com -d www.4ziu.com -w /var/www/4ziu.com-ssl

成功获取SSL证书后,编辑/etc/nginx/sites-enabled/4ziu.com 文件,写入最终的nginx配置:

server {
    listen 80;
    listen [::]:80;

    server_name www.4ziu.com 4ziu.com;
     location ^~ /.well-known/ {
     default_type "text/plain";
     allow all;
     root /var/www/4ziu.com-ssl;
}

    return 301 https://www.4ziu.com$request_uri;

    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";
    }
}

server
    {
       listen 443 ssl http2;
       listen [::]:443 ssl http2;

       server_name www.4ziu.com 4ziu.com;
	location ^~ /.well-known/ {
	default_type "text/plain";
	allow all;
        root /var/www/4ziu.com-ssl;
}
       if ($host = '4ziu.com') {
  return 301 https://www.4ziu.com$request_uri;
}

    ssl_certificate /etc/nginx/certs/fullchain.cer;
    ssl_certificate_key /etc/nginx/certs/4ziu.com.key;
	ssl_session_timeout 5m;
    ssl_protocols TLSv1.2 TLSv1.3;

    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";
    }
}

必须使用以下命令将生成的证书复制到证书文件的存储目录,请勿使用~/.acme.sh/文件夹中的证书文件,它们仅供内部使用,文件夹结构将来可能会更改。

mkdir /etc/nginx/certs

~/.acme.sh/acme.sh --install-cert -d 4ziu.com \
--key-file       /etc/nginx/certs/4ziu.com.key   \
--fullchain-file  /etc/nginx/certs/fullchain.cer \
--reloadcmd     "service nginx force-reload"

至此,已经完成Nodebb 开源程序论坛搭建啦!如果你也有兴趣,欢迎注册加入4ziu.com

Nodebb 升级

NodeBB 的定期发布位于 Github Releases中。这些版本包含了通常被认为是最无缺陷的代码,并被设计用于NodeBB 的生产级实例。

你可以利用 git 来安装特定版本的NodeBB,并在新版本发布后定期升级。

为了获得最新的修正和功能,你也可以直接从版本库(主分支)中 git clone 最新的版本,尽管它的稳定性不能得到保证。核心开发人员将试图确保每一次提交都会产生一个可以工作的客户端,即使个别功能可能不是100%完整。

一如既往,NodeBB 团队不对任何意外事故、数据丢失、数据损坏或由于升级失败而可能出现的任何其他不良情况负责 — 所以请不要忘记在开始之前进行备份!

升级步骤

关闭你的论坛

虽然可以在运行时升级 NodeBB,但绝对不建议这样做,特别是一个活跃的论坛:

sudo systemctl stop nodebb

备份论坛数据

完成完整 MongoDB 的备份,将以下代码中的yourpassword 替换成你设置的密码,然后运行代码:

cd /var/www/nodebb
mongodump -u nodebb -p yourpassword --authenticationDatabase=nodebb -d nodebb
sudo systemctl stop mongod # 先关闭数据库

这将创建一个可以使用 mongorestore 命令恢复的目录结构。

上传的图片和文件被存储在 /public/uploads。如果论坛不使用图床,你还需要随时备份这个文件夹。

cd /var/www/nodebb/public
tar -czf ~/nodebb_assets.tar.gz ./uploads

获取最新稳定代码

在升级NodeBB之前,请确保你有所需的nodejs版本。NodeBB支持nodejs的最新稳定版本。(v12, v14, v16等) 要升级nodejs,请运行

curl -sL https://deb.nodesource.com/setup_lts.x | sudo -E bash -
sudo apt-get install -y nodejs

如果你要从一个较低的分支升级到一个较高的分支,请根据需要切换分支。确保你当前分支的 Nodebb 是最新的!

例如,如果从升级 v1.19.8 到 v2.2.2:

cd /var/www/nodebb
su nodebb
git fetch  # 从NodeBB资源库中抓取最新代码
git checkout v2.x
git reset --hard origin/v2.x

如果不是在不同的分支之间升级:如 v2.2.1 到 v2.2.2,只需运行以下命令:

cd /var/www/nodebb
su nodebb
git fetch
git reset --hard origin/v2.x

运行nodebb 升级脚本

此脚本将安装任何缺少的依赖项,升级任何插件或主题(如果升级可用),并在必要时迁移数据库。

./nodebb upgrade

到这里 Nodebb 论坛升级完成!

重新启动数据库和Nodebb

exit
sudo systemctl start mongod
sudo systemctl start nodebb

启动完成后就可以重新访问论坛了。

备份与恢复

如果你有做前面提到的备份论坛数据的操作,那么MongoDB 数据库备份与恢复是很简单的。在新的VPS上重头开始搭建Nodebb程序,完成后,将备份好的/var/www/nodebb/dump 文件夹复制到新的VPS /var/www/nodebb 路径下。将以下命令的yourpassword 替换成你对应的数据库密码,执行恢复命令:

systemctl stop nodebb
cd /var/www/nodebb
mongodump -u nodebb -p yourpassword --authenticationDatabase=nodebb -d nodebb
systemctl start nodebb

执行第三条命令时,反馈出XXXXX document(s) restored successfully. 0 document(s) failed to restore. 即证明恢复成功。重启 nodebb 就可以继续使用论坛!

1人评论了“开源论坛软件Nodebb 现代网络社区平台搭建教程”

发表评论

您的电子邮箱地址不会被公开。 必填项已用 * 标注

滚动至顶部