Garage — a lightweight, S3-compatible distributed object store — plus its web admin panel, bundled into one container for Unraid. Both are the official upstream binaries, unmodified, wired together with s6-overlay. No manual CLI setup: single-node layout, S3 key and bucket are all created automatically on first boot.
- Why one container?
- What is this?
- Quick Start on Unraid
- Connecting a client
- Configuration
- Backup
- Support this project
Garage's own Community Applications listings are split across three separate templates from one maintainer: the core server (in two network variants) and the web admin panel as its own install. This template bundles the core server and the admin panel into one container — both official, unmodified upstream binaries, no rebuild from source — so one install gives you a working, browsable S3 store.
Garage is a lightweight,
S3-API-compatible object store built for small, geo-distributed self-hosted
deployments — Rust, Apache-2.0, actively developed. This template runs it in
single-node mode (Garage's own --single-node flag, introduced in v2.3.0),
which auto-creates the cluster layout at startup — the manual garage layout assign / garage layout apply steps a bare install normally requires are not
needed here. An S3 access key, secret key and bucket are pre-seeded from the
template fields on first boot (Garage's --default-access-key /
--default-bucket flags), so there is no second CLI step to create them either.
garage-webui runs alongside it,
talking to Garage's admin API over localhost — buckets, keys and cluster
health are all browsable without touching a terminal.
- Install from Community Applications, or add this template's URL directly:
https://raw.githubusercontent.com/junkerderprovinz/garage/main/templates/garage.xml - Set Access Key and Secret Key — anything reasonably random works, e.g.
generate a secret with
openssl rand -hex 24. - Optionally set Bucket to a name you want created immediately (e.g.
backups). - Start the container. The S3 endpoint is
http://SERVER_IP:3900; the admin panel is athttp://SERVER_IP:3909.
Watch the container log for GARAGE IS READY — first boot generates the
config and layout, this takes a few seconds.
Any S3-compatible tool works. A couple of common ones:
rclone (rclone config, or a config file entry):
[garage]
type = s3
provider = Other
access_key_id = YOUR_ACCESS_KEY
secret_access_key = YOUR_SECRET_KEY
endpoint = http://SERVER_IP:3900
region = garagerestic (repository URL):
export AWS_ACCESS_KEY_ID=YOUR_ACCESS_KEY
export AWS_SECRET_ACCESS_KEY=YOUR_SECRET_KEY
restic -r s3:http://SERVER_IP:3900/my-restic-repo init| Setting | Container Variable | Default | Notes |
|---|---|---|---|
| S3 API Port | (port) | 3900 |
The functional endpoint every client connects to. |
| S3 Website Port | (port) | 3902 |
Advanced. Static-site hosting straight from a bucket. |
| Admin Panel Port | (port) | 3909 |
Browser UI: buckets, keys, cluster health. |
| Data | (path) | /mnt/user/appdata/garage/data |
Object data and metadata. Must be mapped. |
| Config | (path) | /mnt/user/appdata/garage/config |
Generated garage.toml (RPC secret, admin token). Must be mapped — losing it changes your RPC/admin secrets on next boot. |
| Access Key | ACCESS_KEY |
(empty) | S3 access key, pre-seeded on first boot. Required to write anything real. |
| Secret Key | SECRET_KEY |
(empty) | S3 secret key, pre-seeded on first boot. |
| Bucket | BUCKET |
(empty) | Bucket name to create automatically on first boot. Leave empty to create buckets later via the admin panel or any S3 client. |
| DB Engine | DB_ENGINE |
sqlite |
Garage's metadata engine. lmdb is faster but less tolerant of an unclean shutdown; sqlite is the safer default. |
Ports 3901 (Garage's internal RPC) and 3903 (the admin API garage-webui talks to) are intentionally not published — nothing outside the container needs them directly.
Everything lives under the Data and Config mounts — back both up the same way you back up any other appdata folder. Losing Config does not lose your objects, but it does regenerate the RPC secret and admin token on next boot, which breaks the admin panel's stored session and (for a real multi-node cluster, not this single-node setup) cluster membership.
Questions, bugs, ideas? GitHub issues →.
If this template saves you a setup hassle, consider buying me a coffee: