blog-image
Godwin Peter .O

Your favourite S3 you've never known

A Deep Dive into GarageFS for S3-Compatible Storage
technology docker compose

In the era of self-hosting and private clouds, the bottleneck often isn’t compute power, but how we manage and scale data. For those building a resilient infrastructure on a budget—or on older hardware—GarageFS (commonly referred to simply as Garage) has emerged as a lightweight, distributed storage powerhouse.


Why Garage? The Edge in Private Cloud Storage

Garage is an open-source, distributed S3-compatible storage service. Unlike many of its counterparts, it is designed to run on heterogeneous clusters—meaning you can mix your old laptop, a Raspberry Pi, and a dedicated server into a single storage pool.

Key Advantages:

  • Low Resource Footprint: Written in Rust, it’s incredibly efficient compared to Java-based alternatives.
  • Resilience by Design: It uses a “Consistent Hashing” ring to distribute data, ensuring that even if multiple nodes fail, your data remains accessible.
  • No Metadata Database: Unlike some systems that require a separate SQL database to track files, Garage handles everything internally, simplifying the stack.

Comparison with Other OSS Options

FeatureGarageMinIOCeph / Rook
Minimum HardwareVery Low (128MB RAM)Moderate (2GB+ RAM)High (Requires dedicated nodes)
ComplexitySimple (Single Binary)ModerateVery High
Best ForGeo-distributed/EdgeEnterprise Data CentersMassive Petabyte Clusters

The Ultimate Backup Target

For private cloud users, Garage serves as the perfect backend for tools like Restic, Kopia, or Velero. Because it speaks the S3 protocol, any application that supports Amazon S3 can use your local Garage cluster as a backup destination. This provides a “cloud-like” experience without the monthly egress fees.


Seamless Deployment via Docker

Deploying Garage in a containerized environment is the preferred method for maintaining a clean host OS. By pairing it with a Web-UI, you gain a visual overview of your buckets, keys, and cluster health.

1. Preparing the Environment

To secure your Web-UI, you should use basic authentication. You can generate an Apache-style hash using htpasswd:

htpasswd -nbBC 10 'YOUR_USERNAME' 'YOUR_PASSWORD'

Paste the resulting string into your environment configuration.

2. Sample Docker Compose

Here is a production-ready configuration for your private cloud. This setup includes the core Garage service and the management interface.

services:
  garage:
    image: dxflrs/garage:v2.0.0
    volumes:
      - ../files/garage.toml:/etc/garage.toml
      - garage-storage:/var/lib/garage
    restart: unless-stopped
    ports:
      - 3900:3900 # S3 API
      - 3901:3901 # RPC for cluster communication
      - 3903:3903 # Admin API

  garage-webui:
    image: khairul169/garage-webui:1.1.0
    restart: unless-stopped
    volumes:
      - ../files/garage.toml:/etc/garage.toml:ro
    ports:
      - 3909:3909
    environment:
      AUTH_USER_PASS: "<generated-hash-here>"
      API_BASE_URL: "http://garage:3903"
      API_ADMIN_KEY: "your_secret_admin_key_here"
      S3_ENDPOINT_URL: "http://garage:3900"

volumes:
  garage-storage:

Managing the Cluster

Once deployed, you can access your storage dashboard at http://localhost:3909. The Web-UI allows you to:

  1. Monitor Cluster Status: See which nodes are “up” and how much storage is consumed.
  2. Bucket Management: Create buckets for specific backups (e.g., db-backups, photo-library).
  3. Access Control: Generate S3 Access Keys and Secret Keys for your client applications.