DSM7.0的升级和Nextcloud的恢复

最近在使用群晖的时候遇到了一点困难,解决过程耗费了不少精力,但也有所得,记录一下,也许对有类似经历的人会有所帮助。

1、事情的起因

前段时间,看到群晖提醒有DSM7.0更新,很多人都不建议升级,特别是dcoker不兼容,考虑docker一旦出问题,它上面运行的大量服务都有麻烦,这个处理过程会累死人的,所以选择忽视,但群晖每天提醒,强迫症犯了,选择更新,有几个套件有点问题,按网络上的方法基本解决了,docker各项服务运行正常并没有报错,但在启动nextcloud用onlyoffice编辑文章时,出现以前编辑文章无法保存的问题,表现为文件的打开、关闭、保存动作一切过程都能进行,且没有报错,但将保存过的文件重新打开,发现新写入的数据并没有真正保存下来,新建文章却正常,反复确认系统各方面功能设置都没有问题,网络上找了半天也没有相关资料,初步认为是DSM造成的。

没有其它解决办法,想到的唯一方法就是先onlyoffice升级,升级过程正常,但升级后仍然有该问题,再考虑是nextcloud的问题,选择nextcloud升级,但进行升级后系统提示版本跨度太大,无法升级,也无法进入nextcloud工作界面。

2、重装nextcloud

2.1 利用最新的镜像重新建立nextcloud容器,始终无法连接MD10数据库,折腾了一天被迫改用sqlite数据库,系统正常安装完成。

2.2 重新集成onlyoffice,系统正常运行,不能保存问题解决。

3、恢复以前数据,问题重现

3.1 考虑到以前较长时间使用nextcloud,有不少老数据,尝试如何恢复,中间经历了无数次挫折,终于找到恢复数据的关键所在。

a 关闭容器,进入nextcloud的映射数据文件夹,删除除config文件夹和单个文件外的所有文件夹

b 用Hyperback从以前备份的数据中还原以上删除的文件夹

c 启动容器,进入系统,相关文件和组件基本都恢复,可能有的组件因版本升级无法兼容,如果用以前相同版本的镜像进行恢复,效果会非常好。

3.2 重新进入系统,编辑以前的文件,不能保存的问题重新出现。

这说明,恢复的文件中有限制onlyoffice的相关数据。

4、解决onlyoffice不能保存问题

这个问题网络上没有任何相关资料,只能自己研究nextcloud的相关配置和文件,经过摸索,找到解决办法。

在映射文件data/user项下的数据文件:

其中的onlyoffice、files_versions、files_trashbin中都有以前工作中保留的数据,files_versions大概就是历史版本信息,把这几个文件夹中的数据全部删除。

其中files_versions中保留了以前编辑文章的所有历史版本。

可能是nextcloud内部存在文件安全机制,DSM系统更新后新生成的数据写入请求不能被以前编辑的文章认可,禁止写入。

5、完整恢复nextcloud

虽然以上简单恢复了数据,但整个nextcloud并没有完全安装好,一是数据库没有恢复,以前的配置没有了,二是一直有报警,使用sqlite数据库不合适,三是用最新的镜像建立容器,很多组件无法运行。

5.1 重新下载以前版本的镜像,并建立容器,连接好MD10 数据库,按上述方法恢复运行。

5.2 关闭容器

a 按上述方法将映射数据中的相关文件夹删除,并按上述方法从备份中还原被删除的文件。

b 打开数据库,将nextcloud数据库导出为sql文件。

c 将nextcloud的数据库删除,再新建同名空数据,导入以上备份的数据库。

5.3 运行容器,基本除邮件外所有帐户信息均保留下来,问题最终解决。

小结:

1、DSM7.0 总体上没有大的问题,除了两个github上的专门应用无法更新,各项应用均较好运行,但似乎系统消耗比6.2版本要大一些。

2、 onlyoffice文件编辑中的不能保存问题由系统不兼容和文件写入权限造成,nextcloud的写保护问题只需要删除nextcloud保存的部分历史信息,解除系统对已经编辑过的文件的封锁。如果遇到文件写入权限问题在filestation中解决,升级DSM7.0后,权限管理与前版不同,这个也是造成这次困难的一个重要因素,解决问题大家多试试可以找出答案,因为不能写入的文件全部位于外挂存储中,以文件服务形式接入群晖就存在权限管理问题。

其实根本没有必要升级和重装onlyoffice及nextcloud,浪费了大量的时间和精力。

