使用 S3 存储后端

Seafile 专业版支持将文件数据存储在 Amazon S3 及兼容 S3 API 的对象存储服务中,例如第三方公有云对象存储、MinIO、Ceph RADOS Gateway 等。
Seafile 14.0 和 13.0 支持通过以下两种方式配置 单一 S3 存储后端 :
  • 环境变量(推荐) :在 Docker 部署使用的 .env 文件中配置。
  • 配置文件 :在 seafile.conf 中配置各类对象的存储后端。
本文以单一 S3 存储后端为例。需要同时使用多个存储后端时,请参阅 多存储后端 ;从现有存储迁移到 S3 时,请参阅 存储后端数据迁移 。不要仅通过修改存储类型来迁移已经存储的数据。
准备 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 文件中完成配置:
  1. 创建上述三个存储桶,并为 Seafile 提供读写权限。
  2. 将 SEAF_SERVER_STORAGE_TYPE 设置为 s3 。
  3. 根据对象存储提供商设置以下变量。
变量名
说明
默认值或要求
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
Docker 缓存环境变量可参阅 环境变量配置 ;使用配置文件部署时,可参阅 seafile.conf 配置 。
启动并测试
完成配置后启动 Seafile,并确认可以创建资料库、上传文件和下载文件。
Docker 部署在包含 .env 和 Compose 配置的目录中执行:
            
                
                
docker compose up -d
docker compose logs -f seafile
二进制包部署可进入 Seafile 服务器脚本目录后启动服务:
            
                
                
./seafile.sh start
./seahub.sh start
如果是 已有数据的部署 ,不要把直接切换存储后端当作数据迁移方式。请先备份,并按照 存储后端数据迁移 执行迁移。