Canadian media storage for your fediverse instance.
Mastodon and PeerTube both write media to S3. Point them at a Storm bucket, serve the files from your own domain, and keep the instance server for the database and the app.
Hosted and Operated in Canada
The media leaves the server. The instance stays yours.
Mastodon
Attachments, avatars, headers and cached remote media go to the bucket. Your server keeps the database and the web app. Read the Mastodon guide.
PeerTube
Web videos and HLS playlists upload over S3 and stream from the bucket's public URL. NorthTube runs this way. Read the PeerTube guide.
Your domain
Serve media from a stormsites.ca subdomain or a custom domain you own, so a change of storage never changes the URLs your posts point at.
Build your config.
Type your bucket and your public domain. The builder fills in the Storm endpoint, the montreal-1 region and path-style addressing.
S3_ENABLED=true
S3_BUCKET=your-bucket
AWS_ACCESS_KEY_ID=<your key id>
AWS_SECRET_ACCESS_KEY=<your secret>
S3_REGION=montreal-1
S3_ENDPOINT=https://montreal-1.buckets.stormdevelopments.ca
S3_HOSTNAME=montreal-1.buckets.stormdevelopments.ca
S3_ALIAS_HOST=your-bucket.stormsites.ca
# Garage has no per-object ACLs. Empty disables them.
S3_PERMISSION=
PEERTUBE_OBJECT_STORAGE_ENABLED=true
PEERTUBE_OBJECT_STORAGE_ENDPOINT=https://montreal-1.buckets.stormdevelopments.ca
PEERTUBE_OBJECT_STORAGE_REGION=montreal-1
PEERTUBE_OBJECT_STORAGE_FORCE_PATH_STYLE=true
PEERTUBE_OBJECT_STORAGE_CREDENTIALS_ACCESS_KEY_ID=<your key id>
PEERTUBE_OBJECT_STORAGE_CREDENTIALS_SECRET_ACCESS_KEY=<your secret>
PEERTUBE_OBJECT_STORAGE_WEB_VIDEOS_BUCKET_NAME=your-bucket
PEERTUBE_OBJECT_STORAGE_WEB_VIDEOS_PREFIX=web-videos/
PEERTUBE_OBJECT_STORAGE_WEB_VIDEOS_BASE_URL=https://your-bucket.stormsites.ca
PEERTUBE_OBJECT_STORAGE_STREAMING_PLAYLISTS_BUCKET_NAME=your-bucket
PEERTUBE_OBJECT_STORAGE_STREAMING_PLAYLISTS_PREFIX=streaming-playlists/
PEERTUBE_OBJECT_STORAGE_STREAMING_PLAYLISTS_BASE_URL=https://your-bucket.stormsites.ca
# Garage has no per-object ACLs. Empty disables them.
PEERTUBE_OBJECT_STORAGE_UPLOAD_ACL_PUBLIC=
PEERTUBE_OBJECT_STORAGE_UPLOAD_ACL_PRIVATE=
Settings that trip every S3 backend.
Path-style addressing, the region and the public URL are where fediverse media setups fail. Storm is path-style only, signs as montreal-1, and serves media from the host you name, so the builders set all three.
No per-object ACLs.
Garage, the engine under Storm Buckets, has no object ACLs. Public reads come from serving the bucket as a site, and the guides leave the ACL settings off. See what returns NotImplemented →
Canadian storage for a federated community.
Your bucket sits on RAIDZ3-backed storage in Montreal. Our infrastructure disclosures name the provider and facility behind it.
Leaving takes the same S3 tools that moved the media in. Copy the bucket elsewhere and point your instance's public media host at it.
1 TB of Canadian storage. $9 CAD/month.
Start with one terabyte on montreal-1 and add capacity in 1 TB blocks as you grow. You pay for the blocks you choose, rather than each gigabyte used. Uploads and API requests are included. Data transfer never adds an overage charge. See the fair-use policy for transfer allowances and read throttling.
Media grows with every post and every federated follow. A block bills the same whether it holds 100 GB or 950 GB, so the invoice does not move as the cache fills.
Before you get started
Storage requests are reviewed by hand. Capacity is subject to availability. Pay by Interac e-Transfer. All accounts must meet our Acceptable Use Policy.
1 TB of capacity. Add more in 1 TB blocks.
- ✓ Stack blocks as you grow
- ✓ Buckets and keys are not billed units
- ✓ Custom domains + static hosting
- ✓ Audit logs