Linux下部署开源论坛Nodebb

工作室内部论坛FlyingForum


为什么使用nodebb

  1. 工作室需要一个论坛,交流平台作为QQ群的补充,以及需要一个收集反馈的地方等。
  2. 之前想使用原来的discuz,通过模板开发之后再重新推广。但开发失败
  3. 暑假接触到开源软件的概念,并在自己的服务器上部署了一两个开源服务:Ghost,nodebb等。
  4. nodebb好看以及响应式设计,移动友好性等

准备

预想到学校的网速问题,在使用这个方法之前,尝试过使用中科大镜像EPEL。使用yum install redis来安装redis,这样安装真的少了很多手动配置,方便很多。
但是中科大centos6的EPEL很久没更新了(最近更新在2010年左右),导致Redis版本太低,nodebb启动失败,最后采用了上述手动安装的方法


开始安装Nodebb

1. 下载Nodebb到相应的目录

git clone https://github.com/NodeBB/NodeBB.git

2. 参照官方教程安装NodeBB

如果npm install 速度比较慢的话,可以使用淘宝的国内镜像
npm install --registry=https://registry.npm.taobao.org

1
2
3
4
//安装依赖包
npm install
//配置nodebb 管理员,数据库等
./nodebb setup

3. 安装完成后,启动NodeBB

在nodebb的根目录下
终端执行 ./nodebb start或者node app

  • 前者是只要服务器不关机就可以一直后台运行
  • 后者必须保持终端打开状态,终端一断开或者一按‘CTRL+C’,nodebb就会停止,而且后者会显示启动状态及启动失败问题

运行成功后,可以通过你设置的端口号来访问了,在nodebb根目录‘config.js’文件修改

4. 设置nginx

参照Nodebb官方Nginx配置

设置nginx的目的是只开放80端口,不用开放所有端口,就可以访问一个服务器里的多个网站,更方便和更安全
更多资料,Nginx相关。请百度“Nginx” 或者看工作室wiki


问题解决 SElinux导致Nginx转发失败

做完上述工作后,根据我在自己的腾讯云服务器配置nodebb的经验,是可以通过域名访问的 http://forum.flyingstudio.online/ ,但这次出现了“502”错误。

刚开始还以为Nginx配置错误,又重复弄了几次:配置文件名字 *.conf,默认配置文件中是否 include 了配置文件夹,配置文件的内容等

最后只好百度关键词“502” “nodebb 启动” “nodebb 502”等。,找到了读取nginx日志的命令:
sudo tail /var/log/nginx/error.log

在日志中发现了原因:这是部分关键字“failed (13: Permission denied)” 百度了之后发现是:SeLinux设置问题。搜到的结果

然后我尝试了 setenforce 0 临时设置Selinux为Permissive,域名访问nodebb后,发现没有出现,所以问题解决成功

为了安全考虑,我又把selinux设置为“Enforcing”,想着能不能只开放一个端口即nodebb使用的端口(默认4567),想起安装mongodb曾经提到过selinux
在里面找到:

If SELinux is in enforcing mode, enable access to the relevant ports that the MongoDB deployment will use (e.g. 27017). See Default MongoDB Port for more information on MongoDB’s default ports. For default settings, this can be accomplished by running
semanage port -a -t mongod_port_t -p tcp 27017

仿照搜到的教程selinux教程里Apache的解决方法

可以看出 SELinux 根据三种不同情况分别给出了对应的解决方法。在这里,第一种情况是我们想要的,于是按照其建议输入:
semanage port -a -t http_port_t -p tcp 888
之后再次启动 Apache 服务就不会有问题了。
这里又可以见到 semanage 这个 SELinux 管理配置工具。它第一个选项代表要更改的类型,然后紧跟所要进行操作。

最后写了这个命令:semanage port -a -t http_port_t -p tcp 4567,nodebb能通过域名访问了

期间出现了没有找到”semanage”问题,找到的解决方案有:

百度到的相关Selinux资料:

selinux入门
Centos看Selinux状态

nodebb插件安装

因为方便用户登录,使用了第三方登录插件和安全插件(防垃圾帖子和机器注册)

  1. 直接在后台按照
  2. 在nodebb根目录下 npm install <你需要的插件>

    相关插件可以在npm,GitHub上寻找,也可以在nodebb插件市场上找

将来可能出现的问题

这次是这几年来,工作室第一次使用Linux服务器,从技术上,人员上是个挑战。

  1. 安全问题
    工作室防服务器是学校的虚拟机,是对外,为用户服务的,Linux服务器如何管理,如何保证安全是一个问题。现在https越来越普遍,工作室也应该尽快进入https阶段了
  2. 性能问题
    这个服务器配置不太好,将来很有可能出现性能瓶颈,如何和网络中心协商升级服务器
  3. 后期维护问题
    这个nodebb采用的nodeJS+redis技术,后面的人才培养,进行二次开发,也是个挑战

链接收集:

工作室:
工作室内部论坛FlyingForum
工作室wiki
Node相关:
Nodejs官方包管理器安装方法
Nginx相关:
[Nginx下载安装教程] (http://nginx.org/en/linux_packages.html#stable)
MongoDB:
mongodb”centos”官方安装教程
Redis相关:
Redis官方下载
CentOS 7 上安装 Redis 服务器
centos6安装redis
NodeBB相关:
官方安装教程
Nodebb官方Nginx配置
SELinux相关:
selinux入门
Centos看Selinux状态