Featured image of post Seafile 私有云盘:高性能文件同步 + Office 预览 + 团队协作

Seafile 私有云盘:高性能文件同步 + Office 预览 + 团队协作

部署 Seafile Pro / Community Edition,对接 MariaDB + Memcached,启用 Office 文档预览,配置多用户隔离、加密存储、备份

Seafile 是国内开发的开源网盘,核心优势是大文件同步速度和分块存储。本篇把 Docker 化部署、数据库对接、Office 预览、团队协作整理清楚。

阅读对象:需要自建大文件存储 / 团队文件协作的运维 / 后端 覆盖范围:Seafile CE 部署 + MariaDB + Memcached + Office 预览(LibreOffice)+ 加密存储 + 多用户隔离 + 备份

一、Seafile vs NextCloud

维度SeafileNextCloud
文件分块存储✅ 内置(默认 8MB 块)❌ 整体存储
大文件同步极快(增量分块)一般
同步算法自研 BitTorrent-likersync 类
数据库SQLite / MySQL / PostgreSQLSQLite / 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 网络内 hostname
  • TIME_ZONE=Asia/Shanghai必须设——否则所有时间戳差 8 小时
  • SEAFILE_SERVER_LETSENCRYPT=false:内网无需 HTTPS
  • SEAFILE_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 也可达到类似效果

下一步

使用 Hugo 构建
主题 StackJimmy 设计