本文最后更新于 2024-09-13,文章内容距离上一次更新已经过去了很久啦,可能已经过时了,请谨慎参考喵。

前情提要

之前一直用的都是 Flarum,但是最近把我自己的各种服务都迁移到 docker 了,flarum 官方并没有支持 docker 部署,第三方的镜像又存在小瑕疵和更新问题,自己构建吧也不是很会,所以想转到 NodeBB 平台了

建议直接跳转到 自定义配置文件 章节,前面两种官方的步骤都部署失败了。

20240913 更新:这篇文章已经变成了纯踩坑记录了,最新的部署方式和解决中文搜索问题请看下文:

https://blog.imbhj.com/archives/pqXGbOsZ

编译镜像部署

首先来到官方仓库:

https://github.com/NodeBB/NodeBB

在 Releases 页面下载最新版的代码压缩包,上传到服务器中,或者直接在对应的服务器端直接 git clone

解压缩或者 clone 下来之后,根目录就有一个 docker-compose.yml 文件,修改这个文件:

version: '3.8'

services:
  nodebb:
    build: .
    # image: ghcr.io/nodebb/nodebb:latest
    restart: unless-stopped
    ports:
      - '4567:4567' # comment this out if you don't want to expose NodeBB to the host, or change the first number to any port you want
    volumes:
      - nodebb-build:/usr/src/app/build
      - nodebb-uploads:/usr/src/app/public/uploads
      - nodebb-config:/opt/config
      - ./install/docker/setup.json:/usr/src/app/setup.json

  mongo:
    image: 'mongo:7-jammy'
    restart: unless-stopped
    ports:
      - '27017:27017'
    environment:
      MONGO_INITDB_ROOT_USERNAME: nodebb
      MONGO_INITDB_ROOT_PASSWORD: nodebb
      MONGO_INITDB_DATABASE: nodebb
    volumes:
      - mongo-data:/data/db
      - ./install/docker/mongodb-user-init.js:/docker-entrypoint-initdb.d/user-init.js
  redis:
    image: redis:7.2.4-alpine
    restart: unless-stopped
    command: ['redis-server', '--appendonly', 'yes', '--loglevel', 'warning']
    # command: ['redis-server', '--save', '60', '1', '--loglevel', 'warning'] # uncomment if you want to use snapshotting instead of AOF
    volumes:
      - redis-data:/data
    profiles:
      - redis

  postgres:
    image: postgres:16.1-alpine
    restart: unless-stopped
    environment:
      POSTGRES_USER: nodebb
      POSTGRES_PASSWORD: nodebb
      POSTGRES_DB: nodebb
    volumes:
      - postgres-data:/var/lib/postgresql/data
    profiles:
      - postgres

volumes:
  mongo-data:
    driver: local
    driver_opts:
      o: bind
      type: none
      device: ./.docker/database/mongo/data

  redis-data:
    driver: local
    driver_opts:
      o: bind
      type: none
      device: ./.docker/database/redis

  postgres-data:
    driver: local
    driver_opts:
      o: bind
      type: none
      device: ./.docker/database/postgresql/data

  nodebb-build:
    driver: local
    driver_opts:
      o: bind
      type: none
      device: ./.docker/build

  nodebb-uploads:
    driver: local
    driver_opts:
      o: bind
      type: none
      device: ./.docker/public/uploads

  nodebb-config:
    driver: local
    driver_opts:
      o: bind
      type: none
      device: ./.docker/config

Docker Compose 版本 ≥3.8

如果端口没有冲突的话,是不用改任何东西的。

官方文档:

https://docs.nodebb.org/installing/cloud/docker/

官方文档给了三种数据库的部署方式,我们刚才下载的压缩包,官方默认推荐的数据库为 mongo,其他两个分别为 postgresredis

启动命令如下:

docker-compose --profile {DATABASE} up

例如:

docker-compose --profile mongo up

等待一会,就会输出:

中间会下载一些东西,如果构建失败的话,可以挂上魔法再试一试。

nodebb_1  | Config file not found at /opt/config/config.json
nodebb_1  | Starting installer
nodebb_1  | 2022-07-10T15:05:35.085Z [23] - info: Launching web installer on port 4567
nodebb_1  | 2022-07-10T15:05:47.697Z [23] - info: Web installer listening on http://0.0.0.0:4567

访问地址:http://localhost:4567

最后还是报错了,,,换在线镜像部署:

在线镜像部署

还是先下载 GitHub 仓库,然后修改一下官方仓库里下载的 docker-compose.yml 文件:(记得使用魔法或者镜像加速)


services:
  nodebb:
    # build: .    # 修改了这两行,使用在线镜像
    image: ghcr.io/nodebb/nodebb:latest
    restart: unless-stopped
    ports:
      - '4567:4567' # comment this out if you don't want to expose NodeBB to the host, or change the first number to any port you want
    volumes:
      - nodebb-build:/usr/src/app/build
      - nodebb-uploads:/usr/src/app/public/uploads
      - nodebb-config:/opt/config
      - ./install/docker/setup.json:/usr/src/app/setup.json

  postgres:
    image: postgres:16.3-alpine
    restart: unless-stopped
    environment:
      POSTGRES_USER: nodebb
      POSTGRES_PASSWORD: nodebb    # 注意修改数据库密码
      POSTGRES_DB: nodebb
    volumes:
      - postgres-data:/var/lib/postgresql/data

  redis:
    image: redis:7.2.4-alpine
    restart: unless-stopped
    command: ['redis-server', '--appendonly', 'yes', '--loglevel', 'warning']
    # command: ["redis-server", "--save", "60", "1", "--loglevel", "warning"] # uncomment if you want to use snapshotting instead of AOF
    volumes:
      - redis-data:/data
    profiles:
      - redis

