Garage on a VPS: Lightweight Distributed S3-Compatible Storage for Multi-Server Setups
Garage is an open-source, lightweight distributed object storage system — S3-compatible, written in Rust, and designed to run on multiple small VPS instances forming a storage cluster. Unlike MinIO (excellent for single-server S3), Garage is specifically built for multi-server distributed storage: data is automatically sharded and replicated across nodes, surviving individual server failures. For teams with 2–5 VPS instances wanting S3-compatible distributed storage without running complex Ceph clusters.
Garage vs MinIO for Multi-Server Storage
- Garage: Designed for small clusters (3–10 nodes), geographic distribution, simple configuration, excellent data durability with replication
- MinIO: Excellent single-server S3, more complex distributed mode (MinIO Distributed), enterprise features
- Ceph: Extremely capable, extremely complex — appropriate for large clusters (10+ nodes)
- Choose Garage: 3–5 VPS nodes wanting simple, reliable distributed S3 without operational complexity
Architecture: 3-Node Cluster
<code"># Setup: 3 VPS nodes in different datacenters/zones # node1: 192.168.1.10 (Zone: us-east) # node2: 192.168.1.11 (Zone: us-west) # node3: 192.168.1.12 (Zone: eu-west) # # Replication: data written to 2 out of 3 zones # Reads: served from nearest available zone # Failures: cluster continues if 1 node is down
Step 1: Install Garage on Each Node
<code"># Run on ALL 3 nodes:
mkdir -p /opt/garage /var/lib/garage
# Download Garage binary
wget https://garagehq.deuxfleurs.fr/garage-v1.0.0-linux-x86_64 \
-O /usr/local/bin/garage
chmod +x /usr/local/bin/garage
garage --version
Step 2: Configure Garage (Each Node)
<code">sudo nano /etc/garage/garage.toml
<code"># Node 1 configuration (adjust node_id and rpc_public_addr per node) metadata_dir = "/var/lib/garage/meta" data_dir = "/var/lib/garage/data" [network_key] # Generate ONCE and use SAME key on all nodes: # openssl rand -base64 32 key = "YOUR_SHARED_NETWORK_KEY_BASE64" [rpc] # THIS node's public address (other nodes connect to this): public_addr = "192.168.1.10:3901" bind_addr = "0.0.0.0:3901" [s3_api] s3_region = "garage" api_bind_addr = "0.0.0.0:3900" root_domain = ".s3.yourdomain.com" [admin] api_bind_addr = "127.0.0.1:3903"
<code">sudo nano /etc/systemd/system/garage.service
<code">[Unit] Description=Garage S3 Storage After=network.target [Service] Type=simple ExecStart=/usr/local/bin/garage server --config /etc/garage/garage.toml Restart=on-failure [Install] WantedBy=multi-user.target
<code"># On ALL nodes: sudo systemctl enable garage sudo systemctl start garage
Step 3: Form the Cluster
<code"># Connect nodes to each other (run on node1):
garage node connect 192.168.1.11:3901 # Connect to node2
garage node connect 192.168.1.12:3901 # Connect to node3
# List all nodes:
garage node list
# Shows: node IDs, addresses, status
# Assign nodes to zones (for geographic distribution):
# FIRST: get each node's ID from the output above
NODE1_ID="abc123..."
NODE2_ID="def456..."
NODE3_ID="ghi789..."
garage layout assign \
"$NODE1_ID" --zone "us-east" --capacity 100 --tag "node1"
garage layout assign \
"$NODE2_ID" --zone "us-west" --capacity 100 --tag "node2"
garage layout assign \
"$NODE3_ID" --zone "eu-west" --capacity 100 --tag "node3"
# Preview the layout:
garage layout show
# Apply the layout:
garage layout apply --version 1
# Verify cluster health:
garage status
Step 4: Create Buckets and Keys
<code"># Create a bucket:
garage bucket create my-app-files
garage bucket create backup-data
# Create access keys:
garage key create app-backend
# Output: ACCESS_KEY_ID and SECRET_ACCESS_KEY
# Grant access:
garage bucket allow my-app-files \
--read --write --owner \
--key app-backend
# Create read-only key for CDN/download:
garage key create cdn-reader
garage bucket allow my-app-files --read --key cdn-reader
Step 5: Configure Replication
<code"># Garage replication options: # mode = "1": no replication (data on 1 node) # mode = "2": 2-copy replication (survives 1 node failure) # mode = "3": 3-copy replication (survives 2 node failures) # Configure in garage.toml: [garage] replication_mode = "2" # For 3 nodes, 2-copy is standard # After changing, apply layout again: garage layout apply --version 2
Step 6: Use with AWS SDK
<code">pip install boto3
<code">import boto3
from botocore.client import Config
# Connect to Garage (same as MinIO/S3)
s3 = boto3.client(
's3',
endpoint_url='https://s3.yourdomain.com', # or 'http://node1:3900'
aws_access_key_id='YOUR_ACCESS_KEY',
aws_secret_access_key='YOUR_SECRET_KEY',
region_name='garage',
config=Config(signature_version='s3v4'),
)
# All standard S3 operations work:
s3.upload_file('myfile.pdf', 'my-app-files', 'documents/myfile.pdf')
url = s3.generate_presigned_url('get_object',
Params={'Bucket': 'my-app-files', 'Key': 'documents/myfile.pdf'},
ExpiresIn=3600)
# List buckets
for bucket in s3.list_buckets()['Buckets']:
print(bucket['Name'])
Step 7: Nginx for S3 API (Public Endpoint)
<code">sudo nano /etc/nginx/sites-available/garage-s3
<code">server {
listen 443 ssl http2;
server_name s3.yourdomain.com *.s3.yourdomain.com;
ssl_certificate /etc/letsencrypt/live/s3.yourdomain.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/s3.yourdomain.com/privkey.pem;
client_max_body_size 10000M;
proxy_read_timeout 600s;
proxy_request_buffering off;
location / {
proxy_pass http://127.0.0.1:3900;
proxy_set_header Host $http_host;
proxy_set_header X-Forwarded-For $remote_addr;
}
}
Getting Started
Each Garage node uses 50–100 MB RAM regardless of stored data volume. Three small 1 GB Ubuntu VPS at VPS.DO nodes form a reliable distributed storage cluster. The cluster survives one node failure and automatically rebalances when it comes back. For organizations with multiple VPS instances already running other services, Garage adds distributed object storage without dedicated storage hardware.
Conclusion
Garage provides distributed S3-compatible object storage designed for small VPS clusters — simpler than Ceph, more resilient than MinIO single-server. Data is automatically sharded and replicated across zones, surviving individual server failures. The S3 API compatibility means any existing S3 integration works with Garage unchanged. For teams with 3+ VPS instances wanting private, self-hosted distributed storage without cloud egress fees, Garage is the right-sized solution between MinIO’s simplicity and Ceph’s complexity.
aussiecasinoexperts.com
October 21, 2026What’s up, I would like to subscribe for this website to
take latest updates, so where can i do it please
help.
xx8
October 21, 2026With havin so much written content do you ever run into any problems of
plagorism or copyright infringement? My blog has a lot
of exclusive content I’ve either created myself or outsourced but it looks
like a lot of it is popping it up all over the web without my authorization.
Do you know any methods to help reduce content from being ripped off?
I’d genuinely appreciate it.
Seo For Wordpress
October 21, 2026Aw, this was an extremely nice post. Spending some time and actual
effort to create a great article… but what can I say… I procrastinate a whole lot and don’t seem to get
nearly anything done.
analytics
October 21, 2026Its like you read my mind! You appear to know so much about this, like you wrote the book in it or something.
I think that you can do with a few pics to drive the message home a little
bit, but other than that, this is magnificent blog.
A great read. I’ll certainly be back.
best
October 21, 2026Hey There. I discovered your blog the usage of msn. This is an extremely smartly written article.
I’ll make sure to bookmark it and come back to read more of your helpful info.
Thanks for the post. I’ll certainly comeback.
bandar
October 21, 2026Normally I don’t learn article on blogs, but I wish to say that this write-up
very pressured me to take a look at and do it! Your writing style
has been surprised me. Thanks, very great post.
xx8
October 21, 2026Helpful info. Fortunate me I discovered your
web site unintentionally, and I’m stunned why
this accident did not took place in advance! I bookmarked it.
Joint Genesis supplement review
October 21, 2026This is a clear explanation of how this post covers evaluating product claims in a straightforward way.
KlaroNail complaints
October 21, 2026The section on this overview of the importance of following product directions in an easy-to-follow way.
Alpha Surge performance support
October 21, 2026Useful context for understanding this overview of building sustainable daily routines with a balanced perspective.
j88.com
October 21, 2026Really when someone doesn’t know then its up to other people that they will help, so here it takes place.
u888 love
October 21, 2026Pretty! This has been an extremely wonderful post.
Thank you for providing this info.
www.naganotonicleans.com
October 21, 2026Good information about how individual experiences can vary that is practical and straightforward.
paedophile website
October 21, 2026Magnificent goods from you, man. I’ve take into account your
stuff prior to and you’re just extremely excellent. I really like what you have got
here, certainly like what you are stating and the way in which you are saying it.
You’re making it entertaining and you continue to care for to stay it sensible.
I can’t wait to learn far more from you. That is actually a terrific site.
hello 88
October 21, 2026Excellent blog here! Also your website loads up fast! What host are
you using? Can I get your affiliate link to your host?
I wish my web site loaded up as fast as yours lol
bokep
October 21, 2026Its like you read my mind! You appear to know
a lot about this, like you wrote the book in it or something.
I think that you can do with a few pics to drive the
message home a little bit, but other than that, this is fantastic blog.
An excellent read. I’ll definitely be back.
poolzubehöre bestellen
October 21, 2026Hi mates, good piece of writing and fastidious urging commented
here, I am in fact enjoying by these.
homepage
October 21, 2026With havin so much written content do you ever run into
any problems of plagorism or copyright infringement? My site has
a lot of exclusive content I’ve either written myself or outsourced but it
appears a lot of it is popping it up all over the web without my agreement.
Do you know any techniques to help prevent content from being stolen? I’d truly
appreciate it.
schwimmbadfolien komplettset
October 21, 2026great post, very informative. I’m wondering why the other specialists of this
sector do not realize this. You must continue your writing.
I am confident, you have a huge readers’ base
already!
STUDY ABROAD CONSULTANTS IN KASARAGOD
October 21, 2026Your style is really unique compared to other folks I’ve read stuff from.
Thanks for posting when you’ve got the opportunity, Guess
I’ll just bookmark this page.
check my blog
October 21, 2026This is really interesting, You are a very skilled blogger.
I have joined your rss feed and sit up for in quest of more of your magnificent post.
Also, I have shared your website in my social networks
abcvip
October 21, 2026I wanted to thank you for this wonderful read!! I absolutely loved every little bit
of it. I’ve got you book-marked to check out new
things you post…
schwimmbadfolien
October 21, 2026Great delivery. Great arguments. Keep up the great effort.