我的 NextCloud 本来集成的是 Onlyoffice 在线办公的,可能由于升级了 NextCloud22.2.3 或升级了 Onlyoffice6.4.2 之后,Onlyoffice 在线办公出了一些致命的 Bug 导致不得不放弃 Onlyoffice。
Onlyoffice 致命的 Bug
这个 bug 要把他描述清楚都是一件非常困难的事情
举例说明:
现在是 9点15分,使用 PC 端 MSoffice 的 Excel 或 Word(其他文档未测试)新建文档,名称为:test.docx 或 test.xlsx ,内容为:1234567,保存文件后 NextCloud 同步到云端。
5分钟后(即9点20分),我们再次使用 PC 端或手机端 MSoffice 的 Excel 或 Word 编辑该文档,修改内容为:1234567abc ,然后再次保存。
- 此时 NextCloud 会自动创建一个 5 分钟前的版本文件(即 9点15分 保存的内容:1234567)。
10分钟后(即9点30分),无论是手机端打开该文档或 PC 端打开该文档,都能正常的显示最终修改后的内容(内容为:1234567abc),一切完美正常。
- 此时使用在线 OnlyOffice 打开该文件,也能正常显示最终修改后的完整内容(即 9点30分 保存的内容为:1234567abc)。
特别注意!现在时间是 9点30分,OnlyOffice 此时打开浏览文件内容,没有编辑文件。
5分钟后(即 9点35分),我们再次使用 PC 端或手机端 MSoffice 的 Excel 或 Word 编辑该文档,修改内容为:1234567abcEFGH,然后再次保存。
- 此时 NextCloud 会自动再次创建一个 5分钟前 的版本文件(即 9点30分 保存的内容:1234567abc)。
- 现在如果再次使用在线 OnlyOffice 打开该文档,问题就出现了!
- OnlyOffice 只能看到在 9点30分 那一刻他打开的内容(内容为:1234567abc)
- 之后无论是使用 PC 端或手机端的 MSoffice 软件增加或删减内容,OnlyOffice 一直只能看到 9点30分 那一刻的内容(即 9点30分 保存的内容为:1234567abc)
- 现在无论是使用 PC 端或手机端的 MSoffice 打开该 test 文档,内容一切正常的哟!(即 9点35分 保存的内容为:1234567abcEFGH)
5分钟后(即 9点40分),如果此时我们没有发现这个严重的问题,继续使用在线 OnlyOffice 打开该文档,(即 9点30分 保存的内容:1234567abc)然后编辑增加内容为:12345abcd8899。
- 此时 NextCloud 会自动再次创建一个 5 分钟前的版本文件(即 9点35分 保存的内容为:1234567abcEFGH)。
- 此时 test 文档内容为:12345abcd8899
- 此时无论是 PC 端或手机端 MSoffice 再次打开浏览 test 文档所看到的内容为:12345abcd8899
- 此时不知情的情况下(即 9点35分 保存的内容为:1234567abcEFGH)丢失得神不知鬼不觉!
我们需要正常的内容为:1234567abcEFGH8899
被 OnlyOffice 这个致命的 bug 造成丢失的 EFGH 内容,到底有多严重,这就可大可小了!!
所以我愤怒的禁用了 OnlyOffice
使用 docker 部署 Collabora Online 服务器
因为使用 docker 部署实在是太舒服了,几个步骤就能完成。
安装 Collabora Online 服务器
注意域名匹配自己的 NextCloud 服务器的域名 cloud\\.sgtfz\\.top
,服务器将监听localhost:9980
,自定义的字体可以直接映射本地字体到容器 --volume
# 获取Collabora Online docker 镜像
docker pull collabora/code
# 启动 Collabora Online 容器,映射本地字体文件夹到容器里 --volume
docker run -t -d -p 127.0.0.1:9980:9980 -e 'domain=cloud\\.sgtfz\\.top' --restart always --cap-add MKNOD --volume "/usr/local/share/fonts/truetype/:/opt/collaboraoffice/share/fonts/truetype/local/:ro" collabora/code
配置 Apache 反向代理
Ubuntu 或 Debian 上配置 Apache 反代理的方法
a2enmod proxy
a2enmod proxy_wstunnel
a2enmod proxy_http
创建 Apache 配置文件
collaboraonline.conf
升级 Collabora Online docker 容器
下面我们记录如何升级 Collabora Online docker 容器
# 获取新的 docker 镜像
docker pull collabora/code
root@debian:~# docker pull collabora/code
Using default tag: latest
latest: Pulling from collabora/code
2f94e549220a: Pull complete
8c2d3cacc76b: Pull complete
9e459d1a469c: Pull complete
075eed41d5be: Pull complete
960b5a458fb1: Pull complete
Digest: sha256:9ca5c0176c40ecc0eee705653f4ef380e82e69dfc6c61a377a31442797945bd8
Status: Downloaded newer image for collabora/code:latest
docker.io/collabora/code:latest
# 列出 docker 容器
docker ps
root@debian:~# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
1c88224348c8 2aa80bf820c9 "/start-collabora-on…" 6 weeks ago Up 34 minutes 127.0.0.1:9980->9980/tcp elegant_galileo
# 停止 Collabora Online 容器
docker stop 1c88224348c8
# 删除 Collabora Online 容器
docker rm 1c88224348c8
# 启动新的 Collabora Online 容器,映射本地字体文件夹到容器里
docker run -t -d -p 127.0.0.1:9980:9980 -e 'domain=cloud\\.sgtfz\\.top' --restart always --cap-add MKNOD --volume "/usr/local/share/fonts/truetype/:/opt/collaboraoffice/share/fonts/truetype/local/:ro" collabora/code
# 查看已保存的 docker 镜像
docker images
root@debian:~# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
collabora/code latest a5b0b6370643 5 days ago 1.46GB
collabora/code <none> 2aa80bf820c9 6 weeks ago 1.46GB
hello-world latest feb5d9fea6a5 3 months ago 13.3kB
# 删除旧版本的 docker 镜像
docker rmi 2aa80bf820c9
完美的从 Only office 转到 Collabora office ,实际上 Only office 的界面和操作体检都比较好,可惜 Bug 太致命。截止到今天 2022年1月份,我测试了最新发布的 Onlyoffice 7 依旧没有解决这个致命的 Bug 。我已经对 Onlyoffice 失去了耐心,决定继续一直使用 Collabora office 直到下一个 Onlyoffice 8 再看看吧 …
Collabora Online 存在的问题及解决
Office 相关文件不能正常显示 ico图标
NextCloud 动态页无法显示 office 文档相关的 ico 图标(包括 .xlsx,.docx文件),但有小部分一些又能正常显示 office 相关的 ico 图标。
解决方法:
问题出在 NextCloud 应用程序 Collabora Online 连接器,找到 Collabora Online 应用程序目录的 Office.php
大概如下路径目录
/www/nextcloud/apps/richdocuments/lib/Preview/Office.php
注释以下三行代码,保存即可。
public function isAvailable(\OCP\Files\FileInfo $file) {
// if (isset($this->capabilitites['collabora']['convert-to']['available'])) {
// return (bool)$this->capabilitites['collabora']['convert-to']['available'];
// }
return false;
}
这样修改,在应用程序更新后会失效,但我没有找到更好的解决方法。如果应用程序更新,那么此问题应该也会得到解决吧,假如没有解决,那么就继续找该文件修改咯。
失望,今天更新到 NextCloud 22.2.5 再次测试 Onlyoffice 依旧存在致命的 bug