跳转至

在 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 时,最简单的选项是将所有环境变量添加到 grampsweb 服务的 environment: 块中:

environment:
  AWS_ACCESS_KEY_ID: my_access_key_id
  AWS_SECRET_ACCESS_KEY: my_secret_access_key
  GRAMPSWEB_MEDIA_BASE_DIR: s3://my_bucket_name
  AWS_DEFAULT_REGION: eu-central-1

请注意,只有 Gramps Web 配置选项带有 GRAMPSWEB_ 前缀;AWS_* 变量由底层的 boto3 库直接读取,必须保持无前缀。

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

同步媒体文件

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