Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Support for S3 storage and CDN for project files #324

Merged
merged 22 commits into from
Sep 25, 2024

Conversation

martastain
Copy link
Member

@martastain martastain commented Aug 21, 2024

Overview

Project files (such as reviewables and comment attachments) can now be stored in S3-compatible object storage. Storage configurations are flexible and can be overridden on a per-project basis. On cloud instances, Ayon can also be configured to use the Ynput Cloud CDN for file delivery.

While the current implementation allows for site-wide S3 integration via environment variables, future updates will extend functionality to allow per-project overrides.

Environment Configuration

You can set up S3 storage using the following environment variables:

environment:
  - "AYON_DEFAULT_PROJECT_STORAGE_TYPE=s3"
  - "AYON_DEFAULT_PROJECT_STORAGE_ROOT=media/{instance_id}/server/projects"
  - "AYON_DEFAULT_PROJECT_STORAGE_BUCKET_NAME=ayon-media"

  - "AWS_ACCESS_KEY_ID=myawsaccesskeyid"
  - "AWS_SECRET_ACCESS_KEY=myawssecretassetkey"
  - "S3_ENDPOINT_URL=https://s3.mystudio.example.com"
  - "S3_REGION_NAME=home-1"

In this configuration, the specified S3 bucket will be used instead of the default local storage at /storage/server/projects.

The AYON_DEFAULT_PROJECT_STORAGE_ROOT replaces the previous project_storage_dir directive and is applicable to both local and s3 storage types. The directory structure beneath the root remains identical, making it easy to migrate existing files to S3.

Additionally, the {instance_id} placeholder is automatically replaced with the current instance ID, supporting scenarios involving multiple Ayon instances sharing a single bucket. If the S3_ environment variables are not provided, the system will attempt to resolve the appropriate S3 settings based on the AWS access key provided.

CDN Support

If you're using a CDN, you can specify an HTTP endpoint for file delivery via the AYON_DEFAULT_PROJECT_STORAGE_CDN_RESOLVER environment variable.

This endpoint is responsible for resolving the current project and file ID into a valid file URL.

If no CDN resolver is specified, Ayon will fallback to generating a signed URL from the S3 storage and redirect users to that link when a file is requested.

Compatibility

This feature has been tested with:

  • AWS S3 + CloudFront
  • Self-hosted Min.io + Signed URLs

@martastain martastain self-assigned this Aug 21, 2024
@martastain martastain added the type: feature Adding something new and exciting to the product label Aug 21, 2024
@martastain martastain changed the title CDN Support for project files Support for S3 storage and CDN for project files Sep 20, 2024
@martastain martastain marked this pull request as ready for review September 23, 2024 13:51
@martastain martastain merged commit a100ee4 into develop Sep 25, 2024
@martastain martastain deleted the project-file-cdn-support branch October 21, 2024 13:44
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
type: feature Adding something new and exciting to the product
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant