LITTLEFOX

一个科研搬砖狗的WordPress尝试

搭建自己的OnlyOffice Document Server

新安装的Seafile或者Nextcloud是不能在线预览office文档的,需要配合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 Document Server》

对了,如果是自签证书,使用者需要先把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菜单的)

《搭建自己的OnlyOffice Document Server》

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文档。

点赞

发表评论