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