• 基于Docker和MongoDB部署NodeBB论坛系统


    在这里插入图片描述

    本文软件由网友 114514 推荐;

    什么是 NodeBB ?

    NodeBB是下一代讨论平台,它利用 Web sockets 进行即时交互和实时通知。NodeBB 论坛具有许多开箱即用的现代功能,例如社交网络集成和流式讨论,以及完整的 REST API 和插件框架,以实现完整的第三方可扩展性。

    前言

    先说下安装过程中遇到的两个问题:

    问题 1

    官方提供了 docker-compose.yml 文件,但是直接部署的话,在设置向导直接就通不过,日志中显示 warn: NodeBB Setup Aborted.

    经排查,日志中有下面这样的错误

    为了便于阅读,已格式化处理

    db_1 | {
    	"t": {
    		"$date": "2022-11-08T02:38:55.786+00:00"
    	},
    	"s": "I",
    	"c": "ACCESS",
    	"id": 20249,
    	"ctx": "conn3",
    	"msg": "Authentication failed",
    	"attr": {
    		"mechanism": "SCRAM-SHA-1",
    		"speculative": false,
    		"principalName": "root",
    		"authenticationDatabase": "nodebb",
    		"remote": "192.168.48.3:50616",
    		"extraInfo": {},
    		"error": "UserNotFound: Could not find user \"root\" for db \"nodebb\""
    	}
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    在这里插入图片描述

    老苏查了半天资料,一种方法是通过进入容器创建用户,但是感觉有点繁琐;另一种方法干脆就用了无用户/密码登录方式,可能会收到警告信息

     warn: You have no mongo username/password setup!
    
    • 1

    在这里插入图片描述

    不过反正也没有对外暴露数据库的端口,应该问题不大;

    问题 2

    本来想把配置文件 config.json 映射到容器中,这样改起来方便

    但是访问页面时显示 Cannot read properties of undefined (reading 'split')

    日志中也有错误

    在这里插入图片描述

    所以只能放弃这种方式,好在也没啥需要改的地方,有兴趣了解可以看最后的部分

    命令行安装

    docker-compose 安装,将下面的内容保存为 docker-compose.yml 文件

    version: '3.5'
    
    services:
      node:
        image: nodebb/docker
        container_name: nodebb_web
        restart: unless-stopped
        depends_on:
          - db
        ports:
          - 4567:4567
        volumes:
          # - ./config.json:/usr/src/app/config.json 
          - ./uploads:/usr/src/app/public/uploads
          
      db:
        image: mongo
        container_name: nodebb_db
        restart: unless-stopped
        volumes:
          - ./mongo:/data/db
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

    然后执行下面的命令

    # 新建文件夹 nodebb 和 子目录
    mkdir -p /volume2/docker/nodebb/{mongo,uploads}
    
    # 进入 nodebb 目录
    cd /volume2/docker/nodebb
    
    # 修改目录权限
    chmod 777 uploads/
    
    # 将 docker-compose.yml 放入当前目录
    
    # 一键启动
    docker-compose up -d
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    运行

    容器启动的时间有点长,除了初始化数据库,似乎还有代码 build 的动作,

    当在容器 nodebb_web 的日志中看到 Web installer listening on http://0.0.0.0:4567

    在这里插入图片描述

    就可以在浏览器中输入 http://群晖IP:4567 进行设置了

    在这里插入图片描述

    设置

    • web 地址

      • Web Address (URL):局域网使用直接默认的就可以;老苏尝试过,即使用 npm 做了反代,这里也不需要修改为域名;

    在这里插入图片描述

    • 创建管理员账号

      • Username:用于后台管理的管理员账号,比如:laposu
      • Email Address:管理员的电子邮件;
      • PasswordConfirm Password:是管理员的密码;

    • 设置数据库

      • Database Type:数据库类型,默认的 MongoDB 就可以;
      • Host IP or address of your MongoDB instance :不能用默认的 127.0.0.1,改为 docker-compose.yml 文件中的 service 名称 db;
      • Host port of your MongoDB instance:默认的端口 27017 就可以;
      • MongoDB username:数据库用户,按照前面的设置留空就行;
      • Password of your MongoDB database:数据库密码,按照前面的设置留空就行;
      • MongoDB database name:直接用默认的 nodebb 就可以;

    在这里插入图片描述

    设置的过程还是比较长的

    日志中有进度

    在这里插入图片描述

    不出意外的话你会看到

    在这里插入图片描述

    直接点绿色按钮 Launch NodeBB,就能看到登录界面

    虽然默认登录是中文界面,但后面不是,可能是自动识别错误了;

    在这里插入图片描述

    有可能会连不上,因为还有下载、编译的动作

    在这里插入图片描述

    登录成功后的 Dashboard

    在这里插入图片描述

    中文

    Settings --> Languages

    在这里插入图片描述

    Default Language 中下拉选择 简体中文 后,点右下角的按钮保存

    在这里插入图片描述

    刷新之后就是中文了

    在这里插入图片描述

    其他

    这个没啥用的,属于问题2折腾的一部分,从设置完成的容器内导出了一份 config.json,本想做模板,用于映射的

    -----------下面👇这段不需要---------------

    # 配置完成后才会有 config.json 文件
    
    # 拷贝配置文件到群晖中
    docker cp nodebb_web:/usr/src/app/config.json config.json
    
    • 1
    • 2
    • 3
    • 4

    config.json 的文件内容

    {
        "url": "",
        "secret": "",
        "database": "mongo",
        "port": "4567",
        "mongo": {
            "host": "db",
            "port": "27017",
            "username": "",
            "password": "",
            "database": "nodebb",
            "uri": ""
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    其中 :

    • url:需要填主机 IP 和 服务端口,比如老苏的是 http://192.168.0.197:4567
    • secret:在服务启动时会自动生成;
    • 其他的默认就可以了;

    -----------上面👆这段不需要---------------

    参考文档

    NodeBB/NodeBB: Node.js based forum software built for the modern web
    地址:https://github.com/NodeBB/NodeBB

    Home | NodeBB | Your Community Forum Platform
    地址:https://nodebb.org/

    NodeBB 文档
    地址:https://docs.nodebb.org/

  • 相关阅读:
    Windows之nslookup命令
    Linux之Nignx及负载均衡&动静分离
    C++ 多线程编程教程:使用 std::thread 和 std::future 进行并发任务管理 ,处理线程超时
    MySQL索引
    Codeforces Round #790 (Div. 4) H. Maximum Crossings
    13届蓝桥杯省赛PythonB组真题-蜂巢
    如何用C语言实现 IoT Core
    s23.基于 Kubernetes v1.25.0(kubeadm) 和 Containerd部署高可用集群
    java毕业设计软件基于ssh+mysql+jsp的电影|影院购票选座系统
    1553B总线测试仪
  • 原文地址:https://blog.csdn.net/wbsu2004/article/details/127841094