本文记录使用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 {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name _;
ssl_certificate /config/keys/cert.crt;
ssl_certificate_key /config/keys/cert.key;

发现证书的存放位置为config/keys,且需要命名为cert。当然位置及名字可以根据自己的需要修改。将证书放入对应位置后,重新刷新页面看证书是否被正确识别,如果有问题可以重启nextcloud试试。

安装onlyoffice

安装server端

请严格按照官方的安装步骤来进行安装,可以避免掉许多坑(下文会说明)。Installing ONLYOFFICE Docs for Docker on a local server - ONLYOFFICE

记得按照文档说明将证书放入对应位置。

onlyoffice启动较慢,安装完成后等待一两分钟,按照docker配置的端口打开https://<ip>:<port>,看是否出现成功安装的界面。

image-20210817151334699

【注意】即使出现了此界面也不代表完全成功,但是没有此界面则不成功,尝试重装。

安装onlyoffice插件

点击nextcloud右上角的头像,会展开一个下拉菜单,选择应用选项。在新页面中选择Files或者Office & text分类,都可以找到ONLYOFFICE插件,点击后在详情页面点击下载并启用按钮,便会开始下载该插件。由于网络原因,部分用户可能无法下载,提示请求期间发生错误。 无法继续。这时,可以使用手动下载的方式进行安装。参考手动为Nextcloud安装插件(App)

  1. 打开onlyoffice插件地址ONLYOFFICE - Apps - App Store - Nextcloud,按照nextcloud的版本找到对应的插件版本,点击版本号即可下载,或者右键版本号选择复制链接,复制到自己常用的下载器中下载。

    image-20210817150434861

  2. 将下载到的压缩包放入config/www/nextcloud/apps中,使用 tar -zxvf onlyoffice.tar.gz解压(压缩包名字可能不同,按照实际情况修改)。

  3. 在nextcloud的应用页面,找到onlyoffice并启用。此时,就可以在设置-管理里看到ONLYOFFICE选项标签。

  4. ONLYOFFICE Docs地址地址处,填入server端的地址及端口号即可。

    image-20210817152346270

配置

前面的安装工作完成后,就进入到了配置阶段,在这一阶段遇到了非常多的问题,下面按步骤进行说明。

  1. 填入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,即可。修改配置文件有两种方法:

    1. 直接修改配置文件config.php,此文件位于config/www/nextcloud/config中。
    2. 通过occ命令修改,连接到容器的控制台,执行occ config:system:set allow_local_remote_servers --value true --type bool。(linuxserver发布的镜像不需要在命令前加上sudo -u www-data php前缀)
  2. 报错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服务器地址时,仍然显示该错误,暂时无解,只能关闭证书校验(只在本地使用问题不大)。

  3. 报错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目录似乎也用不到,一并取消映射。重启容器后问题解决。

  4. 报错文档服务内部发生异常: Error while downloading the document file to be converted.

    很明显是onlyoffice在下载nextcloud存储的文档时,出现了错误,猜测是nextcloud的证书问题。想到前面nextcloud连接onlyoffice也是类似的证书问题,尝试寻找onlyoffice跳过证书检查的方法。仔细翻阅安装文档,发现可以通过设置USE_UNAUTHORIZED_STORAGE变量为true来解决。添加该环境变量后重启容器,问题解决。