category
type
status
date
slug
summary
tags
password
icon
📌
Seafile是一款开源的同步盘,注重可靠性和性能。支持 Windows, Mac, Linux, iOS, Android 平台。支持文件同步或者直接挂载到本地访问。

1. 备份盘和同步盘的区别

备份盘:备份盘主要用于创建数据的副本,以便在数据丢失、损坏或意外删除时能够还原数据。备份通常是定期进行的,目的是保护数据的完整性和可用性。备份盘通常存储旧版本的数据,以便可以恢复到特定时间点的数据状态。
 
同步盘:同步盘会在多个设备之间实时同步文件和文件夹的更改。当您在一个设备上进行更改后,同步盘会立即将这些更改传播到其他关联的设备上。同步通常是双向的,意味着您可以在任何设备上进行更改,这些更改都会同步到其他设备上。
 

2. 推荐理由

从我具体的使用过程来说说推荐这个同步盘的理由
  1. 我重要的文件,文档或者项目都是存在mac 电脑下的 document 这个文件夹下的,所以我使用 mac 下的 Seafile 客户端,只用选中这个文件夹,就能把该文件夹和云端进行同步。同时我能在 seafile 的 web 网页看到这些内容。 当然 seafile 是支持同步本地多个文件夹的.
  1. 由于某次我要将 macos 升级到 14 系统,但是这个系统是个 beta 版本,升级后发现有些软件兼容性不太行,所以不得不降级系统,降级系统后所有数据都丢失了,但是我重新安装了 seafile,只需要将 seafile 上的 document 文件夹同步到本地的 document 文件夹,重要的数据就都回来了。
  1. 本地对 document 文件下的文本文件进行修改,数秒内就能在 web 浏览器端看到文件的更新。 web 浏览器端也支持对众多格式文件进行在线预览。
  1. 记一次大学毕业答辩前,去学校给老师检查论文,结果格式不正确。去了学校打印店,由于我没有带电脑同时手里没有论文电子版,通过浏览器登录 seafile web 端,下载下来我同步的论文,进行了格式修改,最后通过 web 端将新的论文上传到原目录。后来回家后发现我电脑本地文件夹内的论文已经同步到新论文!!!
  1. 在写项目时,误删除了一些代码文件,本地已经没有文件了,通过登录 seafile 浏览器端,通过seafile 的回收站将删除的代码文件进行还原,最后再回本地查看,还原的代码文件已经同步到我本地。
  1. 在本地文件管理器里右键文件即可获得文件链接,并支持有效期密码等设置,用于和他人分享文件
  1. 支持 linux 命令行使用,用于备份我一台装了 redis 的服务器的数据目录(同理,你搭建的任何其他服务的数据目录都可以通过seafile 备份到对象存储里)
  1. 类似 .gitignore支持配置seafile-ignote.txt忽略指定的文件或文件夹同步
 

3. 市面上的同步盘

  • 百度网盘的同步空间功能:只能将文件存在同步空间文件夹里才能进行同步,也就是说不能指定任意文件夹进行同步。使用过,只能说同步效果又慢,文本小改动甚至可能同步不上去
  • 阿里云盘,支持多个文件夹自动同步,但是阿里云盘的客户端内存泄露严重,长时间运行内存占用极高。同步功能体验下来很差,对于开发人员来说代码小文件极多,同步效果更差。
  • 坚果云,体验挺好,但是空间小,价格贵
  • 开源的网盘里,因为我最重要的需求是同步,所有开源的网盘里我觉得 seafile 的同步功能做的最好,同步速度快,且改动后能立刻同步。
 
💡
我按照官网使用 docker-compose方式进行部署的专业版。社区版本不限制注册用户数量,限制功能。专业版本免费下只能三个用户进行注册使用,功能没有限制。

4. 数据备份方案

我是使用官网docker-compose方式启动的seafile 服务,数据都存在服务器本地磁盘上,每次备份则需要按照官网的备份方式对 seafile 数据和数据库数据进行备份。接下来将叙述几个可行的备份方案。
  • 写脚本定时将 seafile 数据文件和将数据库导出的 sql 文件,通过 RClone 等支持增量更新工具同步到对象存储
  • 使用云端数据库免备份数据库数据。后端存储直接使用对象存储(仅限专业版本)
不难猜出我使用的定然是第二种方案,当然不同使用场景适合不同的方式。
优点:
  • 不用再操心备份这件事,省心,不怕数据丢失
缺点:
  • 云数据库需要钱 (腾讯云 TDSQL 26一年,配置1核1G内存10GB空间,支持买四年)
  • 对象存储需要钱 (腾讯云大概 1G一毛钱每月,所以适合使用空间不大的用户)
  • 服务器到对象存储流量需要钱 (用腾讯云的服务器,对象存储选和服务器同地区的,传输走内网,免除流量费用)
  • 基于上一步解决方案,腾讯云服务器需要钱 2核4G完全够用,价格在一年不到两百(薅新用户福利,过期了就换号接着薅)。
  • 腾讯云服务器部署,80 和 443 端口需要域名备案。(可以找已经备案的腾讯云用户给你开个二级域名解析到你服务器就行,咳咳我的备案了)

