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

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


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用户进行,我们先来创建这个运行用户。

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
adduser nodebb
adduser nodebb
adduser nodebb

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

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

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
usermod -aG sudo nodebb
su nodebb
usermod -aG sudo nodebb su nodebb
usermod -aG sudo nodebb
su nodebb

4.安装并配置依赖

4.1.安装Node.js

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

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
curl -sL https://deb.nodesource.com/setup_8.x | sudo -E bash -
apt install nodejs -y
curl -sL https://deb.nodesource.com/setup_8.x | sudo -E bash - apt install nodejs -y
curl -sL https://deb.nodesource.com/setup_8.x | sudo -E bash -
apt install nodejs -y

4.2.安装MongoDB

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

首先先导入这个公钥。

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 9DA31620334BD75D9DCB49F368818C72E52529D4
sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 9DA31620334BD75D9DCB49F368818C72E52529D4
sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 9DA31620334BD75D9DCB49F368818C72E52529D4

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

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
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
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
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了。

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
sudo apt update
sudo apt install mongodb-org -y
sudo apt update sudo apt install mongodb-org -y
sudo apt update
sudo apt install mongodb-org -y

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

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
sudo service mongod start
sudo service mongod status
sudo service mongod start sudo service mongod status
sudo service mongod start
sudo service mongod status

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

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
sudo systemctl enable mongod
sudo systemctl enable mongod
sudo systemctl enable mongod

4.3.配置MongoDB

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

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
mongo
mongo
mongo

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

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
use admin
use admin
use admin

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

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
db.createUser( { user: "admin", pwd: "(密码)", roles: [ { role: "readWriteAnyDatabase", db: "admin" }, { role: "userAdminAnyDatabase", db: "admin" } ] } )
db.createUser( { user: "admin", pwd: "(密码)", roles: [ { role: "readWriteAnyDatabase", db: "admin" }, { role: "userAdminAnyDatabase", db: "admin" } ] } )
db.createUser( { user: "admin", pwd: "(密码)", roles: [ { role: "readWriteAnyDatabase", db: "admin" }, { role: "userAdminAnyDatabase", db: "admin" } ] } )

然后进入nodebb数据库。

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
use nodebb
use nodebb
use nodebb

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

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
db.createUser( { user: "nodebb", pwd: "(密码)", roles: [ "readWrite" ] } )
db.createUser( { user: "nodebb", pwd: "(密码)", roles: [ "readWrite" ] } )
db.createUser( { user: "nodebb", pwd: "(密码)", roles: [ "readWrite" ] } )

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

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

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

  点击这里☆查看更多  

4.5.其他依赖

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

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
sudo apt install git build-essential -y
sudo apt install git build-essential -y
sudo apt install git build-essential -y

5.部署NodeBB

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

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
sudo mkdir /var/www && cd /var/www
sudo git clone -b v1.10.x https://github.com/NodeBB/NodeBB.git nodebb
sudo mkdir /var/www && cd /var/www sudo git clone -b v1.10.x https://github.com/NodeBB/NodeBB.git nodebb
sudo mkdir /var/www && cd /var/www
sudo git clone -b v1.10.x https://github.com/NodeBB/NodeBB.git nodebb

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

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
cd nodebb
sudo ./nodebb setup
cd nodebb sudo ./nodebb setup
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。

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
sudo apt install software-properties-common -y
sudo add-apt-repository ppa:ondrej/nginx-mainline
sudo apt update
sudo apt install nginx -y
sudo apt install software-properties-common -y sudo add-apt-repository ppa:ondrej/nginx-mainline sudo apt update sudo apt install nginx -y
sudo apt install software-properties-common -y
sudo add-apt-repository ppa:ondrej/nginx-mainline
sudo apt update
sudo apt install nginx -y

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

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
sudo vim /etc/nginx/conf.d/nodebb.conf
sudo vim /etc/nginx/conf.d/nodebb.conf
sudo vim /etc/nginx/conf.d/nodebb.conf

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

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
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;
}
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; }
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服务。

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
sudo nginx -t
sudo service nginx restart
sudo nginx -t sudo service nginx restart
sudo nginx -t
sudo service nginx restart

7.创建NodeBB服务

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

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

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
sudo chown -R nodebb:nodebb /var/www/nodebb
sudo chown -R nodebb:nodebb /var/www/nodebb
sudo chown -R nodebb:nodebb /var/www/nodebb

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

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
sudo vim /etc/systemd/system/nodebb.service
sudo vim /etc/systemd/system/nodebb.service
sudo vim /etc/systemd/system/nodebb.service

NodeBB服务的格式基本如下。

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
[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
[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
[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

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

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
sudo service nodebb start
sudo service nodebb status
sudo service nodebb start sudo service nodebb status
sudo service nodebb start
sudo service nodebb status

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

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
sudo systemctl enable nodebb
sudo systemctl enable nodebb
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。)(っ °Д °;)っ

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