目录
-
前言
本文仅介绍通过在centos7服务器搭建Collabora Online (23.05.0.5)私服进行office文件预览(编辑没有研究),本文,本文内容大都是摸索的结论,若有不对,请指正。下面进入正题。
目前了解到免费的解决方案有以下几种:
- Onlyoffice:好用,如果单机部署可以选它了。但是:它的缓存文件是放在服务器上,在文件加载的时候是多次向后端请求加载资源,即如果是集群部署需要挂nas盘进行共享缓存文件。由于我们应用部署在公司内部私有云上,据说很难挂nas,另外应用网络链路很复杂,没有做会话保持,遂放弃~
- Office Online Server:未体验。主要是目前我们应用部署在centos服务器,而微软这个需要部署在win server,不搭,放弃~
- Collabora Online:基于libreoffice的office在线服务,目前觉得就它合适我们系统。
- Kkfileview:文件覆盖很全,感谢作者开源。但是遇到大文件时,还是有OOM的情况,另外就是感觉性能不是很好,可能是错觉。
-
Collabora Online安装
主要两种涉及安装方式
其它安装也直接参考官网自行选择:CollaboraOnline安装
下面介绍离线安装,如果centos通过安装包没有成功,(我按照官网的安装没有成功),可以参考以下点:
- 下载 key 地址 :key地址
- 通过yum进行下载
- 安装命令
- yum-config-manager --add-repo https://www.collaboraoffice.com/repos/CollaboraOnline/CODE-rpm
- yum install coolwsd collabora-online-brand
-
- 如果已安装可用下面命令重新下载
yum reinstall --downloadonly coolwsd collabora-online-brand
- 把下载后的文件打包到内网服务器进行安装
yum localinstall -y *.rpm
-
配置
配置可以参照:官网配置参考地址
配置文件为:/etc/coolwsd/coolwsd.xml文档里注释也很全面,如果预览不了文件的,基本上可以看报错日志进行修改配置解决。
主要注意点:
- 是否启用https,参考 :SSL configuration:
https://sdk.collaboraonline.com/docs/installation/Configuration.html#ssl-configuration
- 管理端:Admin Console:
https://sdk.collaboraonline.com/docs/installation/Configuration.html#admin-console
-
启动
参考:Configuration — SDK https://sdk.collaboraonline.com/ documentation
启动成功,可以看下是否ok
curl -v http://ip:9980/
-
测试
官网提供了一些接入案例:案例
以nodejs为例
wopi相关参考文章:wopi
主要是你的需要提供下面几个接口
目前demo中提供的是预览文字,也可以指向文件流,res.send改成res.download
coolwsd自带了一些案例,具体可以见framed.doc.html,里面提供了postmessage相关功能使用案例
服务器上的地址路径参考如下:
-
集成JAVA
采用前后端分离,后端是java,主要提供token验证以及wopi的三个服务
代码参考
注意点:
- 如果后端服务地址是:ip:port/XXXX/doc/wopi/file....
需要配置 coolwsd.xml中的server_root
- 如果后端发现资源请求不到,例如你的前端需要经过代理才能到后端服务,可能会导致访问路径问题,具体请F12看下你的前端请求,可通过server_name解决。
- 嵌套iframe有跨域问题,默认wopi服务器是受信任的。需要设置frame_ancestors添加的你ip或者域名
- 第一次访问有个弹窗,时不时也有个反馈提示,要关闭的,需要再coolwsd.xml添加如下配置,具体逻辑可见源码FileFerver.cpp
-
Docker集成
主要是我们的容器不止一个应用
整体思路:
- coolwsd.xml配置文件COPY到我们镜像
- 在容器启动后把hosts需要添加的内容加载进去
注意点:
- 我们的容器还有些其他的服务,我没有将coolwsd服务自启动搞成功,所以在容器启动的时候通过脚本启动,但是我们云上环境不让特权模式启动容器,只能走替换systemctl:如何在Docker里面使用systemctl - Ehds
- 镜像启动需要保证它不退出:利用tail -f /dev/null命令防止container启动后退出
- 如果指定自定义日志文件,需要将文件夹权限用户改为cool
- 目前还不知道怎么修改默认端口9980,采用了nginx或者rinetd进行转发,需要注意配置websocket转发
-
修改
Word预览,把canuserwrite:true 感觉更像word,但是这个模式下用户可以修改文档。
思路,在编辑模式下,将菜单屏蔽,键盘屏蔽,鼠标右键屏蔽。
主要修改点,bundle.js,分析源码得知这个js是src目录下的js汇总,不过该js是压缩过的,要么自己重新汇总这个文件,要么将这个js“格式化”。由于chrome浏览器可以将js格式化显示,就不用自己去打包了。在httppost处理MessageId那堆逻辑后面加上需要自定义的逻辑(下面仅是其它逻辑的代码)
-
问题
在文件较大时,服务器存在cpu瞬时飙升
Httppost: Close_Session好像不太好使,干嘛的?
鼠标右键屏蔽没有无法生效,原因未知