Ubuntu 18.04 部署开源BBS系统 NodeBB 教程

发布于 2018-08-21  2.37k 次阅读


NodeBB是一款基于Node.js的BBS系统。与Discuz之类的传统BBS系统相比,它具有能够即时通讯、用户交互非常友好等优势。不过,想要熟练折腾NodeBB的难度可不低,在入NodeBB这个大坑之前最好先三思。

(上周末刚部署完一个NodeBB论坛的我现在就在钻研NodeBB插件开发文档,并在后悔中。)

1.关于NodeBB

项目地址:https://github.com/NodeBB/NodeBB

官方文档:https://docs.nodebb.org

中文社区:https://community.nodebb-cn.org

2.系统要求

想要部署NodeBB,你的服务器必须满足以下条件:

  • 可用内存 > 512 MB

3.创建运行用户

建议使用一个非root用户来管理NodeBB进程。由于接下来的操作最好不要用root用户进行,我们先来创建这个运行用户。

adduser nodebb

输好密码并确认之后一路回车,就创建好一个名为nodebb的用户了。

nodebb用户一个sudo权限之后切换到这个用户,接下来的操作将用nodebb用户进行。

usermod -aG sudo nodebb
su nodebb

4.安装并配置依赖

4.1.安装Node.js

我们还是使用NodeSource编译的源来安装Node.js。

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

4.2.安装MongoDB

NodeBB支持使用Redis和MongoDB这两种数据库。个人推荐使用MongoDB,更省资源。

首先先导入这个公钥。

sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 9DA31620334BD75D9DCB49F368818C72E52529D4

然后创建一个列表文件。(注意:命令里面的ubuntu bionic是Ubuntu 18.04的版本代号,如果你用的不是这个版本,请把它换成相应的版本代号,否则将不会安装MongoDB服务。)

echo "deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu bionic/mongodb-org/4.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-4.0.list

搞定之后就能安装MongoDB了。

sudo apt update
sudo apt install mongodb-org -y

安装完毕之后启动MongoDB服务,并查看一下是否运行正常。

sudo service mongod start
sudo service mongod status

服务运行正常的话就让这个服务开机启动。

sudo systemctl enable mongod

4.3.配置MongoDB

输入这条命令进入MongoDB数据库命令行。

mongo

在给NodeBB创建数据库之前,先要添加一个管理员数据库和管理员用户。首先进入管理员数据库。

use admin

进入管理员数据库后创建一个管理员用户。创建管理员用户的命令是:

db.createUser( { user: "admin", pwd: "(密码)", roles: [ { role: "readWriteAnyDatabase", db: "admin" }, { role: "userAdminAnyDatabase", db: "admin" } ] } )

然后进入nodebb数据库。

use nodebb

创建一个具有读写nodebb数据库权限的用户。

db.createUser( { user: "nodebb", pwd: "(密码)", roles: [ "readWrite" ] } )

创建完后按CTRL+C退出数据库命令行。

4.4.启用MongoDB权限认证(可选)

安全起见最好启用MongoDB的权限认证,不过启用了权限认证之后NodeBB的有些功能会受影响,请自行决定是否启动权限认证。

  点击这里☆查看更多  

4.5.其他依赖

差点忘了还有这两样东西没有安装。直接使用apt安装即可。

sudo apt install git build-essential -y

5.部署NodeBB

创建一个NodeBB安装目录并进入该目录,然后通过git获取最新版NodeBB程序到nodebb文件夹。

sudo mkdir /var/www && cd /var/www
sudo git clone -b v1.10.x https://github.com/NodeBB/NodeBB.git nodebb

进入nodebb文件夹并运行配置脚本。

cd nodebb
sudo ./nodebb setup

当脚本输出以下内容时NodeBB就基本部署完毕了。

Welcome to NodeBB v1.10.1!

This looks like a new installation, so you'll have to answer a few questions about your environment before we can proceed.

Press enter to accept the default setting (shown in brackets).

URL used to access this NodeBB (http://localhost:4567)

现在先按CTRL+C退出配置脚本,剩下的配置可以在Web版的配置向导里面进行。

6.配置Nginx反向代理

我们依旧用Ondřej Surý大佬的PPA来安装Nginx。

sudo apt install software-properties-common -y
sudo add-apt-repository ppa:ondrej/nginx-mainline
sudo apt update
sudo apt install nginx -y

安装完毕之后创建一个配置文件。

sudo vim /etc/nginx/conf.d/nodebb.conf

配置文件的格式大致如下,注意把example.com换成你自己的域名,并修改SSL证书与密钥的路径。

upstream backend {
  server 127.0.0.1:4567;
}

server {
    listen 443;
    server_name example.com;

    error_log /var/log/nginx/nodebb.access.log;

    ssl on;
    ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;

    location / {
        proxy_pass http://backend/;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_set_header Host $http_host;

        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forward-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forward-Proto http;
        proxy_set_header X-Nginx-Proxy true;

        proxy_redirect off;
    }
}

server {
    listen 80;
    server_name example.com;
    return 301 https://example.com$request_uri;
}

保存完配置文件后测试下配置文件并重启Nginx服务。

sudo nginx -t
sudo service nginx restart

7.创建NodeBB服务

创建一个NodeBB服务可以让它开机自启。

在创建服务之前,先得把NodeBB所在的文件夹所有权转移给nodebb用户与nodebb用户组。

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

搞定好了就能创建NodeBB服务了。

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

NodeBB服务的格式基本如下。

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

[Service]
Type=simple
User=nodebb

StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=nodebb

Environment=NODE_ENV=production
WorkingDirectory=/var/www/nodebb
ExecStart=/usr/bin/node loader.js --no-daemon --no-silent
Restart=always

[Install]
WantedBy=multi-user.target

保存完服务文件之后先启动服务并查看一下运行状态。

sudo service nodebb start
sudo service nodebb status

运行正常的话就可以让它开机自启了。

sudo systemctl enable nodebb

8.完成部署

由于之前已经做好了反向代理,并且NodeBB服务也已经启动了,现在就可以直接访问你给你的NodeBB论坛解析的域名进入Web版安装向导,继续未完成的安装了。

URL与管理员用户的设置不用多说。不过这里的URL必须设置为http://example.com:4567这样的格式(请把example.com换成自己的域名)。

数据库选择MongoDB,用户名、密码、使用的数据库根据实际情况填写,其他的保持默认即可。

信息填写完毕,点击Install NodeBB来完成NodeBB的部署。等待一分钟,一个全新的NodeBB论坛就正式部署完毕了。

9.个人吐槽

部署完NodeBB只是代表着折腾的开始。正如文章开头所说,目前我正在折腾NodeBB插件,并在痛苦中。(毕竟我之前根本没有开发过Node.js。)(っ °Д °;)っ

不过我倒不讨厌折腾,因为这样也是蛮有意思的。( •̀ ω •́ )