跳转至

在 S3 上托管媒体文件

与将家谱的媒体文件托管在与 Gramps 数据库相同的服务器上相比,它们也可以托管在 Amazon S3 或其他兼容 API 的对象存储服务上。这大大减少了 Gramps Web 服务器的存储和流量需求。

准备凭证

在您的 AWS(或其他对象存储服务)账户中,获取 访问密钥 ID秘密访问密钥(您可能首先想创建一个具有仅访问 S3 权限的安全策略的单独用户)。

上传媒体文件

要将现有的媒体文件上传到 S3,在 Linux 上,您可以使用带有 S3 媒体上传器插件的本地 Gramps 安装,您可以直接从 Gramps 桌面安装该插件。但是,需要一些额外的配置。

该插件在后台使用 boto3 Python 库。您需要先安装它:

python3 -m pip install boto3

在命令行中,将访问密钥 ID 和秘密密钥导出到相应的环境变量中:

export AWS_ACCESS_KEY_ID=my_access_key_id
export AWS_SECRET_ACCESS_KEY=my_secret_access_key

现在,您可以通过运行以下命令启动上传器,

gramps -O "My Family Tree" -a tool \
    -p "name=s3uploader,bucket_name=my_bucket_name"

将 "My Family Tree" 替换为您的家谱名称,将 my_bucket_name 替换为您的 S3 存储桶的完整名称。您将需要一个专用的 S3 存储桶用于您的 Gramps Web 实例。如果存储桶尚不存在,S3 上传器插件将尝试创建它。

配置 Gramps Web

要将新的 S3 存储桶用作 Gramps Web 的媒体源,只需将 MEDIA_BASE_DIR 配置选项 设置为 s3://my_bucket_name

在使用 Docker Compose 时,最简单的选项是将所有环境变量添加到 env 块中:

env:
  AWS_ACCESS_KEY_ID: my_access_key_id
  AWS_SECRET_ACCESS_KEY: my_secret_access_key
  MEDIA_BASE_DIR: s3://my_bucket_name
  AWS_DEFAULT_REGION: eu-central-1

如果您想使用除 AWS 之外的其他 S3 兼容对象存储(例如 GCP 或用于本地测试),请设置 AWS_ENDPOINT_URL 环境变量。

同步媒体文件

为了保持本地 Gramps 安装与 S3 托管的 Gramps Web 媒体文件之间的媒体文件同步,Gramps Web 同步插件 支持通过 Web API 进行文件同步。