nodebb.png

NodeBB 是构建在「Node.JS」上的论坛系统,基于ES5标准开发。NodeBB 支持多种数据库(MongDB、Redis),在 GNU General Public License v3 (GPL-3) 许可证下发行。和 Discuz! X 相比,NodeBB 更现代,更安全;和 Discourse 相比,NodeBB 更轻量,更高效;和 Flarum 相比,NodeBB 更完善,更稳定。NodeBB 使用了 Socket.IO,瀑布流式讯息呈现技术,即使在社区潮流逐渐淡去的今天,依旧是璀璨夺目的明星。

下面以「CentOS 8 + Redis」为例搭建 NodeBB:

系统准备

如果你还在 CentOS 6 的话,请更新你的 CentOS 版本吧!该 CentOS 版本已经不享受技术支持服务了!

关闭 SELinux

$ sudo vim /etc/sysconfig/selinux
$ sudo yum install vim # 如果 vim 指令未安装,那就安装它

找到 SELINUX 然后修改成 disabled

SELINUX = disabled

PS. 部分主机系统可能不存在该文件,那你可以直接跳过这步。

更新系统并安装基础工具

$ sudo yum update
$ sudo yum -y install epel-release
$ sudo yum -y groupinstall "Development Tools"
$ sudo yum -y install git ImageMagick ImageMagick-devel

环境搭建

安装 Node.JS

Node.JS 是由 Chrome JavaScript V8 引擎衍生出的一种高性能,高并发,易扩展的 JavaScript 运行环境。

$ curl -sL https://rpm.nodesource.com/setup_12.x | bash -
$ sudo yum install -y nodejs # 安装 Node.JS
$ sudo node -v # 查看版本,检查是否安装成功
$ sudo npm -v # 查看版本,检查是否安装成功

安装 Redis

一般用 Redis 更好,大站点建议使用 MongoDB。

$ sudo yum install redis # 安装 Redis
$ vim /etc/redis/redis.conf # 配置文件也可能在 /etc/redis.conf

在配置文件末尾加上:

requirepass yourpassword
bind 127.0.0.1
rename-command FLUSHALL ""

重启 Redis 服务:sudo systemctl restart redis

安装 NodeBB

$ cd /home
$ git clone -b v1.13.x https://github.com/NodeBB/NodeBB.git nodebb
$ cd /home/nodebb
$ ./nodebb setup
$ ./nodebb start

反向代理

这里以 Nginx 配置反代服务为例:

$ sudo yum install nginx
$ cd /etc/nginx/conf.d
$ sudo vim example.conf

配置文件参考:

### redirects http requests to https
server {
    listen 80;
    server_name example.com;
    return 302 https://$server_name$request_uri;
}
### the https server
server {
    # listen on ssl, deliver with speedy if possible
    listen 443 ssl spdy;
    server_name example.com;
    # change these paths!
    ssl_certificate /path/to/cert/bundle.crt;
    ssl_certificate_key /path/to/cert/example.com.key;
    # enables all versions of TLS, but not SSLv2 or 3 which are weak and now deprecated.
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    # disables all weak ciphers
    ssl_ciphers 'AES128+EECDH:AES128+EDH';
    ssl_prefer_server_ciphers on;
    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 重载配置:sudo systemctl reload nginx

如果出现如下错误:

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;