安装nextcloud和onlyoffice遇到的坑
本文记录使用docker安装nextcloud和onlyoffice时,遇到的问题及解决方法。
本机的操作系统为TrueNAS-SCALE-21.06-BETA.1,docker版本20.10.6。
安装nextcloud
推荐使用linuxserver发布的镜像,配置参数少,默认使用nginx。linuxserver/nextcloud - Docker Image | Docker Hub
下文所说的config目录均为映射的container内部的/config目录,例如使用 -v /path/to/appdata:/config
,则下文的的config/目录即为/path/to/appdata/
。
安装完成后,由于映射的443端口,因此需要配置证书。考虑到仅在局域网内使用,因此还是使用上篇文章生成的web证书。
查看config/nginx/site-confs/default
配置文件,截取部分内容如下:
server { |
发现证书的存放位置为config/keys,且需要命名为cert。当然位置及名字可以根据自己的需要修改。将证书放入对应位置后,重新刷新页面看证书是否被正确识别,如果有问题可以重启nextcloud试试。
安装onlyoffice
安装server端
请严格按照官方的安装步骤来进行安装,可以避免掉许多坑(下文会说明)。Installing ONLYOFFICE Docs for Docker on a local server - ONLYOFFICE
记得按照文档说明将证书放入对应位置。
onlyoffice启动较慢,安装完成后等待一两分钟,按照docker配置的端口打开https://<ip>:<port>
,看是否出现成功安装的界面。
【注意】即使出现了此界面也不代表完全成功,但是没有此界面则不成功,尝试重装。
安装onlyoffice插件
点击nextcloud右上角的头像,会展开一个下拉菜单,选择应用
选项。在新页面中选择Files
或者Office & text
分类,都可以找到ONLYOFFICE
插件,点击后在详情页面点击下载并启用
按钮,便会开始下载该插件。由于网络原因,部分用户可能无法下载,提示请求期间发生错误。 无法继续
。这时,可以使用手动下载的方式进行安装。参考手动为Nextcloud安装插件(App)。
-
打开onlyoffice插件地址ONLYOFFICE - Apps - App Store - Nextcloud,按照nextcloud的版本找到对应的插件版本,点击版本号即可下载,或者右键版本号选择复制链接,复制到自己常用的下载器中下载。
-
将下载到的压缩包放入
config/www/nextcloud/apps
中,使用tar -zxvf onlyoffice.tar.gz
解压(压缩包名字可能不同,按照实际情况修改)。 -
在nextcloud的
应用
页面,找到onlyoffice并启用。此时,就可以在设置
-管理
里看到ONLYOFFICE
选项标签。 -
在
ONLYOFFICE Docs地址
地址处,填入server端的地址及端口号即可。
配置
前面的安装工作完成后,就进入到了配置阶段,在这一阶段遇到了非常多的问题,下面按步骤进行说明。
-
填入onlyoffice的本地服务器地址,提示
Host violates local access rules
参考github上的两篇issue,Nextcloud 19 compatibility · Issue #293 、[NC22] Host violates local access rules · Issue #24 ,配置文件中添加
'allow_local_remote_servers' => true,
即可。修改配置文件有两种方法:- 直接修改配置文件config.php,此文件位于
config/www/nextcloud/config
中。 - 通过occ命令修改,连接到容器的控制台,执行
occ config:system:set allow_local_remote_servers --value true --type bool
。(linuxserver发布的镜像不需要在命令前加上sudo -u www-data php
前缀)
- 直接修改配置文件config.php,此文件位于
-
报错
cURL error 60: SSL certificate problem: unable to get local issuer certificate (see https://curl.haxx.se/libcurl/c/libcurl-errors.html) for https://xxx:xx/healthcheck)
应该是onlyoffice的证书颁发机构不受信任(毕竟是自签名的证书),尝试按照使用Docker及自签署证书为Nextcloud配置Onlyoffice(二)的说明将ca证书放入nextcloud容器中,更新证书时提示
WARNING: ca-certificates.crt does not contain exactly one certificate or CRL: skipping
,但是在终端中使用curl命令连接onlyoffice的ip时没有报错。此时,在nexecloud页面上保存onlyoffice服务器地址时,仍然显示该错误,暂时无解,只能关闭证书校验(只在本地使用问题不大)。
-
报错
Bad healthcheck status
在浏览器中自己打开
https://<ip>:<port>/healthcheck
,返回false
,判断是onlyoffice服务端的问题。查询onlyoffice的输出信息(可以通过portainer或者docker logs命令),可以看到error: password authentication failed for user "onlyoffice"
的错误信息,猜测可能是容器内部连接到数据库时出错,大概率是映射的数据库目录的读写权限出了问题。因此,取消了/var/lib/postgresql
目录的映射,同时/var/lib/onlyoffice
目录似乎也用不到,一并取消映射。重启容器后问题解决。 -
报错
文档服务内部发生异常: Error while downloading the document file to be converted.
很明显是onlyoffice在下载nextcloud存储的文档时,出现了错误,猜测是nextcloud的证书问题。想到前面nextcloud连接onlyoffice也是类似的证书问题,尝试寻找onlyoffice跳过证书检查的方法。仔细翻阅安装文档,发现可以通过设置
USE_UNAUTHORIZED_STORAGE
变量为true
来解决。添加该环境变量后重启容器,问题解决。