前言
有许多老开源或收费的论坛系统,如 Discuz!。不过我对php并不感冒,而且Discuz我觉得年代已久,体验难以跟上现代化,所以找到了NodeBB这个开源论坛系统。
NodeBB简介
NodeBB 论坛软件由 Node.js 提供支持,支持 Redis、MongoDB 或 PostgreSQL 数据库。它利用网络套接字进行即时交互和实时通知。NodeBB 具有许多开箱即用的现代功能,例如社交网络集成和流媒体讨论,同时仍确保与旧浏览器兼容。 通过使用第三方插件启用附加功能。
事前准备
步骤
MongoDB
- 安装MongoDB。完成安装
mongo
进入Mongo Shell - 切换到admin 数据库
use admin
- 创建一个管理员用户
db.createUser( { user: "admin", pwd: "<Enter a secure password>", roles: [ { role: "root", db: "admin" } ] } )
- 切换到一个新的数据库,主要用来储存数据,名字可以是默认的'nodebb',之后配置nodebb就不必输入数据库名。这里用默认的'nodebb'名称。
use nodebb //切换到一个不存在的数据库会自动创建
- 创建一个拥有适当权限的用户管理nodebb数据库。
db.createUser( { user: "nodebb", pwd: "<Enter a secure password>", roles: [ { role: "readWrite", db: "nodebb" }, { role: "clusterMonitor", db: "admin" } ] } )
- 配置完可以退出Mongo Shell
quit()
- 编辑
/etc/mongod.conf
,增加以下配置以启用数据库身份验证security: authorization: enabled
- 重启MongoDB,可以验证是否生效
sudo systemctl restart mongod mongo -u admin -p your_password --authenticationDatabase=admin //连接验证是否可行
NodeBB
- 使用git clone命令克隆仓库下来本地,我这里克隆
v1.18.x
版本,其他版本就像这样v1.16.x
git clone -b v1.18.x https://github.com/NodeBB/NodeBB.git nodebb cd nodebb //切换文件夹到nodebb中
- 执行命令以配置,配置完会得到一个config.json文件,日后想要修改配置可以通过这个文件
./nodebb setup
- 配置完便可以启动nodebb了。
./nodebb start //启动 ./nodebb stop //停止
Nginx
- 安装Nginx,完成安装若没有启动需要启动。
sudo systemctl start nginx //启动 sudo systemctl status nginx //查看状态
- 配置server块,最好在
/etc/nginx/sites-available/
中添加新文件,可以复制default后修改,方便许多。添加文件后记得ln -s
文件到/etc/nginx/sites-enabled/
下以启用配置。server { listen 80; server_name forum.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"; } }
- 记得重新加载Nginx
sudo nginx -s reload
- 浏览器浏览
http://forum.example.com
或http://localhost
可以查看效果
使用Docker
自行构建
- 项目有
Dockerfile
和docker-compose.yml
,可以使用docker-compose启动,不过我遇到一些问题,可以先试试可行没有再使用下面的方法
拉已构建好的镜像
- Docker先创建一个网络
sudo docker network create mongo-net
- 拉个MongoDB镜像并启动
sudo docker run --name mongo --restart always --network mongo-net -d mongo
- Docker Hub中已经有官网的NodeBB镜像,一样拉下来启动即可
sudo docker run --restart always --name forum --network mongo-net -p 4567:4567 -d nodebb/docker
- 执行成功后论坛已启动,浏览器进入论坛会进入图形配置页面,简单配置一下即可。
事后经验
- 确保所有步骤都正常运行,尤其是Docker 网络,保持NodeBB容器和MongoDB容器在一个网络,NodeBB才能连接数据库。
- MongoDB的hostname在容器中貌似根据容器名称定义。如启动MongoDB容器时
--name mongo
,容器之间ping mongo
可以ping通,显示出MongoDB容器的ip - 不要以其他权限运行NodeBB, 如sudo