使用 S3 存储后端

从 Seafile 13 开始,有两种方法可以为 Seafile 服务器配置 S3 存储( 单个 S3 存储后端
  • 环境变量(从 Seafile 13 开始推荐)
  • 配置文件 (seafile.conf)
使用环境变量设置 (13.0)
从 Seafile 13 开始,将支持从环境变量配置 S3,并将提供更方便的方式。这部分的详细说明可以参考 .env 文件的介绍。
  • Seafile 准备至少 3 个桶(S3_COMMIT_BUCKET、S3_FS_BUCKET 和 S3_BLOCK_BUCKET)。
  • 将SEAF_SERVER_STORAGE_TYPE设置为 true
  • 下表填写 .env 中相应的变量值:
变量名
描述
默认值
S3_COMMIT_BUCKET
S3 存储后端commit对象存储桶
SEAF_SERVER_STORAGE_TYPE=s3时必填
S3_FS_BUCKET
S3 存储后端fs对象存储桶
SEAF_SERVER_STORAGE_TYPE=s3时必填
S3_BLOCK_BUCKET
S3 存储后端block对象存储桶
SEAF_SERVER_STORAGE_TYPE=s3时必填
S3_KEY_ID
S3 存储后端密钥 ID
SEAF_SERVER_STORAGE_TYPE=s3时必填
S3_SECRET_KEY
S3 存储后端密钥
SEAF_SERVER_STORAGE_TYPE=s3时必填
S3_AWS_REGION
存储桶的区域
us-east-1(默认值)
S3_HOST
存储桶的主机地址
(不使用 AWS 时必填)
S3_USE_HTTPS
使用与 S3 的 HTTPS 连接(如果已启用)
true
S3_USE_V4_SIGNATURE
如果启用,使用 S3 的 v4 协议
true
S3_PATH_STYLE_REQUEST
此选项要求 Seafile 使用 URL https://192.168.1.123:8080/bucketname/object 访问对象。在Amazon S3,默认 URL 格式为虚拟主机样式,例如https://bucketname.s3.amazonaws.com/object。但这种风格依赖于高级 DNS 服务器设置。因此,大多数自托管存储系统仅实现路径样式格式。
false
S3_SSE_C_KEY
openssl rand -base64 24 可以生成一串 32 个字符。它可以是任何 32 个字符长的随机字符串。如果启用 SSE-C,则需要使用 V4 身份验证协议和 https。
无论您使用的是 AWS 还是任何其他 S3 兼容对象存储,我们都建议您遵循   S3 命名规则 。在 S3 上创建存储桶时,请先阅读   S3 命名规则 。注意,特别是不要在存储桶的名称中使用大写字母(不要使用驼峰式命名,例如 MyCommitObjects)。
            
                
                
#推荐命名方式
seafile-commit-object
seafile-fs-object
seafile-block-object
S3_SSE_C_KEY   是一个包含 32 个字符的字符串。 您可以使用以下命令生成 sse_c_key。请注意,密钥不必进行 base64 编码。它可以是任何 32 个字符长的随机字符串。该示例仅显示了生成此类键的一种可能方法。
            
                
                
openssl rand -base64 24
但是,如果您的 S3 存储桶中有现有数据,则 打开上述配置将使您的数据无法访问 。这是因为 Seafile 服务器不支持在同一存储桶中混合加密和非加密对象。您必须创建一个新存储桶,并按照 存储后端迁移 将数据迁移到该存储桶中。
除了 Seafile 服务器之外,以下扩展(如果已安装)将与 Seafile 服务器共享   .env   中的相同 S3 授权信息:
SeaSearch:通过指定 SS_STORAGE_TYPE=s3 和 S3_SS_BUCKET 来启用该功能
元数据服务器:通过指定 MD_STORAGE_TYPE=s3 和 S3_MD_BUCKET 来启用该功能。
            
                
                
#AWS
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
            
                
                
#第三方共有云
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_AWS_REGION=eu-central-1 # will be ignored when S3_HOST is specified
S3_HOST=<access endpoint for storage provider>
S3_USE_HTTPS=true

            
                
                
#私有部署
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_AWS_REGION=eu-central-1 # will be ignored when S3_HOST is specified
S3_HOST=<your s3 api endpoint host>:<your s3 api endpoint port>
S3_USE_HTTPS=true # according to your S3 configuration
使用配置文件进行设置(兼容12.0及之前版本)
Amazom S3
AWS S3 是最初的 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
[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
[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
还需按照添加内存缓存配置: 缓存配置
各配置项释义如下:
  • bucket:需要为 commit fs block 对象创建单独的桶,当您在 S3 上创建 buckets 时,请先阅读 S3 bucket 命名规则 。注意, 尤其不要在 bucket 的名字中使用 大写 字母(不要使用骆驼式命名法,比如 MyCommitOjbects)。
  • key_id 和 key: key_id key 用来提供 S3 的身份认证。您可以在您的 AWS 账户页面的"安全证书"段找到 key_id key
  • use_v4_signature:有两种版本的身份验证协议可用于S3存储。版本2是较旧的版本,一些区域可能仍支持它;版本4是Amazon S3当前使用的版本,并得到大多数区域的支持。如果不设置此选项,Seafile将使用v2协议,建议使用v4协议。
  • aws_region:如果使用v4协议,请将此选项设置为创建桶时选择的区域。如果没有设置,并且您使用的是v4协议,Seafile将使用 us-east-1 作为默认值。如果您使用v2协议,此选项将被忽略。
如果您使用的S3是中国区,还需要在每个bucket配置段下添加相应地区的host配置,例如中国北京区:
            
                
                
host = s3.cn-north-1.amazonaws.com.cn
使用用户提供的密钥进行服务器端加密 (SSE-C)
从 Pro 11.0 开始,您可以将 SSE-C 用于 S3。在 seafile.conf 中添加以下选项:
            
                
                
[commit_object_backend]
name = s3
......
use_v4_signature = true
use_https = true
sse_c_key = XiqMSf3x5ja4LRibBbV0sVntVpdHXl3P
[fs_object_backend]
name = s3
......
use_v4_signature = true
use_https = true
sse_c_key = XiqMSf3x5ja4LRibBbV0sVntVpdHXl3P
[block_backend]
name = s3
......
use_v4_signature = true
use_https = true
sse_c_key = XiqMSf3x5ja4LRibBbV0sVntVpdHXl3P
ssk_c_key 是一个 32 字节的随机字符串。
第三方公有云服务
国内市场上还有其他与S3兼容的云存储提供商,如阿里云、腾讯云和华为云。以下是相关配置:
编辑 seafile.conf 文件
            
                
                
[commit_object_backend]
name = s3
bucket = my-commit-objects
host = <access endpoint for storage provider>
key_id = your-key-id
key = your-secret-key
#v2 authentication protocol will be used if not set
use_v4_signature = true
#required for v4 protocol. ignored for v2 protocol
aws_region = <region name for storage provider>
[fs_object_backend]
name = s3
bucket = my-fs-objects
host = <access endpoint for storage provider>
key_id = your-key-id
key = your-secret-key
use_v4_signature = true
aws_region = <region name for storage provider>
[block_backend]
name = s3
bucket = my-block-objects
host = <access endpoint for storage provider>
key_id = your-key-id
key = your-secret-key
use_v4_signature = true
aws_region = <region name for storage provider>
还需要添加内存缓存配置: 缓存配置
配置项释义:
  • host:访问存储服务的端点。通常以地区名称开头。必须提供主机地址,否则Seafile将使用AWS的地址。
  • bucket:需要为 commit fs block 对象创建单独的桶。
  • key_id 和 key: key_id key 用来提供 S3 的身份认证。
  • use_v4_signature:有两种版本的身份验证协议可用于S3存储。版本2是较旧的版本,一些服务商可能仍支持它;版本4是Amazon S3当前使用的版本,并得到大多数服务商的支持。如果不设置此选项,Seafile将使用v2协议,建议使用v4协议。
  • aws_region:如果使用v4协议,请将此选项设置为创建桶时选择的区域。如果没有设置,并且您使用的是v4协议,Seafile将使用 us-east-1 作为默认值。如果您使用v2协议,此选项将被忽略。
私有部署的 S3 存储
许多私有部署的对象存储系统现在都兼容 S3 API,例如 OpenStack Swift 和 Ceph 的 RADOS Gateway。你可以使用这些兼容 S3 的存储系统作为 Seafile 的后端。下面是一个配置示例:
            
                
                
[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
[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
[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
[memcached]
memcached_options = --SERVER=localhost --POOL-MIN=10 --POOL-MAX=100
还需要添加内存缓存配置: 缓存配置
配置项释义:
  • host:它是 S3 兼容服务的地址和端口。不能在 host 选项前添加 "http "或 "https"。默认情况下,它将使用 http 连接。如果要使用 https 连接,请设置 use_https = true 选项。
  • bucket:需要为 commit fs block 对象创建单独的桶。
  • key_id 和 key: key_id key 用来提供 S3 的身份认证。
  • path_style_request 要求 Seafile 使用类似 https://192.168.1.123:8080/bucketname/object 的 URL 来访问对象。在亚马逊 S3 中,默认的 URL 格式是虚拟主机样式,如 https://bucketname.s3.amazonaws.com/object 。但这种方式依赖于高级 DNS 服务器设置。因此,大多数兼容 S3 的存储系统只实现了路径样式格式。
以下是上面示例配置中未显示的几个选项:
  • use_v4_signature:有两种版本的身份验证协议可用于S3存储。版本2是大多数私有部署存储支持的协议;版本4是AWS S3当前使用的协议,但某些私有部署存储可能不支持。如果不设置此选项,Seafile将使用v2协议。我们建议先使用V2,如果它不起作用,请尝试V4。
  • aws_region:如果使用v4协议,请将此选项设置为创建桶时选择的区域。如果没有设置,并且您使用的是v4协议,Seafile将使用 us-east-1 作为默认值。如果您使用v2协议,此选项将被忽略。
使用HTTPS连接到S3
要使用 HTTPS 连接到 S3,请在 seafile.conf 中添加以下选项:
            
                
                
[commit_object_backend]
name = s3
......
use_https = true

[fs_object_backend]
name = s3
......
use_https = true

[block_backend]
name = s3
......
use_https = true
因为服务器软件包是基于CentOS 6构建的,所以如果您使用的是Debian / Ubuntu,则必须将系统CA软件包复制到CentOS的CA软件包路径。否则,Seafile找不到CA捆绑软件,因此SSL连接将失败。
            
                
                
sudo mkdir -p /etc/pki/tls/certs
sudo cp /etc/ssl/certs/ca-certificates.crt /etc/pki/tls/certs/ca-bundle.crt
sudo ln -s /etc/pki/tls/certs/ca-bundle.crt /etc/pki/tls/cert.pem
启动服务测试
您可以通过以下命令启动seafile服务并访问您的网站。
            
                
                
./seafile.sh start
./seahub.sh start