前言
因为原有的论坛升级不了(没钱买商业版的!)而且那个论坛看久了觉得又老又丑,所以打算重新搭建一个论坛。在网上找了半个月了,发现国内的程序太笨重了,还是在国外的社交网站上找到了几个,原本想搭建Flarum的论坛的,但是flarum经历了8年的开发还是bate版的,而且插件也不是很友好,就算了。重新找了一个国外比较火的nodebb。也就是我们论坛现在的程序。基于node.js的。还算可以。
为了搭建这个论坛,从在自己的虚拟机模拟环境到在阿里云上搭建,花了我半个月的时间吧(上班也在看这东西),其中老是找老马重置阿里云服务器也是费了不少功夫,挺麻烦了,我估摸着重置服务器大概10+次了吧,各种各样的问题都有,错一步都不行。还是辛苦老马了,无时无刻都给我提供阿里云的验证码。
下面的搭建步骤都是我经过十几次的错误总结出来的,因为这个程序在国内使用的组织不超过5个,所以很多网上的教程都是直接翻译外国人的,其实他们自己都看不懂自己在写什么。这套优秀的程序虽然我不懂为啥在国内火不起来(有可能是买不到nodebb的授权或者搭建很困难),但是既然被我发现了,那就要好好利用一下。
说到搭建困难,这套程序的每一个步骤都是非常关键的,就算是你从github上下载源码,都不一定能搭建成功,而且这个程序中很多架构是需要翻墙才能加载的,阿里云不让翻,所以我也特地把教程中所有的用到“外网”的东西全都用国内大佬特制的命令“汉化”了
这套教程,能卖200!别问我为什么,因为我当初快要放弃的时候,我想找人帮我搭建完事,一看,卧槽,没钱!还是自己消耗生命划算!
OK,进入正文!
1.更新源,关防火墙
$ yum -y update
$ yum -y install epel-release
$ yum -y groupinstall "Development Tools"
$ yum -y install git ImageMagick ImageMagick-devel
查看防火墙状态
firewall-cmd --state
停止firewall
systemctl stop firewalld.service
禁止firewall开机启动
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
后续
关于反向代理注意点:
问:在/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我觉得非常好的东西:
- markdown编辑器,这是一个每个人都需要会的东西,极度轻简的编辑器带动着宇宙万物。markdown的使用语法,后续会由胖胖Bolooo2_7发出来。
- socket.io,socket.io是基于WebSocket的C-S实时通信库,这个东西带动着我们现在论坛的实时聊天和几乎无延迟的消息队列,不信你可以打开一个人的头像发消息给他就知道了,比QQ的速度还要快。更重要的是,安全!!!所有的流量请求均通过WebSocket实现的,什么?抓包改包?你抓一个试试!
- 颜值,好看就完事了
- 其他的暂时还没想起来,想起来再补吧