Seafile 专业版支持将文件数据存储在 Amazon S3 及兼容 S3 API 的对象存储服务中,例如第三方公有云对象存储、MinIO、Ceph RADOS Gateway 等。
Seafile 14.0 和 13.0 支持通过以下两种方式配置
单一 S3 存储后端
:
-
环境变量(推荐) :在 Docker 部署使用的 .env 文件中配置。
-
配置文件 :在 seafile.conf 中配置各类对象的存储后端。
准备 S3 存储桶
首先在对象存储服务中创建至少三个存储桶(Bucket),分别保存 Seafile 的不同对象:
对象类型
环境变量
建议存储桶名称
Commit 对象
S3_COMMIT_BUCKET
seafile-commit-object
FS 对象
S3_FS_BUCKET
seafile-fs-object
Block 对象
S3_BLOCK_BUCKET
seafile-block-object
三个存储桶应分别创建,不要使用同一个存储桶替代。存储桶名称请遵守
Amazon S3 存储桶命名规则
,使用小写字母、数字和连字符等符合规则的字符,避免大写字母、空格以及
MyCommitObjects
这样的驼峰式名称。
还需要准备可访问相应存储桶的访问密钥及密钥 ID。运行于 AWS EC2 的 Seafile 专业版也可以使用 IAM Role 认证,详见下文。
使用环境变量配置 S3(推荐)
在 Seafile Docker 的
.env
文件中完成配置:
-
创建上述三个存储桶,并为 Seafile 提供读写权限。
-
将 SEAF_SERVER_STORAGE_TYPE 设置为 s3 。
-
根据对象存储提供商设置以下变量。
变量名
说明
默认值或要求
SEAF_SERVER_STORAGE_TYPE
Seafile 服务器存储后端类型;使用单一 S3 存储后端时设为
s3
。
使用 S3 时设为
s3
S3_COMMIT_BUCKET
保存 Commit 对象的存储桶。
必填
S3_FS_BUCKET
保存 FS 对象的存储桶。
必填
S3_BLOCK_BUCKET
保存 Block 对象的存储桶。
必填
S3_KEY_ID
S3 访问密钥 ID。
通常必填;使用 IAM Role 时可不填
S3_SECRET_KEY
S3 访问密钥。
通常必填;使用 IAM Role 时可不填
S3_AWS_REGION
AWS S3 存储桶所在区域。
us-east-1
S3_HOST
S3 服务端点(Endpoint)。使用非 AWS 存储服务时需设置。
非 AWS 服务必填
S3_USE_HTTPS
是否通过 HTTPS 访问 S3。
true
S3_USE_V4_SIGNATURE
是否使用 AWS Signature Version 4 签名协议。
true
S3_PATH_STYLE_REQUEST
是否使用路径样式 URL 访问对象。
false
S3_SSE_C_KEY
用于 SSE-C 服务端加密的 32 字符密钥。
默认不设置
路径样式与虚拟主机样式:
-
路径样式: https://storage.example.com/bucketname/object 。
-
虚拟主机样式: https://bucketname.s3.amazonaws.com/object 。
Amazon S3 通常使用虚拟主机样式;多数自建的 S3 兼容服务建议设置
S3_PATH_STYLE_REQUEST=true
。第三方公有云是否需要启用路径样式,应以其服务端点和兼容性要求为准。
S3_HOST
应填写存储服务的主机名,必要时带端口,例如
192.168.1.123:8080
;协议由
S3_USE_HTTPS
控制。对于使用自定义
S3_HOST
的示例,
S3_AWS_REGION
不作为 AWS 区域端点选择依据。
AWS S3
下面以 AWS 法兰克福区域为例,编辑
.env
:
SEAF_SERVER_STORAGE_TYPE=s3
S3_COMMIT_BUCKET=my-commit-objects
S3_FS_BUCKET=my-fs-objects
S3_BLOCK_BUCKET=my-block-objects
S3_KEY_ID=your-key-id
S3_SECRET_KEY=your-secret-key
S3_USE_V4_SIGNATURE=true
S3_PATH_STYLE_REQUEST=false
S3_AWS_REGION=eu-central-1
S3_HOST=
S3_USE_HTTPS=true
请根据实际创建存储桶的 AWS 区域修改
S3_AWS_REGION
。
Exoscale
使用 Exoscale 对象存储时,可以按以下方式配置:
SEAF_SERVER_STORAGE_TYPE=s3
S3_COMMIT_BUCKET=my-commit-objects
S3_FS_BUCKET=my-fs-objects
S3_BLOCK_BUCKET=my-block-objects
S3_KEY_ID=your-key-id
S3_SECRET_KEY=your-secret-key
S3_USE_V4_SIGNATURE=true
S3_PATH_STYLE_REQUEST=true
S3_HOST=sos-de-fra-1.exo.io
S3_USE_HTTPS=true
Hetzner
使用 Hetzner Object Storage 时,可以按以下方式配置:
SEAF_SERVER_STORAGE_TYPE=s3
S3_COMMIT_BUCKET=my-commit-objects
S3_FS_BUCKET=my-fs-objects
S3_BLOCK_BUCKET=my-block-objects
S3_KEY_ID=your-key-id
S3_SECRET_KEY=your-secret-key
S3_USE_V4_SIGNATURE=true
S3_PATH_STYLE_REQUEST=true
S3_HOST=fsn1.your-objectstorage.com
S3_USE_HTTPS=true
其他第三方公有云对象存储
其他兼容 S3 API 的公有云服务(例如部分支持 S3 协议的云存储产品)可以参考下面的示例。不同服务商的 Endpoint、签名和 URL 样式要求可能不同,请按实际服务调整。
SEAF_SERVER_STORAGE_TYPE=s3
S3_COMMIT_BUCKET=my-commit-objects
S3_FS_BUCKET=my-fs-objects
S3_BLOCK_BUCKET=my-block-objects
S3_KEY_ID=your-key-id
S3_SECRET_KEY=your-secret-key
S3_USE_V4_SIGNATURE=true
S3_PATH_STYLE_REQUEST=true
S3_HOST=storage.example.com
S3_USE_HTTPS=true
私有部署的 S3 兼容存储
MinIO、Ceph RADOS Gateway 等自建对象存储可使用以下配置。请将示例主机名、端口和协议改为实际值。
SEAF_SERVER_STORAGE_TYPE=s3
S3_COMMIT_BUCKET=my-commit-objects
S3_FS_BUCKET=my-fs-objects
S3_BLOCK_BUCKET=my-block-objects
S3_KEY_ID=your-key-id
S3_SECRET_KEY=your-secret-key
S3_USE_V4_SIGNATURE=true
S3_PATH_STYLE_REQUEST=true
S3_HOST=192.168.1.123:8080
S3_USE_HTTPS=true
如果私有 S3 服务仅提供 HTTP,应将
S3_USE_HTTPS
设置为
false
;生产环境建议使用 HTTPS。
使用 AWS IAM Role 访问 S3
Seafile 14.0 专业版及 Seafile 13.0.6 或更新的 13.0 专业版
支持在 AWS EC2 实例上使用 IAM Role 访问 S3。Seafile 会通过 EC2 实例元数据服务取得临时凭证,不需要在
.env
中填写固定的
S3_KEY_ID
和
S3_SECRET_KEY
。
启用前,确保 Seafile 运行在 AWS EC2 实例上、该实例已绑定 IAM Role,并且角色具有访问目标 S3 存储桶的权限。
变量名
说明
默认值或要求
S3_USE_IAM_ROLE
是否启用 IAM Role 认证。
false
,启用时设为
true
S3_IAM_ROLE_NAME
绑定到 EC2 实例的 IAM Role 名称。
启用时必填
S3_IAM_ROLE_ENDPOINT
IAM 实例元数据服务的访问端点。
通常无需设置
例如,在已配置 S3 存储桶和区域的基础上添加:
S3_USE_IAM_ROLE=true
S3_IAM_ROLE_NAME=your-ec2-iam-role
该方式适用于符合上述条件的 AWS EC2 部署;在非 EC2 环境中不要直接套用。
为 SeaSearch 和元数据服务器配置 S3
在 Seafile 专业版 Docker 部署中,SeaSearch 和元数据服务器(如果已启用)可以复用
.env
中的 S3 认证信息,并分别使用独立的存储桶。
组件
配置项
说明
SeaSearch
SS_STORAGE_TYPE=s3
、
S3_SS_BUCKET
将 SeaSearch 数据保存到指定 S3 存储桶。
元数据服务器
MD_STORAGE_TYPE=s3
、
S3_MD_BUCKET
将元数据服务器的数据保存到指定 S3 存储桶。
请先创建对应的存储桶,并确保凭证具有访问权限。未部署相应组件时,无需配置这些变量。
.env
中的这组 S3 配置适用于单一 S3 存储后端。使用其他后端或需要在
seafile.conf
中设置特殊选项时,应将
SEAF_SERVER_STORAGE_TYPE
留空或删除,让 Seafile 读取
seafile.conf
,并根据组件的实际需求设置
SS_STORAGE_TYPE
、
MD_STORAGE_TYPE
。
使用配置文件
seafile.conf
配置 S3
也可以在
seafile.conf
中为 Commit、FS 和 Block 三种对象分别配置 S3 存储后端。各配置段的名称为:
-
[commit_object_backend]
-
[fs_object_backend]
-
[block_backend]
每个配置段都需要指定
name = s3
,并填写相应存储桶和认证信息。
配置项
说明
name
存储后端类型;使用 S3 时设为
s3
。
bucket
当前对象类型使用的存储桶名称。
key_id
S3 访问密钥 ID。
key
S3 访问密钥。
use_v4_signature
是否使用 V4 签名协议,建议设为
true
;不设置时使用 V2。
use_https
是否通过 HTTPS 连接 S3,建议设为
true
。
aws_region
AWS S3 区域;使用 V4 且未设置时默认
us-east-1
。
host
S3 访问端点;非 AWS 服务通常需要设置。
path_style_request
是否使用路径样式 URL;自建 S3 兼容服务通常设为
true
。
sse_c_key
SSE-C 服务端加密密钥,长度为 32 个字符。
Docker 部署注意:
如果要以
seafile.conf
中的配置为准,应在
.env
中删除
SEAF_SERVER_STORAGE_TYPE
或将其留空,避免单一 S3 环境变量设置覆盖自定义存储后端配置。
Amazon S3
编辑
seafile.conf
,添加或修改以下配置:
[commit_object_backend]
name = s3
bucket = my-commit-objects
key_id = your-key-id
key = your-secret-key
use_v4_signature = true
aws_region = eu-central-1
use_https = true
[fs_object_backend]
name = s3
bucket = my-fs-objects
key_id = your-key-id
key = your-secret-key
use_v4_signature = true
aws_region = eu-central-1
use_https = true
[block_backend]
name = s3
bucket = my-block-objects
key_id = your-key-id
key = your-secret-key
use_v4_signature = true
aws_region = eu-central-1
use_https = true
如果使用 AWS 中国区域,可能需要在各配置段中填写相应的中国区域 S3 Endpoint,例如北京区域
s3.cn-north-1.amazonaws.com.cn
。请按实际区域和网络要求设置。
第三方公有云对象存储
第三方公有云对象存储与 AWS S3 的主要区别通常在于访问端点
host
。下面以通用 S3 兼容服务为例:
[commit_object_backend]
name = s3
bucket = my-commit-objects
host = storage.example.com
key_id = your-key-id
key = your-secret-key
use_v4_signature = true
use_https = true
path_style_request = true
[fs_object_backend]
name = s3
bucket = my-fs-objects
host = storage.example.com
key_id = your-key-id
key = your-secret-key
use_v4_signature = true
use_https = true
path_style_request = true
[block_backend]
name = s3
bucket = my-block-objects
host = storage.example.com
key_id = your-key-id
key = your-secret-key
use_v4_signature = true
use_https = true
path_style_request = true
Exoscale 可将
host
替换为
sos-de-fra-1.exo.io
,Hetzner 可替换为
fsn1.your-objectstorage.com
;其他提供商请使用其实际 Endpoint。如果服务商要求显式指定签名区域,可以在三个配置段中补充
aws_region
。
私有部署的 S3 兼容存储
自建 S3 服务通常需要指定主机、端口和路径样式请求。例如:
[commit_object_backend]
name = s3
bucket = my-commit-objects
key_id = your-key-id
key = your-secret-key
host = 192.168.1.123:8080
path_style_request = true
use_v4_signature = true
use_https = true
[fs_object_backend]
name = s3
bucket = my-fs-objects
key_id = your-key-id
key = your-secret-key
host = 192.168.1.123:8080
path_style_request = true
use_v4_signature = true
use_https = true
[block_backend]
name = s3
bucket = my-block-objects
key_id = your-key-id
key = your-secret-key
host = 192.168.1.123:8080
path_style_request = true
use_v4_signature = true
use_https = true
host
中不要加
http://
或
https://
。只有当对象存储端点支持 HTTPS 时,才将
use_https
设置为
true
。
使用 SSE-C 服务端加密
Seafile 专业版支持使用客户提供的密钥(SSE-C)对 S3 对象进行服务端加密。开启 SSE-C 时,必须使用
V4 签名协议
和
HTTPS
。
如果使用
.env
,设置
S3_SSE_C_KEY
;如果使用
seafile.conf
,在三个对象存储配置段中均设置同一个
sse_c_key
,例如:
[commit_object_backend]
# 保留该段其他 S3 配置
use_v4_signature = true
use_https = true
sse_c_key = XiqMSf3x5ja4LRibBbV0sVntVpdHXl3P
[fs_object_backend]
# 保留该段其他 S3 配置
use_v4_signature = true
use_https = true
sse_c_key = XiqMSf3x5ja4LRibBbV0sVntVpdHXl3P
[block_backend]
# 保留该段其他 S3 配置
use_v4_signature = true
use_https = true
sse_c_key = XiqMSf3x5ja4LRibBbV0sVntVpdHXl3P
密钥需要为
32 个字符
的字符串,可以使用以下命令生成:
openssl rand -base64 24
生成的密钥不必专门采用 Base64 编码,但应妥善保管,避免泄露或丢失。
重要:不要对已经存有未加密对象的 S3 存储桶直接启用 SSE-C。
Seafile 不支持在同一存储桶中混用加密与未加密对象。这样操作可能导致原有对象无法访问。应先创建新的存储桶,再按照
存储后端数据迁移
完成迁移。
缓存配置
使用 S3 存储后端时,建议启用内存缓存以提高对象访问性能。
-
Docker 部署 :Seafile 14.0 和 13.0 默认使用 Redis 作为缓存服务,通常可以沿用现有缓存配置。
-
使用二进制包部署专业版 :需事先安装 boto3 ,并安装、配置 Memcached 或 Redis。建议至少为缓存服务分配 128 MB 内存。
二进制包部署中,可以按安装环境安装
boto3
:
sudo pip install boto3
启动并测试
完成配置后启动 Seafile,并确认可以创建资料库、上传文件和下载文件。
Docker 部署在包含
.env
和 Compose 配置的目录中执行:
docker compose up -d
docker compose logs -f seafile
二进制包部署可进入 Seafile 服务器脚本目录后启动服务:
./seafile.sh start
./seahub.sh start