Skip to content

Hosting media files on S3

Instead of hosting the media files of the family tree on the same server as the Gramps database, they can also be hosted on Amazon S3 or a different API-compatible object storage service. This strongly reduces storage and traffic requirements for the Gramps Web server.

Preparing credentials

In your AWS (or other object storage service) account, get an access key ID and secret access key (you may first want to create a separate user with a security policy allowing only access to S3).

Upload media files

To upload your existing media files to S3, on Linux you can use a local Gramps installation with the S3 Media Uploader Addon, that you can install directly from Gramps desktop. However, some additional configuration is necessary.

The addon uses the boto3 Python library under the hood. You need to install it first with

python3 -m pip install boto3

On the command line, export the access key ID and secret key to the appropriate environment variables:

export AWS_ACCESS_KEY_ID=my_access_key_id
export AWS_SECRET_ACCESS_KEY=my_secret_access_key

Now, you can start the uploader by runing the following command,

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

replacing "My Family Tree" with the name of your family tree and my_bucket_name with the complete name of your S3 bucket. You will need a dedicated S3 bucket for your Gramps Web instance. If the bucket does not exist yet, the S3 Uploader Addon will attempt to create it.

Configure Gramps Web

To use the new S3 bucket as media source for Gramps Web, simply set the MEDIA_BASE_DIR configuration option to s3://my_bucket_name.

When using Docker Compose, the easiest option is to add all environment variables to the env block:

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

If you want to use an S3-compatible object storage other than AWS (e.g. GCP or for local testing), set the AWS_ENDPOINT_URL environment variable.

Synchronizing media files

To keep media files in sync between a local Gramps installation and S3-hosted Gramps Web media files, the Gramps Web Sync Addon supports file synchronization via the Web API.