前言
有许多老开源或收费的论坛系统,如 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.xgit 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
