docker-compose部署nodebb

发布于 2022-04-20  92 次阅读


Mongodb,你为什么这么烦。

关于NodeBB

Nodebb是一个基于nodejs的论坛平台,虽然看起来开源论坛平台是discourse一家独大,但是discourse的docker部署居然都要通过脚本,官方容器也完全没有做服务分离,实在是不太想用。

一番寻找之后发现了NodeBB,看起来功能很全面,部署也没那么麻烦,最重要的是还有node加分:neckbeard:

官方文档

docker-compose.yml

先用git拉取代码,官方提供了docker-compose.yml,修改之后即可使用。
我的docker-compose.yml:

version: '3.5'

services:
  node:
    build: .
    container_name: nodebb
    restart: unless-stopped
    depends_on:
      - db
    networks:
      - external_network
      - internal_network
    ports:
      - "127.0.0.1:3000:4567"
    volumes:
      - ./config.json:/usr/src/app/config.json

  db:
    image: mongo
    container_name: nodebb-db
    restart: unless-stopped
    expose:
      - 27017
    environment:
      MONGO_INITDB_ROOT_USERNAME: root
      MONGO_INITDB_ROOT_PASSWORD: xxxxxxxxxxx
    networks:
      - internal_network
    volumes:
      - ./mongo:/data/db

networks:
  external_network:
  internal_network:
    internal: true

一开始要先注释掉nodebb的volumes,不然不会进入初始化设置页面。

数据库初始化

我感觉Mongodb每次使用的初始化实在是很麻烦,但是NodeBB只支持Mongodb和redis,相比之下感觉还是Mongodb好些。

首先运行db容器之后,用docker exec -ti nodebb-db /bin/bash进入容器,运行mongouse admin切换到admindb,db.auth("root", "xxxxxxxxxxx")登陆(不然没法创建用户),然后use nodebb切换数据库,根据官方文档db.createUser( { user: "nodebb", pwd: "xxxxxxxxxxx", roles: [ "readWrite" ] } )创建用户,db.grantRolesToUser("nodebb",[{ role: "clusterMonitor", db: "admin" }])赋予数据权限。

Nginx反代

创建完成后配置反代,我的Nginx配置文件:

server {
  listen 443 ssl http2;
  listen [::]:443 ssl http2;
  server_name example.com;

  access_log /var/log/nginx/forum-access.log;
  error_log /var/log/nginx/forum-error.log;

  # Uncomment these lines once you acquire a certificate:
  ssl_certificate     /etc/nginx/ssl/forumfullchain.cer;
  ssl_certificate_key /etc/nginx/ssl/forumkey.key;

    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Host $http_host;
    proxy_set_header X-NginX-Proxy true;
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_redirect off;

    # Socket.io Support
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";

    gzip            on;
    gzip_min_length 1000;
    gzip_proxied    off;
    gzip_types      text/plain application/xml text/javascript application/javascript application/x-javascript text/css application/json;

  root /nodebb;

location ~ ^/assets/(.*) {
    try_files /build/public/$1 /public/$1 @proxy;
}

  location / {
    try_files $uri @proxy;
  }

  location @proxy {
    proxy_pass http://localhost:3000;
  }

}

访问站点地址会出现配置页面,信息按照docker-compose.yml填就可以,admin用户也在这个页面创建。初始化完成之后,docker exec -ti nodebb-db /bin/bash进入容器,cat /usr/src/app/config.json查看config.json的内容并且全部复制到host的./config.json中,然后就可以去掉nodebb的volumes的注释并且最后重新docker-compose up -d一次。

保存上传数据及插件

如果需要保留数据,则要添加相应的volume。并且由于容器内是用node用户运行的,相应的路径都要把owner改成1000:1000,不然会权限出错。

如果要保留插件,得把容器内的node_modules文件夹复制出来:
docker cp nodebb:/usr/src/app/node_modules/ ./

最后的volumes块:

    volumes:
      - ./config.json:/usr/src/app/config.json
      - ./public/uploads:/usr/src/app/public/uploads
      - ./build:/usr/src/app/build
      - ./logs:/usr/src/app/logs
      - ./node_modules:/usr/src/app/node_modules

分别是配置文件,上传路径,日志路径,插件路径。

重启运行后进入容器运行./nodebb build

相关链接

重置admin密码


Sup