用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、修改以下几项内容
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