关于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
进入容器,运行mongo
,use 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
。
Comments NOTHING