Seafile 是国内开发的开源网盘,核心优势是大文件同步速度和分块存储。本篇把 Docker 化部署、数据库对接、Office 预览、团队协作整理清楚。
阅读对象:需要自建大文件存储 / 团队文件协作的运维 / 后端
覆盖范围:Seafile CE 部署 + MariaDB + Memcached + Office 预览(LibreOffice)+ 加密存储 + 多用户隔离 + 备份
一、Seafile vs NextCloud
| 维度 | Seafile | NextCloud |
|---|
| 文件分块存储 | ✅ 内置(默认 8MB 块) | ❌ 整体存储 |
| 大文件同步 | 极快(增量分块) | 一般 |
| 同步算法 | 自研 BitTorrent-like | rsync 类 |
| 数据库 | SQLite / MySQL / PostgreSQL | SQLite / MySQL / PostgreSQL |
| Office 协作 | ✅ 预览(无在线编辑) | ✅ OnlyOffice 在线编辑 |
| 视频通话 | ❌ | ✅ NextCloud Talk |
| 应用市场 | 较少 | 丰富 |
| 性能 | 高 | 中等 |
| 适合场景 | 团队文件、代码库、设计稿 | 家用云盘、文档协作 |
When to use Seafile:
- 团队 / 公司需要同步大文件(GB 级别设计稿、视频素材、模型文件)
- 替代 SMB / NFS(多端实时同步)
- 不需要视频通话 / 应用市场等"花哨"功能
- 高安全要求(支持端到端加密)
二、Seafile 架构
1
2
3
4
5
6
7
| Seafile Server = 3 个核心组件
├─ Seafile Server(核心,处理文件分块、同步、分享)
├─ Seahub(Django Web 前端)
└─ Memcached(缓存)
数据库 = 1 个
└─ MariaDB / MySQL(存元数据:用户、库、权限、版本)
|
存储分层:
- 文件系统:
/shared/seafile/(存储文件分块 + 库) - 数据库:用户、库元数据、权限、版本历史
- Memcached:Seahub session 缓存
三、docker-compose 完整部署
3.1 完整配置
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
| # How to use:
# login_user=admin login_pass=admin123 db_pass={{DB_PASS}} uid=1000 gid=1000 docker-compose up -d
# docker-compose down
version: '2.1'
services:
mariadb:
image: mariadb:10.1
container_name: SEAFILE_DB
environment:
- MYSQL_ROOT_PASSWORD={{DB_ROOT_PASS}}
- MYSQL_LOG_CONSOLE=true
volumes:
- ./mariadb/data:/var/lib/mysql
networks:
vpn:
ipv4_address: 172.168.29.2
healthcheck:
test: ["CMD", "mysqladmin", "ping", "-h", "localhost"]
timeout: 20s
retries: 10
memcached:
image: memcached:1.5.6
container_name: SEAFILE_CACHE
entrypoint: memcached -m 256
depends_on:
mariadb:
condition: service_healthy
networks:
vpn:
ipv4_address: 172.168.29.3
seafile:
image: seafileltd/seafile-mc:latest
hostname: seafile
container_name: SEAFILE_DOCKER
ports:
- "80:80" # 不要改,否则无法下载客户端
volumes:
- ./seafile/data:/shared
environment:
- DB_HOST=mariadb
- DB_ROOT_PASSWD={{DB_ROOT_PASS}}
- TIME_ZONE=Asia/Shanghai
- SEAFILE_ADMIN_EMAIL=admin@example.com
- SEAFILE_ADMIN_PASSWORD={{ADMIN_PASS}}
- SEAFILE_SERVER_LETSENCRYPT=false
- SEAFILE_SERVER_HOSTNAME=172.168.29.4
depends_on:
- memcached
networks:
vpn:
ipv4_address: 172.168.29.4
seafile-office-preview:
image: seafileltd/office-preview:latest
container_name: seafile-office-preview
restart: always
ports:
- "8089:8089"
command: bash start.sh
volumes:
- ./office-preview/shared:/shared
networks:
vpn:
ipv4_address: 172.168.29.5
networks:
vpn:
driver: bridge
ipam:
driver: default
config:
- subnet: 172.168.29.0/24
gateway: 172.168.29.1
|
关键环境变量:
DB_HOST=mariadb:Docker 网络内 hostnameTIME_ZONE=Asia/Shanghai:必须设——否则所有时间戳差 8 小时SEAFILE_SERVER_LETSENCRYPT=false:内网无需 HTTPSSEAFILE_SERVER_HOSTNAME:用户访问的域名/IP
3.2 一键部署脚本
社区版提供了一个一键部署脚本:
1
2
3
4
5
6
7
8
9
10
| # 1. 克隆仓库
git clone https://github.com/EXP-Tools/seafile-docker /usr/local/seafile-docker
cd /usr/local/seafile-docker
chmod u+x *.sh
# 2. 构建并启动
./run.sh -u admin -p {{ADMIN_PASS}}
# 3. 访问
http://127.0.0.1:80
|
四、Office 文档预览
Seafile 默认只能预览 .pdf / .png / .mp4,要预览 .docx / .xlsx / .pptx 需要 LibreOffice 容器。
4.1 启动 Office Preview
docker-compose 已经包含 seafile-office-preview 服务。启动:
1
| docker-compose up -d seafile-office-preview
|
4.2 配置 Seafile
1
2
3
4
5
6
7
8
9
10
11
| # 1. 进入容器
docker exec -it seafile bash
# 2. 修改 seahub_settings.py
vim /shared/seafile/conf/seahub_settings.py
# 3. 添加
OFFICE_CONVERTOR_ROOT='http://172.168.29.5:8089'
# 4. 重启 Seafile
docker-compose restart seafile
|
4.3 测试
上传一个 test.docx → Web 端点击 → 看到转换后的 PDF 预览。
支持格式:
- Word:.docx / .doc
- Excel:.xlsx / .xls
- PowerPoint:.pptx / .ppt
- 文本:.txt / .md
五、用户与权限
5.1 创建用户(管理员后台)
Web → 右上角头像 → 系统管理 → 用户 → 添加用户:
1
2
3
4
| 用户名:alice
邮箱:alice@example.com
密码:{{USER_PASS}}
角色:普通用户
|
5.2 创建用户组
系统管理 → 组 → 新建组:
1
2
| 组名:研发部
成员:alice, bob, charlie
|
5.3 库(Library)权限
Seafile 的核心是"库"——每个库是独立的同步单元:
| 权限 | 用途 |
|---|
| 读 | 只读 |
| 读 / 写 | 可修改 |
| 管理员 | 可管理成员 |
| 云预览 | 浏览器预览(默认开) |
5.4 加密库
Seafile 支持端到端加密库——服务端也看不到内容。
1
2
3
4
| 1. 创建库时勾选 "加密"
2. 设置库密码
3. 客户端需要输入密码才能同步
4. 忘记密码 → 无法恢复(设计如此)
|
使用场景:高度敏感数据(薪资、客户名单)。
六、客户端
6.1 桌面端
1
2
3
4
5
| # Windows / macOS
# https://www.seafile.com/en/download/
# Ubuntu
sudo apt install seafile-gui
|
客户端特性:
- 双向同步(修改立即上传)
- 离线访问(本地有副本)
- 冲突解决(自动 / 手动)
- 按需同步(不占空间)
6.2 移动端
iOS / Android 装 Seafile 官方 App。
6.3 同步模式
| 模式 | 行为 |
|---|
| 双向同步 | 任何修改立即同步 |
| 仅下载 | 远端可改,本地只读 |
| 不下载(按需) | 云端占空间,本地不占 |
七、文件分块与性能
7.1 分块原理
Seafile 把文件切成 8MB 块存储,不同文件的相同块去重——
1
2
3
4
5
6
7
8
9
| GB 级视频 A 切割:
block-1 (8MB) [hash=abc]
block-2 (8MB) [hash=def]
block-3 (8MB) [hash=ghi]
相同视频 B 切割(用户已下载 A):
block-1 (8MB) [hash=abc] # 秒传(hash 已存在)
block-2 (8MB) [hash=def] # 秒传
block-3 (8MB) [hash=xyz] # 需上传(不同块)
|
实战效果:
- 团队共享相同素材(设计稿、培训视频)—— 50%+ 节省存储
- 多版本文件—— 只存 diff
- 增量同步—— 断点续传
7.2 大文件同步技巧
1
2
3
4
| # 1. 调整块大小(重启生效)
# seafile.conf
[block_backend]
# 默认 8MB,可改 4MB(更细粒度去重)或 16MB(更快)
|
1
2
3
4
| # 2. 限制同步并发(避免大文件上传卡死)
# seafile.conf
[client]
# 限制每文件最大 100 MB/s 上传
|
八、备份策略
8.1 数据卷备份
1
2
3
4
5
6
7
8
| # 1. 停服
docker-compose stop
# 2. 备份
tar czf seafile-backup-$(date +%Y%m%d).tar.gz ./seafile/data ./mariadb/data
# 3. 启动
docker-compose start
|
8.2 数据库单独备份
1
2
3
4
5
6
| # 逻辑备份
docker exec SEAFILE_DB mysqldump -u root -p{{DB_ROOT_PASS}} --databases \
seafile_ccnet seafile_seafile seafile_seahub > seafile-db-$(date +%Y%m%d).sql
# 物理备份(更快)
docker exec SEAFILE_DB mariabackup --backup --target-dir=/backup/$(date +%Y%m%d)
|
8.3 加密库不可备份
重要警告:加密库的密码不在数据库——忘记密码 = 数据永久丢失。
应急措施:
- 密码用 1Password / Vaultwarden 统一管理
- 多个管理员互为备份
- 严禁用脑记
九、升级
9.1 小版本升级
1
2
3
4
5
6
7
8
9
10
11
| # 1. 备份
./backup.sh
# 2. 拉新镜像
docker pull seafileltd/seafile-mc:latest
# 3. 停服
docker-compose stop seafile
# 4. 启动新版本
docker-compose up -d seafile
|
9.2 跨大版本升级
Seafile 跨大版本(如 8 → 9)需要数据库迁移:
1
2
3
4
5
6
7
8
| # 1. 进入容器
docker exec -it seafile bash
# 2. 跑升级脚本
seafile-server/upgrade/upgrade_9.0.sh
# 3. 重启服务
seahub.sh restart
|
注意:跨版本升级必须逐级(8.0 → 8.1 → 9.0),不能跳。
十、典型坑位
10.1 80 端口已占用
修复:
1
2
3
| # docker-compose.yml
ports:
- "8080:80" # 改成 8080
|
然后访问 http://<IP>:8080——但 Seafile 客户端 URL 也要带 :8080。
10.2 客户端下载卡 0%
原因:80 端口是默认值,改了端口客户端连不上。
修复:恢复 80 端口;或前端 Nginx 反代隐藏端口。
10.3 登录提示 “Database is not initialized”
修复:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
| # 进入容器
docker exec -it seafile bash
# 手动初始化
seafile-server/setup-seafile-mysql.sh auto \
-n seafile \
-i 172.168.29.4 \
-p 80 \
-d /shared/seafile/data \
-e 0 \
-P 8082 \
-r / \
-u https://172.168.29.4/seafhttp \
-R /seafile \
-q {{DB_PASS}}
|
10.4 Office 预览失败
修复:
1
2
3
4
5
6
7
8
9
10
11
12
| # 1. 检查 office-preview 容器
docker logs seafile-office-preview
# 2. 确认端口可达
curl http://172.168.29.5:8089
# 3. 重新配置
vim /shared/seafile/conf/seahub_settings.py
OFFICE_CONVERTOR_ROOT='http://172.168.29.5:8089'
# 4. 重启
docker-compose restart seafile
|
十一、安全加固
11.1 数据库加固
1
2
3
4
5
| # 用专用用户(不是 root)
CREATE USER 'seafile'@'%' IDENTIFIED BY '{{DB_PASS}}';
GRANT ALL ON seafile_ccnet.* TO 'seafile'@'%';
GRANT ALL ON seafile_seafile.* TO 'seafile'@'%';
GRANT ALL ON seafile_seahub.* TO 'seafile'@'%';
|
11.2 强制 HTTPS
Nginx 反代:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
| server {
listen 80;
server_name cloud.example.com;
return 301 https://$server_name$request_uri;
}
server {
listen 443 ssl http2;
server_name cloud.example.com;
ssl_certificate /etc/nginx/ssl/cloud.example.com.fullchain.pem;
ssl_certificate_key /etc/nginx/ssl/cloud.example.com.privkey.pem;
client_max_body_size 0; # Seafile 不限大小
location / {
proxy_pass http://seafile:80;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
|
11.3 2FA
系统管理 → 设置 → 用户 → 强制二步验证。
11.4 防爆破
1
2
3
4
5
6
7
| # 容器内
vim /shared/seafile/conf/seahub_settings.py
# 添加
ENABLE_LOGIN_ATTEMPT_LIMIT = True
LOGIN_ATTEMPT_LIMIT = 5
LOGIN_ATTEMPT_LOCKOUT_DURATION = 300 # 5 分钟
|
十二、最佳实践清单
- MariaDB 而非 SQLite:20+ 用户必上
- Memcached 必开:性能提升 5x
- 文件按需同步:本地不占空间
- 加密库谨慎用:密码丢了数据没了
- 块大小 8MB 默认:够用
- Nginx 反代:隐藏 Seafile 真实端口
- HTTPS 强制:登录 / 同步都加密
- 定期备份数据库:库 / 用户 / 权限易丢
- 大文件用分块同步:GB 级别秒级同步
2024+ 视角补充
本文写于 2021-09,2024-2026 期间 Seafile 关键演进:
- Seafile 11.x(2024-Q3):Python 3.11+ 全面;SeaDoc 协同编辑增强(基于 OnlyOffice 内核);AI 智能分类(基于文件内容的自动打标)
- Seafile 12.x(2025-Q1):原生 ARM64 支持;Seafile Search 2.0(基于 Elasticsearch 8);Knowledge Graph 内置(团队知识图谱)
- SeaDoc 实时协作(2024+ GA):类似 Notion / 飞书文档的块编辑体验——Seafile Pro / 企业版专属
- AI 集成:2025 起 Seafile Pro 集成 LLM 智能问答——对团队文件做 RAG 检索问答
- 替代品 / 竞品(2024+ 视角):
- NextCloud 28+(2024):仍是开源网盘国民首选——应用市场最丰富
- ownCloud Infinite Scale 5+(2024):Go 重写版本,性能 / 扩展性大幅提升
- FileCloud 22+(2024):商业网盘,审计 / 合规强
- Immich 1.100+(AI 照片管理)——家用人气暴涨
- Synology Drive / Photos(NAS 自带)
实战建议(2025-2026 视角):
- 大文件 / 团队文件协作 → Seafile 12.x Pro 仍是首选(分块同步、加密库)
- 办公协作 / 文档 → NextCloud 28+ + OnlyOffice / Collabora 更全
- 家用 NAS → Immich(照片)+ Synology Drive(文件)——比 Seafile 更易用
- AI 知识库 → Seafile 12.x Pro 的 RAG + LLM 是 2025+ 趋势,但NextCloud + AnythingLLM 也可达到类似效果
下一步