开源论坛软件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_16.x | sudo -E bash -
sudo apt-get install -y nodejs

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

node -v (should output "v16.15.0" or similar)
npm -v (should output "6.14" 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 配置文件进行编辑附加以下代码。但进行这一步后出错,因此忽略跳过。

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 v2.1.0 https://github.com/NodeBB/NodeBB.git .

在这里,我们克隆了 NodeBB 的 v2.1.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

发表评论

您的电子邮箱地址不会被公开。