A blob in the bucket
Originally posted on 8/12/2025 on my old blog
I'm going to keep this one short and sweet. S3 cloud object storage is going to be less expensive in most cases than upping a VPS to a bigger drive. For instance, UpCloud offers $5 a month for 250GB, compared to an UpCloud server with 8GB of ram, 4 CPU Cores, and 160Gb of storage for $48/mo. There's a good chance you will not need that much server to run a PDS, but if you have a lot of users on it you'll need the disk space for user blobs.
Table of Contents
PDS Setup
I'm not going to go over the setup of a cloud S3 object store since UpCloud does here and @yehuda.turtleis.land does a great job here for DigitalOcean Spaces.
For UpCloud
PDS_BLOBSTORE_S3_BUCKET={What you named the bucket}
PDS_BLOBSTORE_S3_REGION={Bottom left of Overview top section}
PDS_BLOBSTORE_S3_ENDPOINT={S3 endpoint under Public access}
PDS_BLOBSTORE_S3_ACCESS_KEY_ID={Under users tab}
PDS_BLOBSTORE_S3_SECRET_ACCESS_KEY={Under users tab}
PDS_BLOBSTORE_S3_FORCE_PATH_STYLE=false
Digital ocean gives an Origin endpoint url like this https://{bucketname}.{region}.digitaloceanspaces.com that holds most of the info. Can always look here for a much more indepth setup for Digital Ocean.
PDS_BLOBSTORE_S3_BUCKET=bucketname
PDS_BLOBSTORE_S3_REGION=region
PDS_BLOBSTORE_S3_ENDPOINT=https://{region}.digitaloceanspaces.com
PDS_BLOBSTORE_S3_ACCESS_KEY_ID={Settings -> Access Keys}
PDS_BLOBSTORE_S3_SECRET_ACCESS_KEY={Settings -> Access Keys}
PDS_BLOBSTORE_S3_FORCE_PATH_STYLE=false
Using rclone to migrate from a blobstore on disk to S3
When I first started looking into doing this, I was wrongly assuming that I would need to write a script or a simple Rust binary to help users migrate to an S3 object storage. Thankfully, @bnewbold.net pointed out I was trying to reinvent the wheel.
I recommend before doing this making sure you have a backup of your server. Data lose is not expected, but you never know
[pds-blobs]
type = s3
provider = {UpCloud or DigitalOcean}
env_auth = false
access_key_id = {your_access_key_id}
secret_access_key = {your_secret_key
endpoint = {S3 endpoint minus the https so like atl1.digitaloceanspaces.com}
acl = private
A couple of notes before you run the command to move the blobs over
rclone sync /pds/blocks pds-blobs:{bucket-name}/blocks -P
To break that command down a bit
And that's it! Your PDS should now be using the S3 object storage for blobs, saving hard drive space and some money. If you're wanting to try out UpCloud you can use my referral link to sign up for $25 of free credits or if you want to go with Digital Ocean you can use my referral link to get $200 in credit over 60 days.
Discussion in the ATmosphere