返回
论坛系统NodeBB初体验
编程初体验论坛系统社区nodebbWeb开发

前言

有许多老开源或收费的论坛系统,如 Discuz!。不过我对php并不感冒,而且Discuz我觉得年代已久,体验难以跟上现代化,所以找到了NodeBB这个开源论坛系统。

NodeBB简介

NodeBB 论坛软件由 Node.js 提供支持,支持 Redis、MongoDB 或 PostgreSQL 数据库。它利用网络套接字进行即时交互和实时通知。NodeBB 具有许多开箱即用的现代功能,例如社交网络集成和流媒体讨论,同时仍确保与旧浏览器兼容。 通过使用第三方插件启用附加功能。

事前准备

  • 安装MongoDB (最好最新稳定版)
  • 安装Git
  • 安装Node.js (需要特定版,我目前对应的版本是node v14和npm v6)
  • 安装Nginxw

步骤

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.comhttp://localhost可以查看效果

使用Docker

自行构建

  • 项目有Dockerfiledocker-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

相关资料