3、nextcloud安装中几个问题的解决

3.1 提示没有安装SMB,无法挂载SMB/CIFS外部存储,进入nextcloud系统后台,安装samba客户端,网络上有教程。

3.2 编辑文章时提示没有正确的解密文件私钥,原因是启用了客户端的文件解密,进入设置、应用,禁用系统默认的文件加密模块组件。

根据自己的理解,nextcloud有两套文件数据保护措施,一套是加密和解密机制,系统中启用加密服务器,在终端上利用私钥进行解密,这样编辑过的文件在系统外是不能打开的。另一套措施是系统内保护,在编辑文章时,系统记录了版本信息,也记录了系统和客户端的特有信息,当系统升级破坏了这些信息的认证,就表现为锁定原有文件,起到保护作用,如果将文件拷贝到系统外,能够被任何终端修改。

3.3 尝试过用nextcloud21、22等版本建立容器,各种方法都无法连接MD10数据库,但更早的版本很容易连接数据库,所以最后是利用原镜像恢复了系统,再升级到更新的版本。

3.4 建议升级新版本的onlyoffice,新版本对中文的支持很好,同时集成了相关插件,其中的google翻译是神器。

3.5 新版的nextcloud网络方面可能存在问题,外挂存储非常困难,原来SFTP可以用局域网地址连接,现在无法使用,外网用域名很难连接,偶尔网络可以通,基本连不上,只好改用IP地址,但公网IP几天就变一次很麻烦。另外用SMB连接出现dcoker莫名高负荷运行、提示网络连接不上,虽然外挂是正常的,但体验感觉非常不好。

追加记录

又经过了大概一个月的使用,期间做了大量的优化配置,回过头来再试一试上述遇到的问题,特别是SFTP的挂载问题,经过比较发现,可能以前的一些判断和结论是错误的,这里就不修改以前写的东西了,虽然是错误但这是一次值得记忆的经验。

升级以后,系统共享连接和外部挂载出现严重问题,一方面是群晖DSM进行了安全升级,SMB共享接入要求提高,很多以前的应用都反应连接不上。另一方面是nextcloud与DSM之间网络连接稳定性下降。所以基本上可以判断,nextcloud挂载连接不上和onlyoffice编辑中经常出现更名、保存时好时坏的原因是网络问题。

解决这个问题的思路不是改变两个系统的网络连接,而是要从nextcloud工作的基本原理上去改进。因为两个系统网络连接遵守基本的协议,如果不从底层进行重新配置是无法改变两者的基本连接,显然这个解决方案是不可行。

nextcloud工作基本原理与本地应用不同,它是基于网络和web的技术,从终端接受内容后先将数据写入缓存,然后再写入存储和变更数据库,读取内容也是通过网络协议请求读取数据存储并读取数据库中记录的状态。而本地应用工作时是通过操作系统直接写入存储。也就是说nextcloud的写入和读取都是间接的,中间要通过网络进行数据缓存和协议转发,如果网络出问题则读写操作会出问题,同时如果缓存出问题也会导致读写失败,或者两者配合不好也不行。

经过了系统优化后成功用SFTP进行外部存储挂载,并且工作稳定,期间的主要改变就是给nextcloud连接了redis缓存数据库,不但实现了稳定连接,且文件读取反应迅速,远程编辑时几乎接近了本地读写的速度,体验大幅提高。

这里也想到为什么独立的公有云办公体验是可以的,而个人搭建的云办公一般效果不太好,最主要是硬件、软件和系统配套都要跟上,个人很难在预算和知识有限的条件下建立一个保证性能的系统。

关于文档编辑器几点总结

用过多种文档编辑器,总结几点感受,本来已经写了不少,结果浏览器崩溃,前面写的都丢了,再写就简单一点了。

1、不同编辑器异同取舍

a win和mac桌面环境用msoffice是最好的选择,wps感受也不错,功能齐全、高效稳定。

Linux桌面环境似乎只有wps好选,其他几种很难运行。

b ios手机用wps比较好,msoffice太慢太臃肿。真正在手机上完整保持格式查看并打印word等文档,一定要下这两个,其它预览一下还可以,编辑打印都难用。

c 云服务web环境编辑文档,据说google和ms的在线文档都不错,可惜一般人用不了,wps也有在线的,还有很多不知名的,大家都可以试试。

d 自己搭建局域网在线编辑器,强烈推荐onlyoffice,基本功能都有,文档协作非常好用。

