使用AppNode面板10分钟完成搭建NodeBB论坛

自从手头那台老奔腾虚拟化了之后,可以虚拟出很多很多的测试环境了,于是打算着手尝试安装最近比较火的NodeBB论坛程序。

AppNode简介

AppNode 是一款 Linux 服务器集群管理软件,它基于 Web 页面实现对 Linux 服务器的可视化管理。不但可以帮助不熟悉 Linux 命令的用户无障碍地管理他们的 Linux 服务器,也可以帮助 Linux 运维人员提升运维管理效率。

AppNode 前身为 VPSMate,2012年在阿里云开发者大赛夺得超级工具大奖。VPSMate 由于小巧轻便,并首次实现了在服务器面板上按需安装软件,属国内首创,并风靡一时。2014年11月,该产品重新立项并命名为 AppNode。

AppNode已于2017年11月01日起永久免费了,详见本博博文:


免费版的AppNode仅可以搭建三个网站,包括反代。

NodeBB简介

NodeBB 是一种基于 Node.js 构建的电子公告牌系统(Bulletin Board System)。事实上,NodeBB已经不能说是一种单纯的 BBS 系统了。相对于传统的BBS,它的风格其实更偏向于 WeCenter 这种话题类的平台(Platform),也就是说它可能并不是十分适合有 传统BBS 需求的站长。

NodeBB的优势在于 即时通讯技术 和 瀑布流消息的呈现模式,这主要得益于 Socket.io 提供的 ajax 解决方案(WebSocket > Long polling)。可以说,NodeBB能够吸引人的其实就是它这种十分友好,流畅的用户之间的交互。

NodeBB 的插件结构十分自由,也十分的开放。 与此同时 NodeBB 的原生系统其实十分的简陋 ,例如:缺少完善的权限系统,缺少完善的积分系统,未自带完善的社会化登录(SSO)等。

安装CentOS最新版

操作系统安装属于最基础的工作了,在开始之前一定要准备一个纯净的CentOS系统并update到最新,本文根据本地环境简单讲一下大致的步骤。

  1. 从官网下载CentOS最小化安装包。

  2. 使用UltraISO软碟通刻录镜像到U盘或光盘:软碟通UltraISO V9.66.3300 绿色版&单文件版
  3. 使用U盘或光盘引导安装界面启动。网上有很多CentOS安装教程,这里不会请自行百度解决。
  4. 系统安装完成后需要做的操作如下:

安装wget

[root@localhost ~]# yum -y install wget

安装vim

[root@localhost ~]# yum install vim

关闭 SELinux

[root@localhost ~]# vim /etc/sysconfig/selinux #找到 SELINUX 然后修改成 disabled.
# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
#     enforcing - SELinux security policy is enforced.
#     permissive - SELinux prints warnings instead of enforcing.
#     disabled - No SELinux policy is loaded.
SELINUX=disabled
# SELINUXTYPE= can take one of three two values:
#     targeted - Targeted processes are protected,
#     minimum - Modification of targeted policy. Only selected processes are protected. 
#     mls - Multi Level Security protection.
SELINUXTYPE=targeted

修改当前yum源为阿里yum源

备份当前的yum源

[root@localhost ~]# mv /etc/yum.repos.d /etc/yum.repos.d.backup

新建空的yum源设置目录

[root@localhost ~]# mkdir /etc/yum.repos.d

下载阿里云的yum源配置

[root@localhost ~]# wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo

重建缓存

[root@localhost ~]# yum clean all
[root@localhost ~]# yum makecache

更新系统到最新:

[root@localhost ~]# yum -y update

安装AppNode面板

从AppNode官方网站获取安装命令。因为NodeBB不需要网站管理所以之选择“同时安装控制中心和受控端”,如下:

[root@localhost ~]# INSTALL_AGENT=1 INIT_SWAPFILE=1 bash -c "$(curl -sS http://dl.appnode.com/install.sh)"

AppNode安装帮助详见:AppNode使用手册

特别说明:
安装好AppNode面板之后一定要记得关闭计划任务功能,否则每天晚上4点在AppNode执行计划任务之后就会清理掉node的进程切不会自动重启,原因未知。关闭方法如下图:
job.jpg

在应用列表选中计划任务后查看右边的运行状态,如果处于运行中请点击黄色箭头所示的位置,去掉自启选项并点击停止按钮。

安装node.js

1.AppNode面板安装完成之后使用http://你的IP:8888访问AppNode面板

2.登录后进入桌面选择软件管家并搜索node在搜索结果中点击Node.js右侧的一键安装如下图
node.jpg

在弹出的对话框中保持默认项并单击立即安装即可。

3.安装结束后点击左侧应用列表刷新按钮后可以在左侧看到新安装的应用Node.js,选中在右侧Node.js版本管理中选择安装新版本,选择Node.js下载点为淘宝镜像,点击下一步选择v8.9.3 LTS点击立即安装
node setup.jpg

安装Redis

再次进入桌面选择软件管理搜索redis在搜索结果中点击Redis服务器右侧的一键安装如下图
redis.jpg

在弹出的对话框中保持默认项并单击立即安装即可。

安装完成后点击左侧应用列表刷新按钮选中新装的Redis服务器勾选自启并点击启动按钮来启动Redis服务器。
redis start.jpg

Git客户端

再次进入桌面选择软件管理搜索git在搜索结果中点击Git客户端右侧的安装如下图
git.jpg

到这一步NodeBB所需要的环境基本上都准备好了,下面开始安装NodeBB!

安装NodeBB

