前言

因为原有的论坛升级不了(没钱买商业版的!)而且那个论坛看久了觉得又老又丑,所以打算重新搭建一个论坛。在网上找了半个月了,发现国内的程序太笨重了,还是在国外的社交网站上找到了几个,原本想搭建Flarum的论坛的,但是flarum经历了8年的开发还是bate版的,而且插件也不是很友好,就算了。重新找了一个国外比较火的nodebb。也就是我们论坛现在的程序。基于node.js的。还算可以。
为了搭建这个论坛,从在自己的虚拟机模拟环境到在阿里云上搭建,花了我半个月的时间吧(上班也在看这东西),其中老是找老马重置阿里云服务器也是费了不少功夫,挺麻烦了,我估摸着重置服务器大概10+次了吧,各种各样的问题都有,错一步都不行。还是辛苦老马了,无时无刻都给我提供阿里云的验证码。
下面的搭建步骤都是我经过十几次的错误总结出来的,因为这个程序在国内使用的组织不超过5个,所以很多网上的教程都是直接翻译外国人的,其实他们自己都看不懂自己在写什么。这套优秀的程序虽然我不懂为啥在国内火不起来(有可能是买不到nodebb的授权或者搭建很困难),但是既然被我发现了,那就要好好利用一下。
说到搭建困难,这套程序的每一个步骤都是非常关键的,就算是你从github上下载源码,都不一定能搭建成功,而且这个程序中很多架构是需要翻墙才能加载的,阿里云不让翻,所以我也特地把教程中所有的用到“外网”的东西全都用国内大佬特制的命令“汉化”了
这套教程,能卖200!别问我为什么,因为我当初快要放弃的时候,我想找人帮我搭建完事,一看,卧槽,没钱!还是自己消耗生命划算!
nodebb论坛搭建过程 - 图1
OK,进入正文!


1.更新源,关防火墙

  1. $ yum -y update
  2. $ yum -y install epel-release
  3. $ yum -y groupinstall "Development Tools"
  4. $ yum -y install git ImageMagick ImageMagick-devel
  5. 查看防火墙状态
  6. firewall-cmd --state
  7. 停止firewall
  8. systemctl stop firewalld.service
  9. 禁止firewall开机启动
  10. systemctl disable firewalld.service

2.NODEJS安装

安装NVM

$ curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.8/install.sh | bash

使环境变量的修改生效

$ source ~/.bashrc

检查是否成功安装

$ command -v nvm

让NVM使用淘宝源

$ export NVM_NODEJS_ORG_MIRROR=http://npm.taobao.org/mirrors/node
$ export NVM_IOJS_ORG_MIRROR=http://npm.taobao.org/mirrors/iojs

安装Node.js LTS

$ nvm install --lts

查看是否搭建nodejs成功

$ node -v && npm -v

npm更换为cnpm

$ npm install -g cnpm --registry=https://registry.npm.taobao.org

3.MONGODB安装

配置 MongoDB yum 源

$ vim /etc/yum.repos.d/mongodb-org-4.0.repo

把下面的内容复制进去

[mongodb-org-4.0] 
name = MongoDB Repository 
baseurl = https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/4.0/x86_64/ 
gpgcheck = 1 
enabled = 1 
gpgkey = https://www.mongodb.org/static/pgp/server-4.0.asc

更新文件,安装

$ yum update
$ yum -y install mongodb-org

查看 Mongodb 版本

$ mongod --version
请检查你的 MongoDB 版本是否大于或等于3.4.10,如果不是请立即升级(以前的版本存在严重的安全风险)!

安装完成后,为了消除 MongoDB 的性能警告,需要关闭 Linux 巨型页:

$ echo never > /sys/kernel/mm/transparent_hugepage/enabled
$ echo never > /sys/kernel/mm/transparent_hugepage/defrag

启动 MongoDB 服务

$ service mongod start

新建数据库配置(详细可查看 配置MongoDB 篇)

$ mongo

新建数据库:

> use nodebb # 新建数据库,名叫 nodebb

添加用户角色:

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

如果要在NodeBB的管理控制面板(高级→数据库)中查看数据库统计信息,请键入以下命令:

> db.grantRolesToUser("nodebb5",[{ role: "clusterMonitor", db: "admin" }]);
> exit

打开 MongoDB 权限认证

$ vim /etc/mongod.conf

找到 security: 这一行,取消注释并改为:

security:
   authorization: enabled

重启 MongodB

$ service mongod restart

4.NODEBB安装

下载 NodeBB

$ cd /home #切换到你想要的位置即可
$ git clone -b v1.12.x https://gitee.com/qiai365/NodeBB.git nodebb

进入目录

$ cd /home/nodebb

初始化 NodeBB,使用如下命令开始初始化:

$ cnpm install
$ cnpm install sharp
$ ./nodebb setup
$ cnpm install --production
$ ./nodebb setup

测试

$ ./nodebb dev

如果都没报错的话可以使用下面的命令启动程序

$ ./nodebb start

5.NGINX安装

安装

$ vim /etc/yum.repos.d/nginx.repo

在文件内写入以下内容

[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/rhel/$releasever/x86_64/
gpgcheck=0
enabled=1

开始安装

$ yum -y install nginx.x86_64

配置 Nginx

$ vim /etc/nginx/nginx.conf

在 http 语句块内追加上:

server {
    listen 80;
    server_name www.xxx.com;   #你的域名
   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

$ service nginx start

启动

./nodebb start

现在你就可以通过访问你的域名来进入nodebb论坛程序了!

后续

关于反向代理注意点:
问:在/etc/nginx/nginx.conf填上配置信息后,为什么直接访问域名还是nginx欢迎页面?
答:在/etc/nginx/nginx.conf中除了自己填写的server配置之外,还有一个关注点,那就是在http语句块中
include /etc/nginx/conf.d/*.conf这个不起眼的包含语句是致命的,这一句话会将/etc/nginx/conf.d/目录
下的一个默认配置default.conf优先处理,而这个默认的default.conf,正好是监听80端口。因为这个问题,我重置
了不下5遍服务器重新搭建。然后还是花了一天时间把nginx的官方文档看了一遍才知道的。
有人会说百度啊,谷歌啊啥的我咋没搜了,我搜了!但是人家仅仅只会说一句端口占用之类的话,而这个配置导致的问题
并不是端口占用,因为nginx不会同时加载这两个(/etc/nginx/nginx.conf、/etc/nginx/conf.d/default.conf),default的优先级更高!
所以没查出来端口占用!

高级管理

安装 forever维持进程

$ cnpm install forever -g # 这里必须加-g参数,不然可能装不上

后台启动 NodeBB:

$ forever start app.js

停止 NodeBB:

$ forever stop app.js

查看后台的 NodeBB:

$ forever list

tips

关于nodebb我觉得非常好的东西:

  1. markdown编辑器,这是一个每个人都需要会的东西,极度轻简的编辑器带动着宇宙万物。markdown的使用语法,后续会由胖胖Bolooo2_7发出来。
  2. socket.io,socket.io是基于WebSocket的C-S实时通信库,这个东西带动着我们现在论坛的实时聊天和几乎无延迟的消息队列,不信你可以打开一个人的头像发消息给他就知道了,比QQ的速度还要快。更重要的是,安全!!!所有的流量请求均通过WebSocket实现的,什么?抓包改包?你抓一个试试!
  3. 颜值,好看就完事了
  4. 其他的暂时还没想起来,想起来再补吧