Skip to content
This repository has been archived by the owner on May 18, 2024. It is now read-only.
/ s3-upload-proxy Public archive

Tool for proxying HTTP uploads to S3 and Elemental MediaStore, designed for video live streaming.

License

Notifications You must be signed in to change notification settings

fsouza/s3-upload-proxy

Folders and files

NameName
Last commit message
Last commit date
May 17, 2024
Dec 29, 2022
Dec 29, 2022
Feb 12, 2019
Sep 19, 2018
Jan 25, 2022
Apr 1, 2021
May 13, 2024
May 13, 2024
Jul 24, 2023

Repository files navigation

s3-upload-proxy

Build Status

Tool for proxying HTTP uploads to S3 buckets and Elemental MediaStore Containers (added later, bad naming :D). Useful for private network protected environments.

Running locally

Make sure you have latest Go, then make sure you have AWS credentials properly configured (s3-upload-proxy uses the default credential provider chain, so you can use environment variables or file-based configuration).

Having Go and AWS credentials, just set the environment variable BUCKET_NAME, build and start the process:

% export BUCKET_NAME=some-bucket
% go build -o s3-upload-proxy
% ./s3-upload-proxy

If you want to use MediaStore, the environment variable UPLOAD_DRIVER should be set to "mediastore" and BUCKET_NAME must be set to the container name on mediastore:

% export UPLOAD_DRIVER=mediastore BUCKET_NAME=mediastoretest
% go build -o s3-upload-proxy
% ./s3-upload-proxy

Environment variables

s3-upload-proxy configuration's is defined using the following environment variables:

Variable Default value Required Description
UPLOAD_DRIVER s3 No Upload driver to use (options are "mediastore" or "s3")
BUCKET_NAME Yes Name of the S3 bucket or the mediastore container (depends on the upload driver)
HEALTHCHECK_PATH /healthcheck No Path for healthcheck
HTTP_PORT 80 No Port to bind (unsigned int)
LOG_LEVEL debug No Logging level
CACHE_CONTROL_RULES No JSON array with cache control rules (see below)
MEDIASTORE_CHUNKED_TRANSFER false No Whether to enable chunked transfer with MediaStore for lower latency

Defining cache-control rules

The tool also allow configuration for cache-control rules. The value of the environment variable CACHE_CONTROL_RULES is a JSON array with the rules. An example:

% export CACHE_CONTROL_RULES='[{"regexp":".mp4$","value":"public, max-age=3600"},{"regexp":".ts$","value":"public, max-age=2, s-maxage=999999"},{"regexp":".m3u8$","value":"private"}]'

Notice that the extension must include the dot.

Also available on Docker Hub: https://hub.docker.com/r/fsouza/s3-upload-proxy/.