原链接为什么选择NodeBB?不知道~~~NodeBB官方GithubNodeBB中文论坛NodeBB官方文档NodeBB中文文档这里的安装方式是Docker安装部署(https://hub.docker.com/r/node...不需要考虑环境配置问题,但是相应的会有一些缺点,比如修改文件,变得麻烦。下面是nodebb的YAMLcumt镜像:image:index.docker.io/nodebb/docker:v1.9.3privileged:falserestart:alwaysports:-4567:4567volumes:-/bbs/:/usr/src/app/config#为了修改文件方便,增加了一个文件夹,方便与主机交换文件machine-/bbs/public/uploads:/usr/src/app/public/uploads#将上传的文件同步到宿主机,同时推荐使用中文容器管理平台进行docker管理的镜像image会直接拉取从国内复制过来的镜像,在https://www.daocloud.io/拉取nodebb镜像并生成容器后,再拉取一个mongodb镜像作为数据库容器。为了便于维护,使用了单独的容器。nodebb论坛以后升级可以直接拉新安装新版镜像时填写数据库容器的内网地址即可。成功生成mongodb容器后,首先要进入容器创建我们需要的数据库名和这个数据库对应的用户密码。官方还介绍了下面是mongo镜像的YAML,我们可以通过数据卷同步更新数据到宿主机mongodb:image:library/mongo:3.4.15privileged:falserestart:alwaysports:-27017:27017volumes:-/var/lib/docker/volumes/mongoconfig/_data:/data/configdb-/var/lib/docker/volumes/mongodata/_data:/data/db一般国内的服务器都会配置安全组。为了方便大家也可以暂时开放mongodb容器的外网端口,在本机远程配置,这里给大家推荐一款windows可视化工具Robo3T,然后我们可以通过nginx代理设置我们需要的域名~安装好之后就可以配置自己的bbs了。这种方式会为我们省去很多环境配置的麻烦。我访问的问题论坛一直显示连接断开。这时候需要修改容器config.json中的url,为你的自定义域名版本升级nodebb。升级并不容易。根据官方文档,我们需要先备份数据库和用户上传的文件。但是我们用docker的几句话就避免了这些问题,然后我们要做的就是更新docker镜像和重新生成容器,并配置相应的数据库。需要注意的是,我们生成新的容器后,一定要禁用所有插件,防止nodebb系统直接Crash./nodebbreset-a数据库维护和备份定期备份数据库和迁移到其他机器数据库备份由于我们使用的是docker容器,备份命令需要连接到我们对应的内网地址mongodump-h172.22.0.12:27017-u用户名-p密码--authenticationDatabase=数据库名-d数据库名我们需要做的需要注意的是,如果定时执行的脚本是在宿主机上,我们需要在宿主机上安装mongo来支持mongodump命令和这个定时备份脚本的成功输出语句并不能正确反映备份是否成功.最好定期检查。如果要恢复数据库文件,我们可以将我们保存的备份文件上传到新建的mongodb外部数据卷中。例如:把备份文件放到宿主机的/var/lib/docker/volumes/mongodata/_data容器中直接打开/data/db然后解压(tar-zxvfxxx.tar.gz)和运行mongorestore-unodebb-pyourpassword--authenticationDatabase=nodebb-dnodebb--dropdump/nodebb到discuz!数据迁移到nodebb旧论坛数据库是Mysql,完全不同的数据库类型,不可能有相同的数据库字段,但是论坛的性质使得他们的数据字段部分相同是的,我们只需要过滤数据我们需要的,然后通过NodeBB接口插件导入我们要使用的信息。其实这个过程在技术上并不难,只是比较复杂和麻烦。我们首先需要熟悉dz和nodebb数据库我们都知道Mysql数据库外键对于我们进行表的连接或者关联查询是非常方便的。这样我们需要的用户信息就由json组成,通过NodeBB接口发布到mongodb中(如果不使用api直接导入到mongo,就得自己组合mongo字段了)自nodebb-api用户创建只支持用户名和密码,以及邮箱POST,我们可以在创建成功后记录新创建的用户uid,然后通过updateuserinformation更新用户信息关于用户头像,论坛等cms一般都有自己的用户头像文件命名规则。对于dz论坛,获取头像的代码如下。我们可以模仿流程函数获取头像文件夹的路径get_avatar($uid,$size='middle',$type=''){$size=in_array($size,array('big','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=='真实'?'_真实的':'';返回$dir1.'/'.$dir2.'/'.$dir3.'/'.substr($uid,-2).$typeadd."_avatar_$size.jpg";}==================================================#python仿进程defget_avatar(uid):uid=str(abs(int(uid)))uid_length=len(uid)如果uid_length<9:uid='0'*(9-uid_length)+uiddir1=uid[0:3]dir2=uid[3:5]dir3=uid[5:7]目录r4=uid[7:9]old_avatar=os.path.join(basedir,'avatar/'+dir1+'/'+dir2+'/'+dir3+'/'+dir4+'_avatar_middle.jpg')returnold_avatar...如果avatarstatus!=0:old_avatar=get_avatar(uid)new_avatar_address='/assets/uploads/profile/%a-profileavatar.jpg'%adduser_uidnew_avatar=os.path.join(basedir,'profile/%a-profileavatar.jpg'%adduser_uid)shutil.copy(old_avatar,new_avatar)update_data["picture"]=new_avatar_addressupdate_data["uploadedpicture"]=new_avatar_address帖子和回复的迁移原理同上,需要先研究DZ数据库字典,比如这个Dictionaries,我们根据对应的数据字段组合出我们需要的mongodb字典。我们需要注意的是,这个表段合并后,我们还需要更新对应的帖子信息,更新帖子的发布时间,以及发布的作者(我的脚本中只更新帖子的作者改了,但是帖子的字段没有更新,所以用户没有记录发布的帖子数,但是帖子详情页的作者是正确显示的)如果导入HTMLParser报错,可以参考将以下文件更新到python对应的lib/site-packages文件夹中HTMLParser错误文件参考,如果请求失败,增加time.sleep,降低发送频率。dz是s级别的时间戳,nodebb是13位毫秒级别。转换公式reply_dateline=int(round(reply_dateline*1000))迁移脚本完成部分(供参考)
