Docker部署NodeBB
本文最后更新于 2024-09-13,文章内容距离上一次更新已经过去了很久啦,可能已经过时了,请谨慎参考喵。
前情提要
之前一直用的都是 Flarum,但是最近把我自己的各种服务都迁移到 docker 了,flarum 官方并没有支持 docker 部署,第三方的镜像又存在小瑕疵和更新问题,自己构建吧也不是很会,所以想转到 NodeBB 平台了
建议直接跳转到 自定义配置文件 章节,前面两种官方的步骤都部署失败了。
20240913 更新:这篇文章已经变成了纯踩坑记录了,最新的部署方式和解决中文搜索问题请看下文:
编译镜像部署
首先来到官方仓库:
在 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
。如果端口没有冲突的话,是不用改任何东西的。
官方文档:
官方文档给了三种数据库的部署方式,我们刚才下载的压缩包,官方默认推荐的数据库为 mongo
,其他两个分别为 postgres
和 redis
启动命令如下:
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,报错了:
没毛病啊,我是按照官方的操作步骤来的,估计是有什么问题,我再研究研究。。。。。。
自定义配置文件
创建一个 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 的安装:
URL 使用自己的域名,如果 IP 访问的话,那就设置成 IP,否则可能会有资源跨域的问题,创建好管理员用户,数据库使用 PostgreSQL,设置好数据库的密码,等待安装完成
安装完成之后终端会输出如下信息:
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 端进度条走到头之后,重新访问一下:
没问题之后 Ctrl+C
结束终端,执行 docker-compose down
删除容器,重启并后台部署容器:
docker-compose up -d
就可以正常使用啦~
容器启动之后可能并不能直接访问,得等好一会儿。
设置中文
登录后台,设置->基本->通用->默认语言->保存设置,刷新:
启用搜索插件
登录后台,在主页点击 未安装搜索插件 :
找到 db-server,点击启用:
看到这个提示之后点击左下角的重启,等待重启完毕,然后刷新页面,再回到仪表盘界面就显示已经安装完毕了。