---
title: "Deploy Alarik | (Just Updated) MinIO Alternative, S3-Compatible Object Storage, Keys Generated"
description: "Alarik S3-compatible object storage, MinIO alternative, keys generated"
category: "Storage"
url: https://railway.com/deploy/alarik-or-just-updated-minio-alternative
---

# Deploy Alarik | (Just Updated) MinIO Alternative, S3-Compatible Object Storage, Keys Generated

Alarik S3-compatible object storage, MinIO alternative, keys generated

**[Deploy Alarik | (Just Updated) MinIO Alternative, S3-Compatible Object Storage, Keys Generated on Railway](https://railway.com/template/alarik-or-just-updated-minio-alternative)**

Machine-readable deploy manifest (JSON, validated by TemplateCI): https://railway.com/deploy/alarik-or-just-updated-minio-alternative/manifest.json

- **Creator:** SuperSlowSloth
- **Category:** Storage

## Template content

### console

- **Image:** ghcr.io/achtungsoftware/alarik-console:1.0.0-beta-16@sha256:8e2e7b593d71632533e7f32c2eefba7e4695f4c65a76d12319bb486fb3d2755f
- **Health check:** /
- **Public domain:** Yes

### alarik

- **Image:** ghcr.io/achtungsoftware/alarik:1.0.0-beta-16@sha256:e658728db18b26921065d60a289551db7e15743dead1312ca8e654b3e9ea8d12
- **Start command:** `/bin/sh -c 'echo "[railway] alarik uid=$(id -u) owner=$(stat -c %u:%g /app/Storage) writable=$(test -w /app/Storage && echo yes || echo no)"; cd /app && exec ./Alarik serve --env production --hostname :: --port 8080'`
- **Health check:** /livez
- **Public domain:** Yes

## Documentation

# Deploy and Host Alarik on Railway

**Built for an LLM agent to deploy and use.** There is no wizard and no form to fill in: the S3 access key, the S3 secret key and the console admin password are generated at deploy time, and the contract below lists every URL, variable name and the one script that proves the store works. Create a bucket, put an object, read it back, with nothing but `curl`.

Alarik is an open-source (Apache-2.0) S3-compatible object storage server written in Swift, with a web console for buckets, objects, users and access keys. It works with the AWS CLI, `rclone` and any S3 SDK. This template runs the official **Alarik 1.0.0-beta-16** server and console images, both pinned by digest, as two services with the server data on a Railway volume.

## About Hosting Alarik

This template runs two services. `alarik` is the S3 API and admin API, with a volume at `/app/Storage` that holds the bucket data and Alarik's own metadata store, so there is no database to run beside it. `console` is the web UI and has no state. Three things are handled for Railway:

- **Writable volume.** Railway mounts volumes root-owned while the image runs as an unprivileged user, so the volume would be read-only. The service runs as root and logs the owner and writability of `/app/Storage` at boot.
- **Dual-stack bind.** The server listens on `::` and port 8080, so the public domain, the healthcheck and the private network all reach it.
- **Generated credentials.** `DEFAULT_ACCESS_KEY`, `DEFAULT_SECRET_KEY`, `ADMIN_PASSWORD` and the token signing key `JWT` are random per deploy, so there is never a well-known credential live on a public URL.

### Agent contract

- Public URL: `https://` plus the `RAILWAY_PUBLIC_DOMAIN` of the `alarik` service, also published as the variable `API_BASE_URL` (already including `https://`). The web console is the public domain of the `console` service, published as `CONSOLE_BASE_URL`.
- Private URL: `http://alarik.railway.internal:8080`, for services in the same project
- Credentials: the variables `DEFAULT_ACCESS_KEY` and `DEFAULT_SECRET_KEY` on the `alarik` service for S3, and `ADMIN_USERNAME` with `ADMIN_PASSWORD` for the console. They stay the same across redeploys.
- Auth: AWS Signature V4, service `s3`, region `us-east-1`, path-style addressing (`$API_BASE_URL/BUCKET/KEY`). A request with a wrong key returns 403.
- Health: `GET /livez` returns 200, no credentials

```bash
# run with API_BASE_URL, DEFAULT_ACCESS_KEY and DEFAULT_SECRET_KEY set (curl 7.75 or newer)
SIG="--aws-sigv4 aws:amz:us-east-1:s3 --user $DEFAULT_ACCESS_KEY:$DEFAULT_SECRET_KEY"
curl -s -o /dev/null -w 'health %{http_code}\n' "$API_BASE_URL/livez"
curl -s -o /dev/null -w 'bad-key %{http_code}\n' --aws-sigv4 aws:amz:us-east-1:s3 --user BADKEY:BADSECRET "$API_BASE_URL/"
curl -s -o /dev/null -w 'create-bucket %{http_code}\n' $SIG -X PUT "$API_BASE_URL/agent-bucket"
curl -s -o /dev/null -w 'put-object %{http_code}\n' $SIG -X PUT --data-binary 'hello from an agent' "$API_BASE_URL/agent-bucket/agent.txt"
curl -s $SIG "$API_BASE_URL/agent-bucket/agent.txt"; echo
curl -s $SIG -G --data-urlencode list-type=2 "$API_BASE_URL/agent-bucket" | grep -o 'agent.txt' | head -1
curl -s -o /dev/null -w 'delete-object %{http_code}\n' $SIG -X DELETE "$API_BASE_URL/agent-bucket/agent.txt"
```

A fresh deploy prints `health 200`, `bad-key 403`, `create-bucket 200`, `put-object 200`, `hello from an agent`, `agent.txt` and `delete-object 204`. With the AWS CLI the same store is `AWS_ACCESS_KEY_ID=$DEFAULT_ACCESS_KEY AWS_SECRET_ACCESS_KEY=$DEFAULT_SECRET_KEY aws --endpoint-url $API_BASE_URL s3 mb s3://agent-bucket`.

## Why Deploy Alarik 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 Alarik on Railway, you are one step closer to supporting a complete full-stack application with minimal burden. Host your servers, databases, AI agents, and more on Railway.

- **Agent-ready** - generated keys, a contract block and one working script; no setup wizard.
- **S3 on a public HTTPS URL** plus a private URL for services in the same project.
- **Console included** as its own service, already pointed at the API.
- **Buckets and objects survive redeploys** on the `/app/Storage` volume.
- **No external database**: Alarik keeps its metadata beside the data.

## Common Use Cases

- Self-hosted S3 storage for application uploads and media
- Backup target for databases and tools such as restic or rclone
- A MinIO alternative for development, staging and CI
- Artifact, model and dataset storage for AI agents and data pipelines

## Dependencies for Alarik Hosting

- None outside the template. Alarik runs as an API service with a volume plus a stateless console service.

### Deployment Dependencies

- Alarik: https://github.com/achtungsoftware/alarik
- Official server image: https://github.com/achtungsoftware/alarik/pkgs/container/alarik
- Official console image: https://github.com/achtungsoftware/alarik/pkgs/container/alarik-console

### Implementation Details

| Variable | Purpose |
| --- | --- |
| `DEFAULT_ACCESS_KEY` | S3 access key, generated per deploy. |
| `DEFAULT_SECRET_KEY` | S3 secret key, generated per deploy. Keep it server-side. |
| `ADMIN_USERNAME` | Console admin user. |
| `ADMIN_PASSWORD` | Console admin password, generated per deploy. |
| `JWT` | Token signing key, generated per deploy. |
| `API_BASE_URL` | Public HTTPS URL of the S3 and admin API. |
| `CONSOLE_BASE_URL` | Public HTTPS URL of the console. |
| `RAILWAY_RUN_UID` | Set to `0` so the process can write the root-owned volume. |

Use path-style addressing and the region `us-east-1`. Back up the `/app/Storage` volume before upgrading between beta releases.


## Similar templates

- [RustFS | (Just Updated) S3 Object Store, Public URL and Keys Set](https://railway.com/deploy/rustfs-or-just-updated-s3-object-store-p) — S3-compatible object store, keys and public URL preset, volume kept
- [TimescaleDB](https://railway.com/deploy/timescaledb-railway-template) — A PostgreSQL-based time-series database for analytics on Railway.
- [Garage S3 Storage](https://railway.com/deploy/garage-s3-storage) — Ultra-light S3 server: fast, open-source, plug-and-play.

Open this page in a browser: https://railway.com/deploy/alarik-or-just-updated-minio-alternative
