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,你的服务器必须满足以下条件:
3.创建运行用户
建议使用一个非root用户来管理NodeBB进程。由于接下来的操作最好不要用root用户进行,我们先来创建这个运行用户。
adduser nodebb
输好密码并确认之后一路回车,就创建好一个名为nodebb
的用户了。
给nodebb
用户一个sudo
权限之后切换到这个用户,接下来的操作将用nodebb
用户进行。
usermod -aG sudo nodebb
su 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 -
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,更省资源。
首先先导入这个公钥。
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服务。)
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了。
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服务,并查看一下是否运行正常。
sudo service mongod start
sudo service mongod status
sudo service mongod start
sudo service mongod status
sudo service mongod start
sudo service mongod status
服务运行正常的话就让这个服务开机启动。
sudo systemctl enable mongod
sudo systemctl enable mongod
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" } ] } )
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
数据库。
use nodebb
创建一个具有读写nodebb
数据库权限的用户。
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的有些功能会受影响,请自行决定是否启动权限认证。
启用权限认证的方法是在MongoDB的配置文件里的
#security:
一行下面添加这两句参数:
security:
authorization: enabled
可以直接用sed命令添加。
sudo sed -i '/#security:/a\security:\n authorization: enabled' /etc/mongod.conf
sudo sed -i '/#security:/a\security:\n authorization: enabled' /etc/mongod.conf
sudo sed -i '/#security:/a\security:\n authorization: enabled' /etc/mongod.conf
重启MongoDB使修改后的配置生效。
sudo service mongod restart
sudo service mongod restart
sudo service mongod restart
接下来如果要对数据库进行操作,必须进行用户认证。例如用管理员用户进入数据库时需要使用下面这条命令启动数据库命令行。
mongo -u admin -p (密码) --authenticationDatabase=admin
mongo -u admin -p (密码) --authenticationDatabase=admin
mongo -u admin -p (密码) --authenticationDatabase=admin
4.5.其他依赖
差点忘了还有这两样东西没有安装。直接使用apt
安装即可。
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
文件夹。
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
文件夹并运行配置脚本。
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。
sudo apt install software-properties-common -y
sudo add-apt-repository ppa:ondrej/nginx-mainline
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
安装完毕之后创建一个配置文件。
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证书与密钥的路径。
error_log /var/log/nginx/nodebb.access.log;
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;
proxy_pass http://backend/;
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;
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服务。
sudo service nginx restart
sudo nginx -t
sudo service nginx restart
sudo nginx -t
sudo service nginx restart
7.创建NodeBB服务
创建一个NodeBB服务可以让它开机自启。
在创建服务之前,先得把NodeBB所在的文件夹所有权转移给nodebb
用户与nodebb
用户组。
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服务了。
sudo vim /etc/systemd/system/nodebb.service
sudo vim /etc/systemd/system/nodebb.service
sudo vim /etc/systemd/system/nodebb.service
NodeBB服务的格式基本如下。
Documentation=https://docs.nodebb.org
After=system.slice multi-user.target mongod.service
Environment=NODE_ENV=production
WorkingDirectory=/var/www/nodebb
ExecStart=/usr/bin/node loader.js --no-daemon --no-silent
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
保存完服务文件之后先启动服务并查看一下运行状态。
sudo service nodebb start
sudo service nodebb status
sudo service nodebb start
sudo service nodebb status
sudo service nodebb start
sudo service nodebb status
运行正常的话就可以让它开机自启了。
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。)(っ °Д °;)っ
不过我倒不讨厌折腾,因为这样也是蛮有意思的。( •̀ ω •́ )
0 Comments