主要介绍如何构建 Seafile Pro Docker 镜像以及为它添加 OnlyOffice 的支持。

seafile+onlyoffice
seafile+onlyoffice

缘由

按照我一贯的书写风格(其实就是流水话),这里先讲讲为什么要做这个事情,以及后面怎么做的。

首先最开始接触 Seafile 是在公司北京中心,他们那边用来做内部网盘,分享数据。与那边的 方红杰 认识后,简单了解了是如何部署的。

接着再去年5月底,因为工作原因,到航发那边部署了相关的环境,例如 CentOS 本地源、Seafile 文件共享服务等,再次进行了 Seafile 的部署,但那个时候还是直接使用 Seafile 的安装包,然后将需要的依赖离线安装好,接着再运行 Seafile 官方提供的一个脚本来进行安装的。

最后,最近公司内网需要对 Seafile 的内容进行备份,虽然不是我在做,但自己自从上次到航发部署后,老觉得该直接使用 Docker 来进行 Seafile 的部署了。
然后就开始了相关的制作。

另外在 2 月底,因为疫情影响,中心那边想再试试文档协同办公,所以 方红杰 就调查了下,决定用 OnlyOffice 来提供支持,他找了我要相关的安装包。

于是在那两天的周末,一直在搞这个相关的内容,写这篇博文算是一种记录。

好了,说好了缘由,下面开始正式开干。

Seafile 镜像构建

首先,Seafile 官方在 github 上有个名为 seafile-docker 仓库 专门用于 Seafile 容器镜像的制作,我的起点也是基于此。

首先将代码 clone 下来,然后看这些代码的操作。因为先前自己有 Bash 和 Docker 等基础,相对来说,这些内容都不难。

然后再基于代码中的 Dockerfile 进行自己的定制。

准备材料

所谓的定制就是相关的 crack 了。自己能力有限,只能做相关的搬运工作,通过 Google 查到的相关资料如下:

6 系列版本的 Crack:

较新 Seafile 破解:

docker hub 上相关镜像:

  • leeyanzhe/seafile-pro:latest
  • leeyanzhe/seafile-pro-mc:7.0.11

官方相关的资源:

根据上面这些资源,就可以找到 6 系列版本的安装包以及破解方法。

老实说,这样搞的确有点不厚道,Seafile 的公司很良心了,在 github 上开源了他们大多数产品的代码和文档,但似乎国内被破解多了,当前他们的客户主要是欧洲那边的了。。。

修改相关脚本

参考了上面安装包以及 leeyanzhe/seafile-pro:latest 这个镜像,我们可以将自己准备的材料替换掉原来 seafile-docker 这个仓库中相关的配置以及软件包。

具体内容请看我 github 上提交的仓库 FSSlc/docker-seafile-onlyoffice

原本 seafile-docker 项目中的镜像分为 base、pro_base、pro_seafile 等几个镜像,其中 base 用来安装基本的环境。

它使用了 phusion/baseimage:0.11 这个镜像,这个镜像的特点改进了原本 Ubuntu 官方镜像的缺点,使用 runit 来做服务管理,使用 /sbin/my_init 来管理容器内的进行,可以使用自定义的启动脚本,在容器创建后,就可以直接启动它们,关于这个镜像的内容,请参考 https://github.com/phusion/baseimage-docker 这个仓库。

而 pro_base 和 pro_seafile 则分别安装了 seafile 需要的依赖和在此基础上,安装了 seafile 。

所以一般只需要该 pro_seafile 这个目录里面的东西即可。

另外,这个仓库还使用了 Makefile 来进行相关任务的管理,这个可以在后面做借鉴。

我在本地构建镜像时,看到 Makefile 里面有 docker-squash 来对镜像做压缩,使得容器大小最小化,另外还有个特点是让别人不能通过查看镜像反推 Dockerfile 的内容,因为它将中间层全部删除了。

对于常用的镜像,可以使用 dive 或者 dockerhub 每个镜像 tag 部分的内容来查看 Dockerfile,原理大抵是利用了 docker history。

我在使用它的时候,自己通过 AUR 安装了 docker-squash,结果老是出错,最后根据网上的讨论,找到了还是需要使用 pip 安装 docker-squash,这个版本的软件才是最好用的。

做完了这个,后来再看 seafile-docker 里面的 ci 脚本,才知道自己饶了一个大圈,早知道先看他们的 ci 脚本了。。

接着再按照自己的需求,使用 Makefile 构建自己需要的镜像就好了。

添加 OnlyOffice 支持

前面说过,这个 OnlyOffice 的支持主要用于文档的在线编辑,参考文档为 Seafile 的服务器手册,具体内容看这里

这个教程讲解得很清楚,照着做就基本可以用来。

但恰恰是这个步骤让我折腾了将近 1 天。。。前后出现两个问题:

  1. 如何将相关的配置写入启动的容器中;
  2. 如何支持文件的预览与编辑

其中第一个问题的解决办法是:直接找到 seafile 中相关配置文件的生成脚本,然后按照自己的需求做对应的修改。
对于第二个问题,我部署好后,老是不能编辑 docx 类似的文件,自己却找不到原因,后来才发现是上面的官方文档挖的坑,在[这里(https://manual-cn-origin.seafile.com/deploy_pro/office-wen-jian-yu-lan-he-bian-ji/only_office#pei-zhi-seafile-fu-wu-1) 只配置了可以修改 ‘docx’, ‘pptx’, ‘xlsx’ 这几种格式,其实还可以按照上面那行,添加对应的修改就可以了。。。

做完这个后,为了测试是否可以同时更改,我还创建了多个用户,同时进行修改,最终的结果还算满意,基本达到了自己预期的效果。

但最后还是留下个问题,编辑文档之前,老是要弹窗,报 onlyoffice 没有配置好,不能保存等,但文档是自动保存的。。

使用 Travis CI 进行发布

经过了上面的折腾,后面基本上就没有什么要做的了。但作为一个爱动脑子的人,这样还不满足,我再参考了 seafile-docker 原来的 travis.yml 脚本,进行了容器镜像的自动构建和推送。

具体来说就是如下步骤:

  1. 配置好 travis.yml,如何编写可以查看阮一峰的教程 持续集成服务 Travis CI 教程
  2. 申请 travis ci 账号,在 github 上配置好与 Travis ci 的配合;
  3. 提交代码触发构建

自己前后提交了 5 6 次才最终将这个任务做成功了,看来还是得多测试。。。

后记

在上面的工作做完后,自己再对这些内容做了整理,最终将相关的代码放到了 github 的仓库中,具体是 https://github.com/FSSlc/docker-seafile-onlyoffice,有兴趣的话可以去看看,能够给个 star 就再好不过了。

虽然本篇博文的内容是 2 月底做的,但现在才写了个文章来总结,看来还是需要自己多书写,多输出。