Contabo Object Storage
Contabo Object Storage is S3 compatible and a good choice if you have a lot of viewers and a small budget, because there are no data transfer fees. You only have to pay for the storage capacity, starting at $2.49/month for 250 GB. Outbound traffic is routed through Cloudflare CDN. The data center is located in EU-Central. Other locations will be available soon.
Create a Bucket
- Go to Object Storage (Buckets)
- Click “Create Bucket”
- Enter a bucket name and confirm with “Create Bucket”
- On the “Quick Action” column click the share button and enable the “Make public” option
After that it should look like this:

Configure Owncast
Navigate to the “S3 Storage” page.
- Endpoint:
See Bucket URL column without path!
(e.g.https://eu2.contabostorage.com
) - Access Key and Secret Key:
Take from Account > Security & Access > S3 Object Storage Credentials (https://new.contabo.com/account/security) - Bucket: Your Bucket name (e.g.
owncast-demo
) - Region: Endpoint subdomain (e.g.
eu2
) - Serving Endpoint:
Click again on the share button of your bucket and take the public URL.
(e.g.https://eu2.contabostorage.com/de0eb80beb7f432590520366121b0ef0:owncast-demo
) - Force path-style: Needs to be enabled!
Create an expiration policy
You should expire old HLS segments on your Bucket, because the storage capacity is limited. Unfortunately, Contabo does not offer this setting via the interface. Therefore you need to use a command line tool to configure your S3 compatible bucket.
Here we use S3cmd.
Make sure you have Python and pip installed!
Setup S3cmd
- Install S3cmd:
pip install s3cmd
- Start configuration:
s3cmd --configure
- Enter Access Key and Secret Key
- Region: Leave empty (just hit enter)
- S3 Endpoint: Use only the domain without path and protocol!
(e.g.eu2.contabostorage.com
) - DNS-style: Same as S3 endpoint only with
/%(bucket)
at the end
(e.g.eu2.contabostorage.com/%(bucket)
)
Set Lifecycle
- Create a file called
lifecycle_policy.xml
with the following contents:<LifecycleConfiguration> <Rule> <ID>delete-all-objects</ID> <Prefix></Prefix> <Status>Enabled</Status> <Expiration> <Days>1</Days> </Expiration> </Rule> </LifecycleConfiguration>
- Run
s3cmd setlifecycle lifecycle_policy.xml s3://YOURBUCKETNAME
- Run
s3cmd info s3://YOURBUCKETNAME
and you should seeExpiration Rule: all objects in this bucket will expire in '1' day(s) after creation
. If so, you are now ready!
Rate limiting
Please note that Contabo has rate limiting for public files in their Object Storage. Each file can be requested 250 times per second. This sound like a lot, but keep in mind you might hit this when hosting high traffic streams.