Seafile 踩坑记——SSL 折磨实录
tags: NAS上期讲了可道云的配置,这期来讲讲 Seafile。
为什么有了飞牛,我仍然要配置可道云或者 Seafile?
首先简单说明一下“网盘”与同步盘的区别。我的理解是,网盘更加类似于百度网盘,主要作用是存储使用频次少、容量大、文件长期不改变的文件,例如视频、音频、软件安装包等等。一般用法是,需要的时候下载下来,使用完就删掉,或者是修改之后重新上传上去。
而同步盘则更加适用于文件小,但使用频次和修改频次极高的场景,例如文档编写,往往几十秒就要保存一次。或者是修改之后,我希望无缝衔接到另外一台设备使用,而不用我手动去一个个、一次次地上传下载。
现阶段的 NAS,如果说只看它系统自带的文件系统,其实更偏向于网盘的功能。这对于办公的话是不太方便的,因此许多人应该都有同步盘的需求。
像群晖这样优秀的 NAS 系统,则在本身提供网盘功能的基础上,使用 Synology Drive 套件补足了同步盘的功能,这是非常值得学习的。但目前像他这样做的太少,我们只能自己想办法去实现同步盘的功能。
而可道云与 Seafile 都是非常优秀的同步盘解决方案。但是它们的侧重点仍然有所不同。可道云还是更偏向网盘那一类,是在网盘的基础上做了一个半成品的同步功能。但他的云办公功能做得很好,非常适合文档协作。如果没有强烈的本地文件存储需求的话,用可道云是不错的。并且可道云提供了一个 teamOS 操作系统,可以很简单地进行安装。
Seafile 则更加偏向于同步盘,使用体验与 Onedrive、群晖 Drive 非常像,并且我觉得比群晖 drive 做得更加优秀,并且分块存储地特性也保障了文件的安全性。但缺点是,它的安装过程非常复杂,需要手动配置,并且需要一定的技术基础。尤其是在配置 SSL 方面,官方文档写得不明不白,需要自己摸索。
不过好消息是你看到了我这篇文章,我可以带你避免更多的坑。
安装 Seafile
我们采用 docker compose 的形式部署专业版系统。
首先,新建一个 seafile-pro 文件夹,以后所有的数据都会存放在这里。

然后下载 docker compose 文件,一共有四个文件,分别是:
- .env:环境变量文件,用于配置 Seafile 的各种参数。
- seadoc.yml:Seafile 的文档服务,用于提供 Seafile 的文档。
- seafile-server.yml:Seafile 的服务,用于提供 Seafile 的服务。
- caddy.yml:Caddy 的服务,用于提供 HTTPS 服务。
wget -O .env https://manual.seafile.com/12.0/repo/docker/pro/env
wget https://manual.seafile.com/12.0/repo/docker/seadoc.yml
wget https://manual.seafile.com/12.0/repo/docker/pro/seafile-server.yml
wget https://manual.seafile.com/12.0/repo/docker/caddy.yml
然后修改 .env 文件,官方文档中已经对需要注意的配置项做了详细的说明,我们主要注意以下这些项:

由于我把所有的数据都放在 seafile-pro 这个项目文件夹下面,因此我把所有的 /opt 都改为了./data,用于持久化数据。

如果服务要上公网的话,用 http 是不合适的,因此我们就不配置 http 了,一开始就直接上 https。因此 SEAFILE_SERVER_HOSTNAME 填写域名,后面就分别以 seafile.example.com为例。SEAFILE_SERVER_HOSTNAME 填写 https。
https 证书配置
中文的安装手册里面没有 https 的内容,需要在英文文档查看。
首先下载你申请的域名证书,把他们改名后放到以下位置。
./data/seafile-caddy/certs/
├── cert.pem # xxx.crt in some case
├── key.pem # xxx.key in some case
修改 seafile-server.yml 文件。
services:
...
seafile:
...
volumes:
...
labels:
caddy: ${SEAFILE_SERVER_HOSTNAME:?Variable is not set or empty}
# 添加这一行
caddy.tls: "/data/caddy/certs/cert.pem /data/caddy/certs/key.pem"
...
然后直接docker compose up -d即可。
此外,如果你先用了 http,后续想要更换为 https 的话,还需要修改一下seahub_settings.py,文件目录是./data/seafile-data/seafile/conf/seahub_settings.py
把所有的 http://seafile.example.com 更改为 https://seafile.example.com。然后启动
启动后 502 错误
表明已经成功了,等待几分钟初始化即可。
升级 Seafile 13,把我吓惨……
13.0 升级说明
这些注释提供了有关更改的其他信息。请始终遵循主要升级指南。
对于基于 docker 的版本,请查看升级 Seafile Docker 镜像
重要的发布更改
Seafile 13.0 版有以下重大变化:
SeaDoc:SeaDoc 现在是 2.0 版本,除了支持 sdoc 之外,它还支持白板
缩略图服务器:添加了新的缩略图服务器组件,以提高缩略图生成的性能,并支持视频的缩略图
元数据服务器:可以使用新的元数据服务器组件来管理扩展文件属性
通知服务器:如果启用了通知服务器,Web 界面现在支持在其他人添加或删除文件时进行实时更新
SeaSearch:SeaSearch 现已发布 1.0 版本,支持全文搜索
配置更改:
数据库和 memcache 配置添加到 .env 中,建议使用环境变量来配置数据库和 memcache
建议将 Redis 用作 memcache 服务器
(可选)S3 配置可以通过环境变量完成,并且大大简化
Elasticsearch 现在有自己的 yml 文件
重大变更:
出于安全原因,WebDAV 不再支持使用 LDAP 帐户登录,使用 LDAP 帐户的用户必须在配置文件页面生成 WebDAV 令牌
【文件标签】旧文件标签功能无法再使用,界面提供升级通知,将数据迁移到新文件标签功能
社区版不再支持使用二进制包部署 Seafile。我们建议您将现有的 Seafile 部署迁移到基于 docker 的部署。
ElasticSearch 更改(仅限专业版)
Elasticsearch 版本在 Seafile 13.0 版本中没有更改
看着这 Seafile 13 的升级说明,我挺馋的。主要是馋这个 AI 功能:

所以就跟着官方的升级文档一步步尝试升级,docker 版本升级指南
中间的过程就不说了,一把辛酸泪,反正最终是失败了……
不过我也不是完全没有准备,我还是做好了自认为很充分的备份的:
- 使用 duplicati 进行了加密备份
- 使用了系统的快照功能保存了快照
- 加密备份还上传了一份到百度云
我自认为数据肯定不会丢失的,所以就先这样吧。
但是,安装失败后,我恢复快照,结果 Seafile12 跑不起来了,查看日志:出现了一个权限错误,大概意思是某个脚本应该由用户 ubuntu 来执行,而不是使用 root 用户,看到这我心都凉了半截,因为我虽然备份了整个 docker 文件夹,但我没有备份单独的文件……一旦 docker 跑不起来,我的数据就危了。
冷静下来后,我进入 Seafile 容器寻找问题,还好,很顺利的找到了。
root@b1206ae45dce:/opt/seafile# cd /
root@b1206ae45dce:/# ll | grep shared
drwxr-x--x+ 1 ubuntu 1001 32 Jun 9 16:53 shared/
这个目录被 ubuntu 所有了,显然是不对的,因为容器内所有的操作都需要 root 来进行
chown -R root:root shared/
然后重启 docker compose,就不会再报错了。