5. 建议

  • 如果就只想有个同步功能之类的 IT 小白,建议用百度网盘或者阿里云盘等产品。如果你懂点技术,或者有自己的服务器可以尝试部署
  • 如果 seafile 一些功能确实很符合你的需求,你又是个 IT 小白,可以尝试直接使用 seafile 官方提供的服务。价格在 40¥/月,空间有100G.
  • 如果你跟我一样懂些技术,同时比如需要备份 linux 服务器上一些数据库数据文件等内容,同时也有闲置的服务器,请大胆尝试自己部署
  • 使用空间不大建议直接使用对象存储作为后端。云端数据库 26 每年确实不贵(学生优惠,25 岁以下免学生认证)。对象存储1毛一个G也不贵。哪里贵了,这么多年一直是这个价格,有时候找找自己的原因,这么多年工资涨没涨,有没有认真工作!!! 🤭

6. 一些教程

我是通过 docker-compose 进行部署的10 版本,配置的对象存储和云数据库
docker-compose.yml 配置文件
nginx 配置文件
seafile.conf 配置文件
配置云端数据库
默认是无法在 docker compose 里配置外置的 mysql 数据库,需要按照完整的 docker compose 文件启动起来所有容器后,在进入seafile-data目录下的 seafile conf 目录下修改云端数据库地址信息。要修改的文件包括如下:
  • ccnet.conf
  • seafile.conf
  • seahub_settings.py
  • seafevents.conf
这种方式下需要提前在云数据库上建好数据库和表,可以点击👉这里下载对应的安装包,解压后,里面运行 setup-seafile-mysql.sh配置数据库脚本(具体可以看 seafile 官方文档)
修改配置完成后,需要重启 docker 容器,同时修改compose文件,移除 mysql 相关镜像和 depend_on 相关内容不再启动 mysql 容器
配置对象存储
备份教程
有两种备份方案。以下皆为我用docker compose部署的专业版本的备份后者迁移方案,其他部署方式仅供参考
  1. 备份/opt/seafile-data ,seafile-mysql文件夹,切记不能备份 es 的文件夹,不然启动新的 docker compose 会导致 es 报错,无法成功启动,这种备份方式是可行的,缺点就是备份出来的文件太大。
  1. 按照官方文档的方式进行备份,但是官方文档埋了大坑。备份分为数据库数据备份和 seafile 数据备份。
    1. 其中数据库备份按照文档所写导出表 sql
    2. seafile数据备份,只需要备份seafile-data(上传的文件目录) 和 seahub-data(用户头像等前端数据)就行,conf 目录不用备份,因为 mysql 下 seafile 用户的密码是随机生成的,如果新启动容器还用这个 conf 里的密码会导致 mysql 报权限错误,导致容器启动不起来。如果你对以前容器的conf文件夹里的配置文件进行了一些修改,必须要备份 conf 目录,那你应该需要启动新的docker容器后,将新 conf 里密码替换到备份 conf 里的配置文件里,同时 conf 文件夹里有多个文件里都配置了 mysql 的密码,例如 ccnet.conf seafile.conf等
    3. 如果你按照官方文档方式进行备份,不出问题的话要出问题了 ,重新启动后访问你得存储库出现这个问题
      notion image
      notion image
      因为官方文档命令写错了,目录关系少写了一级,才会导致你的数据并没有拷贝到本来应该存在的目录下。所以从数据库里检索到了你得存储库目录。但是实际当你进入你的存储库时里面,服务器本地对应文件夹并没有文件,所以导致未找到权限错误
      notion image
删除了存储库,怎么对象存储空间没减少
  1. 被用户删除的资料库,会被移动到系统回收站,保留一段时间(seafile.conf中expire_days控制),回收站自动清理之前这些资料库还会占用 oss 空间。管理员可以进入系统管理面板中清空回收站,此时可以去运行 gc 程序去清理 oss 空间
  1. 设置了历史长度限制的资料库的过期数据块(block 对象),这包括已删除的文件和文件的旧版本。commit 对象始终不会被删除。fs 对象默认不会被删除,需要使用一个选项来清理。(用户或者管理员可以给每个资料库独立设置历史保留期限,如果某个资料库没有设置保留期限,则默认使用 seafile.conf 中的 keep_days 选项中指定的值。)
详细说明和 docker 下运行垃圾回收程序文档
seafile 在 linux 命令行下使用教程
安装
初始化
启动和停止
同步与解除同步
一些命令
我只用到了这些,就只写了我常用的,更多教程参考官方文档📄 
 

7. 社区版部署

由于专业版es占内存较多,社区版的功能已经满足我的需求,所以后期又迁移到了社区版部署,由于社区版的限制无法使用 oss 对象存储,另外我部署的时候版本seafile 到了 11 大版本,该版本只支持 8.0 版本的 MYSQL,由于腾讯云TDSQL云数据库学生优惠版本只有 5.6 版本,所以也放弃使用云数据库。
🧑‍💻
使用 Docker-compose 部署社区 11 版本,使用 rclone ➕ cron备份数据到 oss

部署

docker-compose.yml
配置文件修改
/opt/seafile-data/seafile/conf/seafile.conf
[fileserver]下加入以下配置,目的是不限制同步文件数量,默认限制是十万,对于一些代码同步目录内小文件特别多可能超过 10w
max_sync_file_count = -1 fs_id_list_request_timeout = -1

/opt/seafile-data/seafile/conf/seahub_setting.py
末尾添加自己的对外域名,避免登录出现 CSRF 错误
CSRF_TRUSTED_ORIGINS = ['https://seafile.zhangjiashu.cn']

备份

下载安装配置 rclone,使用 rclone 备份到腾讯云 cos
一个可用的 rclone 配置文件模板
备份 shell 脚本
 
恢复 shell 脚本
该恢复脚本只将 seafile 的文件数据和 seahub 前端头像等数据和数据库数据恢复,配置文件需要自己另行恢复
 
Loading...
张嘉书
张嘉书
一个想朝全能发展的程序员