以上除了msoffice桌面版外,全部都有免费版,而且足够你使用。

2、各种编辑器文件格式兼容,但不是同一个东西

在服务器上安装好用nextcloud集成的onlyoffice后,打开原来msoffice编辑的文档,竟然是只读查看模式,无法修改。怀疑是文档目录读写权限问题,排查后确认不是。再用另外一种在线编辑器打开,也是只读查看模式,但提示可导入该编辑器中。经过反复比较,认为是各种软件处理不是自己生成文档时的模式造成的不同打开效果。

a 各种软件是不同的,它们在编辑文档时的程序命令甚至生成的文档数据也是不同的,在自己的编辑环境中,看似生成的文档都是docx格式,实际是不完全相同的文件。

b 各种软件打开另外软件生成的文档时选择的方式是不一样的。msoffice和wps桌面版在打开文档时,常常直接将其转换成自己的格式并在自己的环境中编辑。还有一些编辑器则打开文档时直接是查看模式,然后提供转换选项,只有转换后才能编辑。

这个问题可以理解为各种软件在处理文档时与ms保持兼容的水平,有些可能是处理后的文件直接是高度兼容ms的,有的则是在文件输入输出时有很大的差异,但可以最终指明输出ms兼容文档,比如onlyoffice就是这样,它直接生成的文档是docx后缀,但是文件菜单里的选项是下载为×××格式,表明真正兼容ms的文档是要专门输出的。

总之,同一个文件用号称兼容的软件打开,呈现的结果可能是不同的,也就多了一个步骤。这也能说明,手机上打开一个文件,格式很可能和我们在桌面看到的不一样。

nextcloud和onlyoffic

用Docker安装Nextcloud 出现无法连接外部数据库以及集成onlyoffice时报错,尤其是nextcloud和onlyoffice的集成几乎成了’世界性’难题,我尝试的一些方法也许可以供大家参与。

一、当前对这套系统的安装普遍的看法

1、两个软件不要在一个局域网内安装,更不能在同一台服务器上安装。

2、两个软件只能进行SSL安全连接,都要用CA证书或自签证书。

二、我折腾以后的几点体会

1、局域网安装可以,安装在同一台电脑上也可以。

2、用SSL以https连接可以,内网用ip连接也可以,用http连接还是可以的。

3、nextcloud这个软件在网络设计上有问题,最少不够聪明,应该尽快改进。对nextcloud 和onlyoffice地址格式要求不清楚,是最大的问题。

三、几个问题解决的基本经过

1.在使用nextcloud 集成onlyoffice时,会出现提示 :host violates local access rules

cd到/var/www/html/config,需要在配置文件 config.php 中增加下列语句,允许外网远程访问:

‘allow_local_remote_servers’ => true,

2.连接数据库提示错误,确认用户名密码正确,多试几次。这位网友的文章可供参考。

https://post.smzdm.com/p/a5kq92vk/

3、nextcloud集成onlyoffice时报错,一般安装步骤可以参考网络,错误会有各种信息,最后反复出现如下提示:

Error while downloading the document file to be converted.

这个时候,nextcloud和onlyoffice无论在内网还是在外网均能独立访问,单个软件内部操作都没有问题,就是没有办法将两个软件集成在一起,百度了全网多数环境不同不具有参考价值,但有两位网友的分析文章给了我很大的启发,他们的观点是:

a nextcloud集成onlyoffice文档服务器时,会根据你打开nextcloud时的环境生成文档服务器的请求链接。这句话的意思是要么按纯外网环境配置,要么按纯内网环境配置,如果集成链接地址中内外网地址混填,则很有可能两个软件不能正常交互。

b 生成的服务请求链接要在nextcloud和onlyoffice自身环境得到正确的域名(ip)解释。

c 最终所有的问题在于两者相互传递信息时能正确连接。

根据这个思路,做了两个重要改进:

第一,建立内网DNS SERVER,我是群晖系统比较方便,设置好后使得外网使用的域名在内网也能得到解释。这样做了之后,你无论是在外网还是在内网都能以域名访问。

第二,用不同的组合填入onlyoffice服务器设置的三个选项中,但一直不成功。

后来想到不接自己的服务器,先连一下onlyoffice的演示服务器,看看需要什么样的条件,发现“用于文档编辑服务内部请求的服务器的地址”需要填写正确的nextcloud外网地址。然后尝试在“文档编辑服务地址”填入onlyoffice服务器的外网地址,成功连接。中间那个可以不填。

