在 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 进行文件同步。