给 Seafile 部署 onlyoffice

安装 Docker

参考 《Docker 从入门到实践》

我是在 Centos 7下搭建 Seafile,这里使用阿里云的 Centos 7 Docker 安装脚本。

1
curl -sSL http://acs-public-mirror.oss-cn-hangzhou.aliyuncs.com/docker-engine/internet | sh -

给 Docker 添加加速器

因为 Docker 的镜像服务器是在国外,所以我们给 Docker 添加国内镜像加速器,这里我使用阿里云的镜像加速器,如何申请阿里云的镜像加速器请自行百度。

编辑 /usr/lib/systemd/system/docker.service 找到 ExecStart=/usr/bin/dockerd 改成如下配置

1
ExecStart=/usr/bin/dockerd --registry-mirror=https://xxxxxxxx.mirror.aliyuncs.com

注:–registry-mirror= 后的网址请修改成阿里云申请的加速器地址

修改后重载 systemd 配置、启动 Docker、设置 Docker 为开机自启动。

1
2
3
systemctl daemon-reload
systemctl start docker
systemctl enable docker

部署 OnlyOffice-documentserver

  • 构建 OnlyOffice-documentserver 镜像

这里,你有两个选择

  1. 部署官方的 onlyoffice Docker 镜像,但因为官方的 Docker 镜像里没有中文字体,故此显示中文字体上会出现各种异常。
  2. 我基于官方的 Docker 镜像制作了一个 Dockerfile 项目地址,只要利用这个 Dockerfile 构建镜像即可。
1
2
3
git clone https://github.com/neroxps/Docker-Only-Office-Chinese-font.git
cd Docker-Only-Office-Chinese-font
docker build -t onlyoffice/chinese .

winfont 目录下是 windows 下的中文字体,如果你有其他字体需要,也可以将字体上传到这个目录里面,再构建镜像。

构建完毕后查看下我们现在的镜像

1
2
3
4
[root@seafile-server Docker-Only-Office-Chinese-font]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
onlyoffice/chinese latest 5065553b1240 About a minute ago 1.68GB
onlyoffice/documentserver latest f5ff5f9ec0c4 2 weeks ago 1.41GB

onlyoffice 的 documentserver 镜像是提供在线编辑服务的,镜像内已包含了 nginx 服务器,支持 80 端口和 443 端口,如果有合法证书,我们可以使用 https 连接。

onlyoffice-documentserver Docker 使用方法参考 Docker-DocumentServer

  • 将证书复制到 onlyoffice 证书目录路径
1
2
3
4
5
#假设当前目录在证书目录下
mkdir -p /app/onlyoffice/DocumentServer/data/certs
cp fullchain1.pem /app/onlyoffice/DocumentServer/data/certs/onlyoffice.crt
cp privkey1.pem /app/onlyoffice/DocumentServer/data/certs/onlyoffice.key
openssl dhparam -out /app/onlyoffice/DocumentServer/data/certs/dhparam.pem 2048
  • 生成 onlyoffice 日志目录
1
mkdir -p /app/onlyoffice/DocumentServer/logs

运行 OnlyOffice-documentserver

完成部署后我们就可以运行 OnlyOffice-documentserver 了。

由于我的 Seafile 是用 nginx 部署了 https,443端口已被占用了,大家如果公网 ip 多可以忽略,我是部署在内网,公网是 ADSL,故此只有一个公网 ip,所以 OnlyOffice-documentserver 不能使用 443 端口了。

  • 使用 https
1
2
3
4
docker run -itd -p 7443:443 -v /app/onlyoffice/DocumentServer/data:/var/www/onlyoffice/Data \
-v /app/onlyoffice/DocumentServer/logs:/var/log/onlyoffice \
--restart=always \
--name office onlyoffice/chinese
  • 使用 http
1
2
3
4
docker run -itd -p 780:80 -v /app/onlyoffice/DocumentServer/data:/var/www/onlyoffice/Data \
-v /app/onlyoffice/DocumentServer/logs:/var/log/onlyoffice \
--restart=always \
--name office onlyoffice/chinese

这时候我们可以运行 docker logs office 来观察运行情况。

1
2
3
4
5
6
7
8
9
10
11
[root@seafile-server certs]# docker logs office
guest
* Starting PostgreSQL 9.3 database server [ OK ]
* Starting message broker rabbitmq-server [ OK ]
Starting redis-server: redis-server.
Starting supervisor: supervisord.
Generating AllFonts.js, please wait...Done
onlyoffice-documentserver:docservice: stopped
onlyoffice-documentserver:docservice: started
onlyoffice-documentserver:converter: stopped
onlyoffice-documentserver:converter: started

通过 web 访问 https://demo.domain.com:7443 可以看到 『Document Server is running』表明服务已经正常运行了。

配置 Seafile 6.1.0,让其使用 onlyoffice

参考 Seafile Manual/Only Office

  • 编辑 seahub_settings.py 加入下方配置
1
2
3
4
5
# Enable Only Office
ENABLE_ONLYOFFICE = True
VERIFY_ONLYOFFICE_CERTIFICATE = True
ONLYOFFICE_APIJS_URL = 'https://demo.domain.com:7443/web-apps/apps/api/documents/api.js'
ONLYOFFICE_FILE_EXTENSION = ('doc', 'docx', 'ppt', 'pptx', 'xls', 'xlsx', 'odt', 'fodt', 'odp', 'fodp', 'ods', 'fods')

注1:其中 VERIFY_ONLYOFFICE_CERTIFICATE 选项如果 onlyoffice 使用了 https 的话可以选择更改为 True 提高安全性,如果是使用 http 协议则改为 False

注2:如果没使用 memcached 的话,还需要执行 rm /tmp/seahub_cached/清空缓存

  • 重启 seahub 使得配置生效
1
2
3
#假设当前在 seafile-server-latest 目录下
rm -f ../conf/seahub_settings.pyc
./seahub.sh restart-fastcgi

尽情享受吧!

使用体会

onlyoffice 还是不错的,加载速度快,界面友善,我与同事测试过,多人同时编辑一个文件的时候毫无问题。

但是它目前缺点也十分明显,界面没有中文语言,对中文支持也不好,例如我们在 word 里面的字体叫『等线』,但是 onlyoffice 里面叫 『DengXian』,有时候它并不能识别,故此会识别成默认英文字体,导致一堆口口。

据说 Seafile 在端午节后会着重优化 onlyoffice 的体验,我们期待吧。