新安装的Seafile或者Nextcloud是不能在线预览office文档的(更新:Nextcloud已经整合Onlyoffice),需要配合OnlyOffice或者LibreOffice服务器,其中Seafile的社区版只支持OnlyOffice,就研究了下怎么搭OnlyOffice Document Server。
测试环境
Ubuntu 18.04
配置要求
- RAM: 4 GB or more(笔者注:如果用户不多,小一些也可以)
- CPU: dual-core 2 GHz or higher
- Swap: at least 2 GB
- HDD: at least 2 GB of free space
- Distribution: 64-bit Red Hat, CentOS or other compatible distributive with kernel version 3.8 or later, 64-bit Debian, Ubuntu or other compatible distributive with kernel version 3.8 or later
- Docker: version 1.9.0 or later
修改swap(略)
安装OnlyOffice Document Server(docker)
OnlyOffice Document Server支持3种安装方式,docker、docker-compose和包管理器。3种方式我都试了,其中包管理器方式在Ubuntu18.04+Node10环境下OnlyOffice的nodehun分支会编译失败,尝试根据上游修改未果,会影响语法检查功能;docker-compose方法适合批量部署,不过默认会占用80和443端口,影响证书签发,需要映射走;对个人使用而言,docker方式最简单,当然缺点是批量部署和加载自定义字体较复杂。
首先,安装docker,我这里是Ubuntu源中的,不过版本很老,更推荐用官方的脚本安装更新的版本。
$ sudo apt install docker.io
安装并启动OnlyOffice Document Server镜像(默认已经把当前用户加入docker组,否则docker命令需要用sudo)
$ docker run -i -t -d -p 8080:80 --restart=always onlyoffice/documentserver #启动服务,因为let's encrypt需要访问80端口申请证书,所以映射到另一个端口,譬如8080
此时访问ip:8080应该能看到Document Server is running。
利用Caddy反代实现https
我的观点是对于小规模使用,能用Caddy的绝不劳烦Nginx老人家。
Caddyfile如下:
https://[domain] {
gzip
tls [email]
proxy / localhost:8080 {
transparent
}
}
如果是自签证书或者购买的证书,把tls一行的邮箱改为crt和key的位置。
配置完之后, 访问域名,就可以看到
对了,如果是自签证书,使用者需要先把OnlyOffice服务器使用的证书(注意是OnlyOffice服务器的,不是Seafile网页的)加为信任,否则文档打不开。所以不建议使用自签证书。另外,如果用Caddy给页面加了密码,OnlyOffice会报错。
配置中文字体支持
现版本的OnlyOffice默认已经可以支持中文,安装中文字体不需要再删文件了,不过字体比较少,可以手动安装Windows下的中文字体。
首先下载中文字体文件,例如
$ wget https://github.com/neroxps/Docker-Only-Office-Chinese-font/archive/master.zip && unzip master.zip && cd Docker-Only-Office-Chinese-font-master
winfont文件夹内即为字体。
$ docker ps -a #获取容器ID $ docker cp -a winfont [ID]:/usr/share/fonts #拷贝字体到容器中 $ docker attach [ID] #进入容器,后面几行操作都是在容器中 $ cd /usr/share/fonts/winfont && ls #查看确认字体文件 $ sudo mkfontscale $ sudo mkfontdir $ sudo fc-cache -fv #刷新缓存,返回结果包含/usr/share/fonts/winfont: caching, new cache contents: 29 fonts, 0 dirs即可 $ /usr/bin/documentserver-generate-allfonts.sh #重新生成字体文件
之后docker会自动重启,稍等片刻,然后删除浏览器缓存,再重新打开文件,就可以找到中文字体(不过都是拼音显示)。
然后为了防止http协议的访问,可以用防火墙屏蔽掉8080端口的访问。
Seafile支持
这里以seafile根目录为/data/seafile为例,实际根据需要修改下面红字部分。
$ vi /data/seafile/conf/seahub_settings.py
加入:
# Enable Only Office
ENABLE_ONLYOFFICE = True
VERIFY_ONLYOFFICE_CERTIFICATE = False
ONLYOFFICE_APIJS_URL = ‘http{s}://{your OnlyOffice server’s domain or IP}/web-apps/apps/api/documents/api.js’
ONLYOFFICE_FILE_EXTENSION = (‘doc’, ‘docx’, ‘ppt’, ‘pptx’, ‘xls’, ‘xlsx’, ‘odt’, ‘fodt’, ‘odp’, ‘fodp’, ‘ods’, ‘fods’)
ONLYOFFICE_EDIT_FILE_EXTENSION = (‘docx’, ‘pptx’, ‘xlsx’)
重启seafile
$ /data/seafile/seafile-server-latest/seafile.sh restart $ /data/seafile/seafile-server-latest/seahub.sh restart
界面如下(这个文档是只读的,正常文档是有Ribbon菜单的)
NextCloud支持
直接在NextCloud的设置中启动,点击右上角头像-应用-启用OnlyOffice。
头像-设置-OnlyOffice,添加服务器(仅限https),save
如果OnlyOffice服务器是自签证书,则会报错“Error when trying to connect (Bad Request or timeout error)”,因为NextCloud默认不支持自签证书,需要修改设置
$ vi [nextcloud_path]/config/config.php
在结尾的大括号前加入
'onlyoffice' =>
array (
‘verify_peer_off’ => TRUE,
),
再次添加服务器,保存,即可在线编辑office文档。
文章评论