Hetzner recently launched their S3-compatible object storage. Like many other Hetzner services, their object storage offering looks really interesting because it’s significantly less expensive than the competition, especially AWS – the initial pricing suggests it’s ~4x cheaper for storage, and ~50x (!) cheaper for traffic.
Let’s look how you can use it in Ruby on Rails!
TLDR
This is probably what you’re looking for, an example storage.yml
:
# This is your storage.yml in your rails ./config/ directory.
# .. the local and test services are omitted ..
hetzner:
service: S3
endpoint: "https://fsn1.your-objectstorage.com"
access_key_id: <%= Rails.application.credentials.dig(:hetzner, :access_key_id) %>
secret_access_key: <%= Rails.application.credentials.dig(:hetzner, :secret_access_key) %>
region: fsn1
bucket: YOUR_BUCKET_NAME
Cool. That’s it. If you still have questions, read on for the longer explanation.
Longer Explanation
To understand things a bit better, let’s go through each of the keys in your storage.yml:
- service: This one is pretty self-explanatory. Set it to “S3”.
- endpoint: ActiveStorage (or the aws gem?) requires you to provide an endpoint if you’re using an S3-compatible service which is not AWS. In this case, we point it to “https://fsn1.your-objectstorage.com“. Note that you have to include the region (fsn1) in the URL, even though you’re specifying it again further below.
- access_key_id: This is the access key ID you get in the Hetzner Cloud dashboard. Store it in your encrypted rails credentials (which you can edit via
rails credentials:edit
- secret_access_key: The secret key you get in the Hetzner Cloud Dashboard – also store this in your encrypted rails credentials.
- region: The region your bucket is in. At the time of writing, Hetzner object storage is only available in the region “fsn1”.
- bucket: Your bucket name which you specified when creating it in the Hetzner Cloud interface.
Accordingly, your encrypted credentials file should look like this when opening it via rails credentials:edit
:
hetzner:
access_key_id: YOUR_ACCESS_KEY_HERE
secret_accesss_key: YOUR_SECRET_KEY_HERE
.. and that’s it!
With this setup, ActiveStorage should automagically work with Hetzner.
Let me know if I missed anything in the comments below!
Leave a Reply