---
title: "Deploy Garage — Self-Hosted S3 Storage, MinIO Alternative"
description: "Self-host S3-compatible storage: the lightweight MinIO replacement."
category: "Storage"
url: https://railway.com/deploy/garage-minio-alternative
---

# Deploy Garage — Self-Hosted S3 Storage, MinIO Alternative

Self-host S3-compatible storage: the lightweight MinIO replacement.

**[Deploy Garage — Self-Hosted S3 Storage, MinIO Alternative on Railway](https://railway.com/template/garage-minio-alternative)**

- **Creator:** SilverBanana
- **Category:** Storage

## Template content

### Garage S3 https://garagehq.deuxfleurs.fr/images/garage-logo.svg

- **Source:** matheusac19/railway_garage_template
- **Public domain:** Yes

## Documentation

# 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.

&gt; **Two honest tradeoffs:** Garage uses full duplication rather than erasure coding, so a
&gt; multi-node replicated setup uses 3× disk per byte (fine for single-node/personal use; matters at
&gt; TB scale). And it doesn't implement S3 Object Lock, so if you rely on bucket-level immutability
&gt; for ransomware-proof restic/Kopia backups, factor that in. For most self-hosted storage needs,
&gt; 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

1. Click **Deploy on Railway** — Garage builds automatically (~1–2 minutes)
2. Add a persistent volume for object data and metadata
3. Initialize the cluster layout and create an access key with the `garage` CLI
4. Create a bucket and grant your key access to it
5. 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 |

&gt; Set `GARAGE_RPC_SECRET` and `GARAGE_ADMIN_TOKEN` before exposing the instance. After deploy,
&gt; initialize the cluster layout, create access keys, and create buckets via the `garage` CLI or
&gt; the admin API — access keys are how S3 clients authenticate. Garage requires the `--endpoint-url`
&gt; 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](https://github.com/deuxfleurs-org/garage) — source (main repo on Deuxfleurs Forge)
- [Garage Documentation](https://garagehq.deuxfleurs.fr/documentation/) — setup, CLI, and S3 compatibility
- [Garage Docker Image](https://hub.docker.com/r/dxflrs/garage) — the `dxflrs/garage` image
- [Railway Volumes Documentation](https://docs.railway.com/volumes) — 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.

## Similar templates

- [Garage S3 Storage](https://railway.com/deploy/garage-s3-storage) — Ultra-light S3 server: fast, open-source, plug-and-play.
- [Redis](https://railway.com/deploy/redis-1) — Self Host Latest Redis with Railway
- [Postgres Backup to Cloudflare R2 (S3-Compatible)](https://railway.com/deploy/postgres-to-r2-backup) — Automated PostgreSQL backups to S3-compatible storage with encryption

Open this page in a browser: https://railway.com/deploy/garage-minio-alternative
