
Deploy Alarik | (Just Updated) MinIO Alternative, S3-Compatible Object Storage, Keys Generated
Alarik S3-compatible object storage, MinIO alternative, keys generated
Just deployed
Just deployed
/app/Storage
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/Storageat 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_PASSWORDand the token signing keyJWTare random per deploy, so there is never a well-known credential live on a public URL.
Agent contract
- Public URL:
https://plus theRAILWAY_PUBLIC_DOMAINof thealarikservice, also published as the variableAPI_BASE_URL(already includinghttps://). The web console is the public domain of theconsoleservice, published asCONSOLE_BASE_URL. - Private URL:
http://alarik.railway.internal:8080, for services in the same project - Credentials: the variables
DEFAULT_ACCESS_KEYandDEFAULT_SECRET_KEYon thealarikservice for S3, andADMIN_USERNAMEwithADMIN_PASSWORDfor the console. They stay the same across redeploys. - Auth: AWS Signature V4, service
s3, regionus-east-1, path-style addressing ($API_BASE_URL/BUCKET/KEY). A request with a wrong key returns 403. - Health:
GET /livezreturns 200, no credentials
# 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/Storagevolume. - 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.
Template Content