4、还是在nextcloud中打开onlyoffice文件的问题

这次出现的问题是,两者都集成好了,平时使用也没有什么问题,但在单位内网连接到外网打开nextcloud中的office文档时,报告无法下载文件,文件无法保存并返回文件列表,问题的现象是nextcloud能调用onlyoffice,但onlyoffice打不开文件。

以上问题现象说明,nextcloud能与onlyoffice正确连接,但onlyoffice有问题,提示无法下载可能表示onlyoffice无法读取文件,而提示无法保存可能表示onlyoffice无法按设置找到存储文件的地方,这可能是一个网络连接问题。

回到局域网环境下调用onlyoffice,发现能顺利打开office文档,再回到外网环境下调用onlyoffice,发现问题解决。

结合前面安装集成onlyoffice时解决问题的过程,这种情况似乎还是一个网络访问的问题,两者集成是相互调用时地址解释的问题,而onlyoffice读取保存文件仍然有一个地址解释的问题,在单位内网连接外网时经过了多次NAT,又是用的域名访问,造成不能正确翻译IP地址,当在局域网用域名调用后,onlyoffice找到了域名对应的正确IP,再回外网调用时可以利用内部缓存正确找到外网中的服务器。

以上仅是推断,没有花时间去验证,可能不正确。

三、关于onlyoffice的中文字体

1、对编辑要求高的人,可以在系统fonts目录加入中文字体,onlyoffice字体下拉菜单长,设置字体的时候找到需要字体比较费劲,要求不高的人完全可以删除onlyoffice的自带的字体,利用系统字体就可以了。

cd /var/www/onlyoffice/documentserver/core-fonts/
rm -rf *

但建议/documentserver/core-fonts/目录中最少保留一个字体 ancient-scripts,这个是数学公式字体,如果删除写学术文章就不好办了。

2、添加进系统字体目录的中文字体最好不要用相关软件进行名称属性的修改,修改后在onyoffice中使用没有问题,但当你把写好的文件保存为docx等格式并下载到本地电脑上,再用微软office打开时就有可能会丢掉全部字体格式,因为word找不到对应的字体,如果中文字体来自windows,也不改动,则下载文件打开时word就能正确识别。

四、关于Nextcloud上传文件限制

我的系统信息中显示PHP对上传文件大小有限制:

为了证实实际限制情况,做了几个上传文件实验,最大传了一个1.5GB的文件,并没有实际的限制,并且传输速度也没有任何异常。所以,系统到底有没有文件大小的限制可以先试一下。

四、onlyoffice文档服务器限制连接服务

默认状态下onlyoffice文档服务器安装后是没有连接限制的,在可以外网访问的情况下,任何一台电脑输入服务器的地址都能连接上去,无限制的访问显然面临基本的安全问题。onlyoffice内部的配置文件有用于限制访问的内容,只要正确配置就可以增加安全性。

一种配置是用调用浏览器的地址来限制访问,只允许特定的IP访问onlyoffice服务器,这种配置方法用于公司比较合适。

另一种配置是设置JWT访问令牌,在配置文件设置好访问密钥,然后在nextcloud的集成插件中正确填入该密钥就可以了。

1、SSH进入系统后台,并修登入onlyoffice的容器内部。

2、用文本编辑器打开/etc/onlyoffice/documentserver/default.json

3、修改以下几项内容

此图像的alt属性为空;文件名为截屏2021-01-05-下午1.48.01.png

3.1 图中的几个红色的secret全部改成想要设置的密码。

3.2 将下面token中的browser、inbox、outbox三项改成true,原设置是false

4、在nextcloud的onlyoffice插件设置中,在密钥选项下的空格中填入上一步设置的密码。

五、几点说明:

1、系统环境,nextcloud和onlyoffice均是官方docker镜像最新版部署在群晖NAS上,数据库利用系统套件DB10,与其它程序共用。

2、两个软件均只映射http端口,没有使用证书,而是通过系统的反向代理安全连接到外网,所以上述地址是https。

3、通过测试表明,局域网环境两者相互连接情况复杂,以上措施实际是利用搭建内网域名服务器模拟了外网环境。如果不在外网使用,纯内网则直接用ip地址是可以连接的,而且只需要填“文档编辑服务地址”。

附两位网友的博文:

nextcloud+onlyoffice同局域网部署网络不通分析与解决(原创)https://www.jianshu.com/p/21ebf3ef5cfc

https://www.orgleaf.com/3589.html