Deploy Garage — Self-Hosted S3 Storage, MinIO Alternative
Self-host S3-compatible storage: the lightweight MinIO replacement.
Garage S3
Just deployed
/data
Deploy and Host Garage on Railway
Garage is the lightweight, self-hosted, S3-compatible object store built by the Deuxfleurs collective — a single Rust binary that gives you Amazon S3's API on your own infrastructure with zero JVM, zero cluster complexity, and zero drama. Store files in buckets, get S3 compatibility that works with the AWS CLI, restic, Immich, Nextcloud, and any S3 SDK, and even serve static websites directly from buckets — a feature MinIO and Ceph don't offer.
With MinIO's community edition archived and end-of-lifed in 2026, Garage has become the most-recommended self-hosted S3 replacement — actively maintained (v2.3.0, in production since 2020), AGPL-3.0, and light enough to run on a Raspberry Pi. Self-host on Railway for ~$5–15/month flat, and pay for storage you own instead of AWS S3's per-GB-plus-egress bill.
What This Template Deploys
| Service | Purpose |
|---|---|
| Garage | The S3-compatible object store — S3 API on port 3900, admin API on 3903, optional static web serving on 3902, backed by a persistent volume |
| Persistent Volume | Mounted for object data and metadata — your buckets and files survive every redeploy |
Single Rust binary, tiny footprint — no JVM, no external database, no cluster orchestration. Runs
comfortably on a small Railway instance. Configure buckets and access keys via the garage CLI or
the admin API, then point any S3 client at your Railway URL.
About Hosting Garage
Every self-hosted app that needs storage — Immich, Nextcloud, restic, Mastodon, PeerTube — wants an S3 endpoint. AWS S3 bills per GB plus egress, and MinIO, the old go-to, archived its community edition in 2026. Garage is the lightweight replacement the community moved to: S3-compatible, resilient, and easy to operate.
Railway runs Garage as a single service with a persistent volume and automatic HTTPS. As a compact Rust binary with no external dependencies, it starts fast and runs cheap — set up a bucket and access keys, and any S3 tool works against your Railway endpoint immediately.
> Two honest tradeoffs: Garage uses full duplication rather than erasure coding, so a > multi-node replicated setup uses 3× disk per byte (fine for single-node/personal use; matters at > TB scale). And it doesn't implement S3 Object Lock, so if you rely on bucket-level immutability > for ransomware-proof restic/Kopia backups, factor that in. For most self-hosted storage needs, > neither is a blocker.
Typical cost: ~$5–15/month on Railway depending on storage. AWS S3 charges per GB stored plus $0.09/GB egress; Garage on Railway is flat compute plus your volume, with no egress metering and full data ownership.
Deploy in Under 5 Minutes
- Click Deploy on Railway — Garage builds automatically (~1–2 minutes)
- Add a persistent volume for object data and metadata
- Initialize the cluster layout and create an access key with the
garageCLI - Create a bucket and grant your key access to it
- Point any S3 client at your Railway URL on port
3900—aws s3 --endpoint-url ls
No JVM. No Kubernetes. No cluster tuning.
Common Use Cases
- Self-hosted S3 replacement for MinIO — the community's most-recommended drop-in after MinIO's 2026 end-of-life, with a lighter footprint and simpler operation
- S3 backend for Immich, Nextcloud, and self-hosted apps — give any app that expects S3 a real endpoint on your own infrastructure instead of paying AWS
- Backup target for restic and Kopia — S3-compatible storage for encrypted, deduplicated backups you fully control (note: no Object Lock — see tradeoffs)
- Static website hosting from buckets — Garage serves static sites directly from S3 buckets with domain-to-bucket mapping, a feature MinIO and Ceph lack
- Media storage for Mastodon, PeerTube, or Matrix — S3-compatible object storage for fediverse and chat platforms that offload media to S3
- Application file storage — user uploads, images, documents, and CI/CD artifacts via the S3 API, with no per-GB-plus-egress cloud bill
Configuration
| Variable | Required | Description |
|---|---|---|
GARAGE_RPC_SECRET | ✅ Required | Shared secret for node RPC — 32-byte hex, openssl rand -hex 32 |
GARAGE_ADMIN_TOKEN | ✅ Recommended | Bearer token for the admin API — set a strong value |
GARAGE_METRICS_TOKEN | Optional | Token protecting the Prometheus /metrics endpoint |
RUST_LOG | Optional | Log verbosity — e.g. info |
| S3 API port | Pre-set | 3900 — the S3-compatible endpoint |
| Admin API port | Pre-set | 3903 — cluster and key management |
| Web port | Optional | 3902 — static website serving from buckets |
> Set GARAGE_RPC_SECRET and GARAGE_ADMIN_TOKEN before exposing the instance. After deploy,
> initialize the cluster layout, create access keys, and create buckets via the garage CLI or
> the admin API — access keys are how S3 clients authenticate. Garage requires the --endpoint-url
> flag on every AWS CLI call since it's not AWS.
Garage vs. Object Storage Alternatives
| Garage (Railway) | MinIO (community) | AWS S3 | SeaweedFS | |
|---|---|---|---|---|
| Status | ✅ Active (v2.x) | ❌ Archived 2026 | ✅ Managed | ✅ Active |
| Monthly cost | ~$5–15 flat | — (EOL) | Per GB + egress | Self-hosted |
| Egress fees | ✅ None | — | ❌ $0.09/GB | ✅ None |
| Self-hosted / own data | ✅ Yes | ⚠️ Was | ❌ AWS cloud | ✅ Yes |
| Footprint | ✅ Single Rust binary | ⚠️ Was single binary | N/A | ⚠️ Multi-process |
| Static site from buckets | ✅ Yes | ❌ No | ✅ Yes | ⚠️ Limited |
| Geo-distributed | ✅ Built-in | ⚠️ Complex | ✅ Managed | ✅ Yes |
| S3 Object Lock | ❌ No | ✅ Yes | ✅ Yes | ⚠️ Partial |
| Open source | ✅ AGPL-3.0 | ⚠️ AGPL (EOL) | ❌ No | ✅ Apache-2.0 |
Dependencies for Garage Hosting
- Railway account — Hobby plan (~$5–15/month) sized to your storage needs
- A persistent volume for object data and metadata
- Any S3-compatible client — AWS CLI, s3cmd, rclone, restic, or an SDK (no special tooling)
Deployment Dependencies
- Garage GitHub Mirror — source (main repo on Deuxfleurs Forge)
- Garage Documentation — setup, CLI, and S3 compatibility
- Garage Docker Image — the
dxflrs/garageimage - Railway Volumes Documentation — object data persistence
Implementation Details
This template deploys dxflrs/garage (a single Rust binary) with a persistent volume for object
data and metadata. Garage exposes the S3 API on 3900, admin API on 3903, and optional static
web serving on 3902. No external database or JVM — metadata lives in Garage's embedded store on
the volume, keeping the footprint small.
After deploy, set GARAGE_RPC_SECRET and GARAGE_ADMIN_TOKEN, then use the garage CLI to
initialize the layout (even for one node), create access keys, and create buckets. Garage uses
full duplication rather than erasure coding — a multi-node setup uses 3× disk per byte; a
single-node Railway deployment maps 1:1 to your volume. Connect clients with --endpoint-url.
Frequently Asked Questions
Is Garage a good replacement for MinIO? Yes — it's the option most recommended in self-hosted communities after MinIO's community edition was archived and end-of-lifed in 2026. Garage is S3-compatible, actively maintained, lighter to operate (a single Rust binary), and in production since 2020. It doesn't have MinIO's old web console, but it covers the core self-hosted S3 use case cleanly.
What can I connect to Garage?
Anything that speaks S3 — the AWS CLI, s3cmd, rclone, restic, Kopia, and any S3 SDK, plus apps
like Immich, Nextcloud, Mastodon, and PeerTube that offload storage to S3. Point the client at
your Railway URL with --endpoint-url and use the access keys you created.
How does the cost compare to AWS S3? AWS S3 bills per GB stored plus $0.09/GB egress, which compounds with traffic. Garage on Railway is flat compute plus your volume, with no egress metering — you pay for storage you own. For backup targets, media serving, and app storage with meaningful traffic, self-hosting is dramatically cheaper.
Do I lose my data if Railway redeploys? No — object data and metadata live on the persistent volume, which survives redeploys and updates. As with any storage, keep independent backups of anything critical; a volume is not a backup.
Can Garage serve a static website?
Yes, and it's a standout feature — Garage serves static sites directly from S3 buckets with
domain-to-bucket mapping, which MinIO and Ceph don't support. Enable the web port (3902) and map
a bucket to serve your site's files.
What are Garage's main limitations? Two to know: it uses full duplication rather than erasure coding, so multi-node replication uses 3× disk per byte (fine for single-node/personal, costly at TB scale); and it doesn't implement S3 Object Lock, so bucket-level immutability for ransomware-proof backups isn't available. For most self-hosted storage, neither blocks the use case.
Why Deploy and Host Garage on Railway?
Railway is a singular platform to deploy your infrastructure stack. Railway will host your infrastructure so you don't have to deal with configuration, while allowing you to vertically and horizontally scale it.
By deploying Garage on Railway, you get a lightweight, S3-compatible object store — the community's top MinIO replacement, with static-site serving and no egress fees — in a single Rust binary at ~$5–15/month flat, with full ownership of your storage.
Template Content
Garage S3
matheusac19/railway_garage_templateGARAGE_ACCESS_KEY
Must start with GK followed by exactly 24 hexadecimal characters (0-9, a-f), for a total length of 26 characters.
GARAGE_SECRET_KEY
(Recommended) Create your S3 Secret Key. It must be EXACTLY 64 hexadecimal characters (letters a-f, numbers 0-9). If left blank, one will be automatically generated in the logs.