volumes:
  postgres-data:
    driver: local
    driver_opts:
      o: bind
      type: none
      device: ./.docker/database/postgresql/data

  redis-data:
    driver: local
    driver_opts:
      o: bind
      type: none
      device: ./.docker/database/redis

  nodebb-build:
    driver: local
    driver_opts:
      o: bind
      type: none
      device: ./.docker/build

  nodebb-uploads:
    driver: local
    driver_opts:
      o: bind
      type: none
      device: ./.docker/public/uploads

  nodebb-config:
    driver: local
    driver_opts:
      o: bind
      type: none
      device: ./.docker/config

然后直接启动:

docker-compose up

我这里数据库更改为了 postgres ,是因为 mongo 5 不支持虚拟 CPU 。

代码跑到下面这一步的时候,会有点慢,耐心等待:

[nodebb build 8/9] RUN groupadd --gid 1001 nodebb     && useradd --uid 1001 --gid 1001 --home-dir /usr/src/app/ --shell /bin/bash nodebb     && chown -R nodebb:nodebb /usr/src/app/
# 这一步大概 300 s 左右
[nodebb build 9/9] RUN npm install --omit=dev
# 这一步大概 700 s 左右

6,报错了:

20240907210319.png

没毛病啊,我是按照官方的操作步骤来的,估计是有什么问题,我再研究研究。。。。。。

自定义配置文件

创建一个 nodebb 的目录,进入目录,接下来的操作都在当前目录下。

使用官方的配置文件,会出现莫名其妙的错误,那么我们不用了,自己来写配置文件,首先创建 docker-compose.yml 文件:


services:
  nodebb:
    image: ghcr.io/nodebb/nodebb:latest
    restart: unless-stopped
    ports:
      - '4567:4567'
    depends_on:
      - postgres
      - redis
    volumes:
      - nodebb-build:/usr/src/app/build
      - nodebb-uploads:/usr/src/app/public/uploads
      - nodebb-config:/opt/config
    networks:
      - internal
      - default

  postgres:
    image: postgres:16.3-alpine
    restart: unless-stopped
    environment:
      POSTGRES_USER: nodebb
      POSTGRES_PASSWORD: xxxxxxxxx
      POSTGRES_DB: nodebb
    volumes:
      - postgres-data:/var/lib/postgresql/data
    networks:
      - internal

  redis:
    image: redis:7.2.4-alpine
    restart: unless-stopped
    command: ['redis-server', '--appendonly', 'yes', '--loglevel', 'warning']
    volumes:
      - redis-data:/data
    networks:
      - internal

networks:
  internal:
    name: nodebb-internal

volumes:
  postgres-data:
    driver: local
    driver_opts:
      o: bind
      type: none
      device: ./dataFiles/database/postgresql/data

  redis-data:
    driver: local
    driver_opts:
      o: bind
      type: none
      device: ./dataFiles/database/redis

  nodebb-build:
    driver: local
    driver_opts:
      o: bind
      type: none
      device: ./dataFiles/build

  nodebb-uploads:
    driver: local
    driver_opts:
      o: bind
      type: none
      device: ./dataFiles/public/uploads

  nodebb-config:
    driver: local
    driver_opts:
      o: bind
      type: none
      device: ./dataFiles/config

记得修改数据库密码。

创建本地挂载存储卷的位置:

mkdir -p ./dataFiles/database/postgresql/data
mkdir -p ./dataFiles/database/redis
mkdir -p ./dataFiles/build
mkdir -p ./dataFiles/public/uploads
mkdir -p ./dataFiles/config

启动容器:

docker-compose up

请使用魔法,因为 nodeBB 容器在第一次创建的时候会进行 npm install ,官方默认是国外源,目前没办法修改,所以不使用魔法的话,大概率会失败。

等待输出如下信息的时候:

nodebb-1    | Starting installation session
nodebb-1    | 2024-09-08T01:45:00.674Z [7] - info: Launching web installer on port 4567
nodebb-1    | 2024-09-08T01:45:00.974Z [7] - info: [installer] Found setup.json, populating default values
nodebb-1    | 2024-09-08T01:45:05.666Z [7] - info: Web installer listening on http://0.0.0.0:4567

访问 http://主机IP:4567 来进行 nodeBB 的安装:

20240908094600.png

URL 使用自己的域名,如果 IP 访问的话,那就设置成 IP,否则可能会有资源跨域的问题,创建好管理员用户,数据库使用 PostgreSQL,设置好数据库的密码,等待安装完成

20240908094909.png

安装完成之后终端会输出如下信息:

nodebb-1    | 2024-09-08T01:49:28.756Z [4567/54] - info: 🎉 NodeBB Ready
nodebb-1    | 2024-09-08T01:49:28.757Z [4567/54] - info: 🤝 Enabling 'trust proxy'
nodebb-1    | 2024-09-08T01:49:28.759Z [4567/54] - info: 📡 NodeBB is now listening on: 0.0.0.0:4567
nodebb-1    | 2024-09-08T01:49:28.759Z [4567/54] - info: 🔗 Canonical URL: https://xxxxxx.com

web 端进度条走到头之后,重新访问一下:

20240908095501.png

没问题之后 Ctrl+C 结束终端,执行 docker-compose down 删除容器,重启并后台部署容器:

docker-compose up -d

就可以正常使用啦~

容器启动之后可能并不能直接访问,得等好一会儿。

设置中文

登录后台,设置->基本->通用->默认语言->保存设置,刷新:

20240909195445.png

启用搜索插件

登录后台,在主页点击 未安装搜索插件

找到 db-server,点击启用:

看到这个提示之后点击左下角的重启,等待重启完毕,然后刷新页面,再回到仪表盘界面就显示已经安装完毕了。