使用AppNode自带的命令终端可以方便快捷的输入所需命令,如下图:
命令终端.jpg
1.从 Github 上克隆 NodeBB 的发布版本分支

如果你的下载速度不理想也可以使用国内的镜像仓库(https://gitee.com/NodeBB-CN/NodeBB.git,只需替换下面第二行代码中的https://github.com/NodeBB/NodeBB即可。

[root@localhost ~]# cd /home #把目录替换为你想安装到的地方
[root@localhost home]# git clone -b v1.7.x https://github.com/NodeBB/NodeBB nodebb

2.进行初始化设置

[root@localhost home]# shutdown -r now  #在初始化之前你需要重启一下你的服务器,否则可能会出现异常
[root@localhost ~]# npm -v  #检查npm版本信息
5.5.1
[root@localhost ~]# node -v  #检查node版本信息
v9.3.0
[root@localhost ~]# cd /home/nodebb #替换为上面你修改的目录 + /nodebb
[root@localhost nodebb]# ./nodebb setup

安装过程中会有一些初始化信息需要填写,如下:

URL used to access this NodeBB (http://localhost:4567) http://192.168.0.92:4567  #这里要求输入访问的网址,可以在/home/nodebb/config.json中修改,本文为本地演示所以直接填写本机IP地址。
Please enter a NodeBB secret (4cce2df1-xxxx-4d41-8192-axxxxxxxxxx)  #这里默认直接回车即可
Which database to use (mongo) redis  #由于本文选择的redis数据库所以这里填写redis!
Now configuring redis database:  #请求配置redis数据库服务器信息
Host IP or address of your Redis instance (127.0.0.1)   #redis数据库服务器地址,默认为本机
Host port of your Redis instance (6379)   #redis数据库服务器端口
Password of your Redis database   #redis数据库密码
Which database to use (0..n) (0)   #redis数据库名称
Configuration Saved OK  #配置完成
Administrator username admin  #输入论坛管理员帐号`admin`改成你的帐号
Administrator email address youremail@yourdomain.com  #输入论坛管理员邮箱`youremail@yourdomain.com`改成你的邮箱
Password   #输入论坛管理员密码
Confirm Password   #论坛管理员密码确认
================================此处省略配置执行过程================================
NodeBB Setup Completed. Run "./nodebb start" to manually start your NodeBB server.

上面一系列的初始化配置完成之后会提示你启动NodeBB./nodebb start

[root@localhost nodebb]# ./nodebb start

Starting NodeBB
"./nodebb stop" to stop the NodeBB server
"./nodebb log" to view server output
"./nodebb help" for more commands

输入启动命令,抛出命令结果。
更多NodeBB命令可以使用如下方式查询:

[root@localhost nodebb]# ./nodebb ?

本文列出常用命令如下:

[root@localhost nodebb]# ./nodebb start  #启动
[root@localhost nodebb]# ./nodebb stop  #停止
[root@localhost nodebb]# ./nodebb restart  #重启
[root@localhost nodebb]# ./nodebb status  #状态
[root@localhost nodebb]# ./nodebb log  #日志

到此NodeBB安装成功,输入http://你的IP:4567访问你的论坛吧!
NodeBB.jpg

Now!
Enjoy your Discuss!

优化NodeBB

默认情况下,NodeBB将在一个进程上运行,某些调用可能比其他进程更长,从而导致相同资源的延迟或队列等待。
要解决这个问题,可以通过添加多个端口到config.json中来指示NodeBB在多个进程上运行。

{
    "port": ["4567", "4568", "4569"]  //这将启动3个进程,分别监听这3个端口
}

请记住,使用 node loader.js./nodebb start 来启动程序,这样才会产生 3 个进程。
若使用 node app.js 将只会启动一个监听端口组第一个成员的进程!
需要像Nginx这样的代理服务器,以便在所有服务器之间进行负载均衡请求。 请将将下面的块添加到您的配置中(请根据实际修改):

upstream io_nodes {
    ip_hash;
    server 127.0.0.1:4567;
    server 127.0.0.1:4568;
    server 127.0.0.1:4569;
}

并将下文反代规则中的 proxy_pass 值改为:proxy_pass http://io_nodes;

设置反代

上一步我们安装好了nodebb,但是需要通过4567端口才能访问。现在我们设置一下反代服务,支持通过域名访问网站。

反代服务器 有很多种,但这里我们选取的是最流行也是性能最优秀的反代服务: Nginx

1.首先,安装nginx

yum install nginx

2.设置nginx反代规则

cd /etc/nginx/conf.d
nano example.conf

规则如下(www重定向至no-www,如果不需要,可以自己修改)

server {
    listen       80;
    server_name  www.example.com;
    return       301 http://example.com$request_uri;
}

server {
    listen 80;

    server_name example.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";
    }
}

3.重启让 Nginx 配置生效

service nginx reload

如果出现如下错误:

nginx: [emerg] could not build server_names_hash, you should increase server_names_hash_bucket_size: 32
nginx: configuration file /etc/nginx/nginx.conf test failed

修改 nginx.conf,在 http{} 添加:

server_names_hash_bucket_size  64;

保存,退出,启动nginx

本文部分内容摘录自NodeBB热

Last modification:June 27th, 2019 at 10:23 am
如果觉得我的文章对你有用,请随意赞赏

2 comments

  1. 写作清单

    好折腾。这是论坛程吧。

    1. 拾玖
      @写作清单

      @(奸笑) 其实还算简单吧,文章看一篇10分钟就搭建完成了,只是我写得比较仔细,所以看起来篇幅比较长,更多的是水。。。

Leave a Comment