原文连接php
为何选择了NodeBB?
我也不知道~~~ <!--more-->
NodeBB官方Githubhtml
NodeBB中文论坛node
NodeBB官方文档python
NodeBB中文文档nginx
此处的方式是Docker安装部署( https://hub.docker.com/r/node...
不用考虑环境配置问题,可是相应的也会有一些弊端
好比文件的修改等变得麻烦
下方为nodebb镜像的YAMLgit
cumt: image: index.docker.io/nodebb/docker:v1.9.3 privileged: false restart: always ports: - 4567:4567 volumes: - /bbs/:/usr/src/app/config #为了修改文件方便,加了一个文件夹方便和宿主机文件交换 - /bbs/public/uploads:/usr/src/app/public/uploads #同步上传的文件到宿主机
同时关于docker的管理推荐使用中国的容器管理平台,镜像会直接拉取国内复制来的镜像
工做室目前用的是https://www.daocloud.io/github
拉取nodebb镜像并生成容器后,再拉取一个mongodb镜像做为数据库容器
为了维护方便,单独使用一个容器,之后的nodebb论坛的升级能够直接拉取新的版本镜像
安装新版本的时候填写数据库容器内网地址就行啦~
在成功生成mongodb容器后,要首先进入容器建立咱们须要的数据库名字和此数据库相应的用户密码
官方也有介绍sql
下面是mongo镜像的YAML,咱们经过数据卷能够同步更新数据到宿主机mongodb
mongodb: image: library/mongo:3.4.15 privileged: false restart: always ports: - 27017:27017 volumes: - /var/lib/docker/volumes/mongoconfig/_data:/data/configdb - /var/lib/docker/volumes/mongodata/_data:/data/db
通常国内服务器会配置安全组,为了方便你也能够暂时开放mongodb容器外网端口
在本机远程链接进行配置,这里推荐一款windows可视化工具Robo 3Tdocker
而后咱们经过nginx代理设置咱们须要的域名就好了~
这样安装以后你就能够配置本身的bbs了,这样的方式会给咱们省去不少环境配置的麻烦
这时候你须要修改容器config.json里面的url为你的自定义域名
nodebb并很差升级,按照官方文档的操做咱们须要首先备份数据库和用户上传文件
可是咱们使用了docker几句能够避免这些问题
而后咱们要作的就是更新docker镜像并从新生成容器,配置相应的数据库就好了
./nodebb reset -a
定时备份数据库并迁移到其余机器是件很重要的事情 数据库备份
因为咱们使用的是docker容器,备份命令就须要链接咱们相应的内网地址
mongodump -h 172.22.0.12:27017 -u 用户名 -p 密码 --authenticationDatabase=数据库名 -d 数据库名
咱们仍是最好按期检查一下
若是你要恢复数据库文件,咱们能够经过咱们保存的备份文件上传到新的mongodb外置的数据卷
即好比:
把备份文件放到宿主机的 /var/lib/docker/volumes/mongodata/_data 容器中直接打开 /data/db 而后解压以后(tar -zxvf xxx.tar.gz) 运行 mongorestore -u nodebb -p yourpassword --authenticationDatabase=nodebb -d nodebb --drop dump/nodebb 便可
旧的论坛数据库是Mysql,彻底不一样的数据库类型,也是不可能同样的数据库字段
可是论坛的性质使得他们数据字段部分是相同的,咱们只须要过滤筛选咱们所须要的数据,而后经过NodeBB接口插件导入咱们要用的信息就好了
其实这个过程并不具备技术难度,只是比较复杂和麻烦
咱们首先须要熟悉Dz和nodebb数据库各个字段 DZ数据库字典
咱们都知道Mysql数据库外键很方便咱们联表或者关联查询,经过这种方式把咱们须要的用户信息组成json
经过NodeBB接口post到mongodb(若是不使用api直接导入到mongo,咱们还要本身组合mongo字段)
因为nodebb-api用户新建只支持用户名和密码,邮箱的POST,咱们能够新建成功后,记录下新建成功的用户uid,而后经过update用户信息来更新用户资料
关于用户的头像,论坛等cms通常都有本身的用户头像文件命名规则
对于dz论坛本身获取头像的的代码以下,咱们能够经过模仿流程来获取头像文件夹的路径
function get_avatar($uid, $size = 'middle', $type = '') { $size = in_array($size, array('big', 'middle', 'small')) ? $size : 'middle'; $uid = abs(intval($uid)); $uid = sprintf("%09d", $uid); $dir1 = substr($uid, 0, 3); $dir2 = substr($uid, 3, 2); $dir3 = substr($uid, 5, 2); $typeadd = $type == 'real' ? '_real' : ''; return $dir1.'/'.$dir2.'/'.$dir3.'/'.substr($uid, -2).$typeadd."_avatar_$size.jpg"; } =============================================== # python模仿流程 def get_avatar(uid): uid = str(abs(int(uid))) uid_length = len(uid) if uid_length < 9: uid = '0'*(9-uid_length)+uid dir1 = uid[0:3] dir2 = uid[3:5] dir3 = uid[5:7] dir4 = uid[7:9] old_avatar = os.path.join( basedir, 'avatar/'+dir1+'/'+dir2+'/'+dir3+'/'+dir4+'_avatar_middle.jpg') return old_avatar ... if avatarstatus != 0: old_avatar = get_avatar(uid) new_avatar_address = '/assets/uploads/profile/%a-profileavatar.jpg' % adduser_uid new_avatar = os.path.join(basedir, 'profile/%a-profileavatar.jpg' % adduser_uid) shutil.copy(old_avatar, new_avatar) update_data["picture"] = new_avatar_address update_data["uploadedpicture"] = new_avatar_address
理论和以上同样
咱们须要先研究清楚DZ数据库字典,好比这样的字典
咱们根据相应数据字段来组合咱们须要的mongodb字典
咱们须要注意的是,在这个表段的组合以后咱们也须要update相应的帖子资料
更新帖子的发表时间,以及发表做者(个人脚本里只更新了帖子的做者,没有更新帖子发表字段,所以形成用户没有记录帖子发表数,可是帖子详情页做者显示正确)