---
title: "Deploy Databasement | (Just Updated) Database Backup Manager with S3 Support, Admin Login Preset, Data Survives Redeploys"
description: "Databasement: self-hosted database backup manager, MySQL Postgres Mongo"
category: "Storage"
url: https://railway.com/deploy/databasement-or-just-updated-database-ba
---

# Deploy Databasement | (Just Updated) Database Backup Manager with S3 Support, Admin Login Preset, Data Survives Redeploys

Databasement: self-hosted database backup manager, MySQL Postgres Mongo

**[Deploy Databasement | (Just Updated) Database Backup Manager with S3 Support, Admin Login Preset, Data Survives Redeploys on Railway](https://railway.com/template/databasement-or-just-updated-database-ba)**

Machine-readable deploy manifest (JSON, validated by TemplateCI): https://railway.com/deploy/databasement-or-just-updated-database-ba/manifest.json

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

## Template content

### databasement

- **Image:** davidcrty/databasement:1.10.10@sha256:fdddbb56dc5d35feaf3c27d98cb3fbb0caf9c57edceb998793ef6e2337ea1fa1
- **Start command:** `/bin/sh -c 'echo IyEvYmluL3NoCiMgRGF0YWJhc2VtZW50IG9uIFJhaWx3YXk6IG9uZSBzZXJ2aWNlLCBTUUxpdGUgb24gdGhlIC9kYXRhIHZvbHVtZSwgYWRtaW4gYWNjb3VudCBhbmQgYW4KIyBBUEkgdG9rZW4gY3JlYXRlZCBmcm9tIHZhcmlhYmxlcywgd2ViIHNlcnZlciBvbiBSYWlsd2F5J3MgaW5qZWN0ZWQgUE9SVC4Kc2V0IC1lCgo6ICIke0RBVEFCQVNFTUVOVF9BUFBfU0VDUkVUOj9EQVRBQkFTRU1FTlRfQVBQX1NFQ1JFVCBtdXN0IGJlIHNldH0iCjogIiR7REFUQUJBU0VNRU5UX0FETUlOX1BBU1NXT1JEOj9EQVRBQkFTRU1FTlRfQURNSU5fUEFTU1dPUkQgbXVzdCBiZSBzZXR9IgoKVk9MPS9kYXRhCm1rZGlyIC1wICIkVk9MIgoKIyBUaGUgaW1hZ2UncyBFTlRSWVBPSU5UIGlzIHJlcGxhY2VkIGJ5IGEgc3RhcnQgY29tbWFuZCwgc28gcmVwZWF0IHdoYXQgaXQgZG9lcy4KZXhwb3J0IFRaPVVUQwoKIyBBcHBsaWNhdGlvbiBkYXRhYmFzZSBhbmQgYmFja2dyb3VuZCB3b3JrIGFsbCBsaXZlIGluc2lkZSB0aGlzIG9uZSBjb250YWluZXIuCmV4cG9ydCBEQl9DT05ORUNUSU9OPXNxbGl0ZQpleHBvcnQgREJfREFUQUJBU0U9IiRWT0wvZGF0YWJhc2Uuc3FsaXRlIgpleHBvcnQgRU5BQkxFX1FVRVVFX1dPUktFUj10cnVlCmV4cG9ydCBFTkFCTEVfU0NIRURVTEVSPXRydWUKZXhwb3J0IEVOQUJMRV9XRUJfU0VSVkVSPXRydWUKZXhwb3J0IEVOQUJMRV9EQVRBQkFTRV9NSUdSQVRJT049dHJ1ZQpleHBvcnQgQVBQX0VOVj1wcm9kdWN0aW9uCmV4cG9ydCBBUFBfREVCVUc9ZmFsc2UKCiMgRnJhbmtlblBIUCBsaXN0ZW5zIG9uIHRoZSBhZGRyZXNzIGluIFNFUlZFUl9OQU1FIChpbWFnZSBkZWZhdWx0IDoyMjI2KS4gUmFpbHdheSdzIGVkZ2UgYW5kIGl0cwojIGhlYWx0aGNoZWNrIGJvdGggZGlhbCB0aGUgaW5qZWN0ZWQgUE9SVCwgc28gbGlzdGVuIHRoZXJlLgpleHBvcnQgU0VSVkVSX05BTUU9Ijoke1BPUlQ6LTgwODB9IgoKIyBMYXJhdmVsIHdhbnRzIGJhc2U2NDo8MzIgYnl0ZXM+LiBEZXJpdmUgaXQgZnJvbSB0aGUgZ2VuZXJhdGVkIHNlY3JldCBzbyBpdCBpcyBzdGFibGUgYWNyb3NzCiMgcmVkZXBsb3lzIChhIG5ldyBrZXkgd291bGQgbWFrZSBldmVyeSBzdG9yZWQgZGF0YWJhc2UgY3JlZGVudGlhbCB1bnJlYWRhYmxlKS4KQVBQX0tFWT0iYmFzZTY0OiQocGhwIC1yICdlY2hvIGJhc2U2NF9lbmNvZGUoaGFzaCgic2hhMjU2IiwgZ2V0ZW52KCJEQVRBQkFTRU1FTlRfQVBQX1NFQ1JFVCIpLCB0cnVlKSk7JykiCmV4cG9ydCBBUFBfS0VZCgojIFJhaWx3YXkgbW91bnRzIHRoZSB2b2x1bWUgb3duZWQgYnkgcm9vdDsgdGhlIGFwcCBydW5zIGFzIHRoZSB1bnByaXZpbGVnZWQgImFwcGxpY2F0aW9uIiB1c2VyLgpjaG93biAtUiBhcHBsaWNhdGlvbjphcHBsaWNhdGlvbiAiJFZPTCIKCmNhdCA+IC90bXAvYm9vdHN0cmFwLnBocCA8PCdQSFAnCjw/cGhwCi8vIFJ1bnMgb25jZSBwZXIgYm9vdCwgYWZ0ZXIgbWlncmF0aW9ucy4gSWRlbXBvdGVudDogdGhlIGFkbWluIGlzIGNyZWF0ZWQgb25seSB3aGlsZSB0aGUgdXNlcgovLyB0YWJsZSBpcyBlbXB0eSAoQ3JlYXRlTmV3VXNlciByZWZ1c2VzIG90aGVyd2lzZSksIHRoZSBBUEkgdG9rZW4gb25seSBpZiBpdHMgaGFzaCBpcyBtaXNzaW5nLgpyZXF1aXJlICcvYXBwL3ZlbmRvci9hdXRvbG9hZC5waHAnOwokYXBwID0gcmVxdWlyZSAnL2FwcC9ib290c3RyYXAvYXBwLnBocCc7CiRhcHAtPm1ha2UoSWxsdW1pbmF0ZVxDb250cmFjdHNcQ29uc29sZVxLZXJuZWw6OmNsYXNzKS0+Ym9vdHN0cmFwKCk7CgokZW1haWwgPSBnZXRlbnYoJ0RBVEFCQVNFTUVOVF9BRE1JTl9FTUFJTCcpID86ICdhZG1pbkBkYXRhYmFzZW1lbnQuZXhhbXBsZS5jb20nOwokcGFzc3dvcmQgPSBnZXRlbnYoJ0RBVEFCQVNFTUVOVF9BRE1JTl9QQVNTV09SRCcpOwoKaWYgKEFwcFxNb2RlbHNcVXNlcjo6Y291bnQoKSA9PT0gMCkgewogICAgYXBwKEFwcFxBY3Rpb25zXEZvcnRpZnlcQ3JlYXRlTmV3VXNlcjo6Y2xhc3MpLT5jcmVhdGUoWwogICAgICAgICduYW1lJyA9PiAnQWRtaW4nLAogICAgICAgICdlbWFpbCcgPT4gJGVtYWlsLAogICAgICAgICdwYXNzd29yZCcgPT4gJHBhc3N3b3JkLAogICAgICAgICdwYXNzd29yZF9jb25maXJtYXRpb24nID0+ICRwYXNzd29yZCwKICAgIF0pOwogICAgZWNobyAiW2Jvb3RdIGFkbWluIGNyZWF0ZWQ6ICRlbWFpbFxuIjsKfQoKJHRva2VuID0gZ2V0ZW52KCdEQVRBQkFTRU1FTlRfQVBJX1RPS0VOJyk7CmlmICgkdG9rZW4pIHsKICAgICRhZG1pbiA9IEFwcFxNb2RlbHNcVXNlcjo6d2hlcmUoJ2VtYWlsJywgJGVtYWlsKS0+Zmlyc3QoKQogICAgICAgID8/IEFwcFxNb2RlbHNcVXNlcjo6d2hlcmUoJ3N1cGVyX2FkbWluJywgdHJ1ZSktPm9yZGVyQnkoJ2lkJyktPmZpcnN0KCk7CiAgICAkaGFzaCA9IGhhc2goJ3NoYTI1NicsICR0b2tlbik7CiAgICBpZiAoJGFkbWluICYmICEgTGFyYXZlbFxTYW5jdHVtXFBlcnNvbmFsQWNjZXNzVG9rZW46OndoZXJlKCd0b2tlbicsICRoYXNoKS0+ZXhpc3RzKCkpIHsKICAgICAgICAkYWRtaW4tPnRva2VucygpLT5jcmVhdGUoWyduYW1lJyA9PiAnYWdlbnQnLCAndG9rZW4nID0+ICRoYXNoLCAnYWJpbGl0aWVzJyA9PiBbJyonXV0pOwogICAgICAgIGVjaG8gIltib290XSBhcGkgdG9rZW4gcmVnaXN0ZXJlZCBmb3IgeyRhZG1pbi0+ZW1haWx9XG4iOwogICAgfQp9ClBIUApjaG1vZCA2NDQgL3RtcC9ib290c3RyYXAucGhwCgplY2hvICJbYm9vdF0gdm9sdW1lIG93bmVyPSQoc3RhdCAtYyAldTolZyAiJFZPTCIpIGxpc3Rlbj0kU0VSVkVSX05BTUUiCmNkIC9hcHAKc3UgLW0gLXMgL2Jpbi9zaCBhcHBsaWNhdGlvbiAtYyAncGhwIGFydGlzYW4gbWlncmF0ZSAtLWZvcmNlIC0tbm8taW50ZXJhY3Rpb24gJiYgcGhwIC90bXAvYm9vdHN0cmFwLnBocCcKCiMgVXBzdHJlYW0gQ01ELCB1bmNoYW5nZWQ6IHN1cGVydmlzb3JkIHdpdGggd2ViIHNlcnZlciwgcXVldWUgd29ya2VyIGFuZCBzY2hlZHVsZXIuCmV4ZWMgL3Vzci9sb2NhbC9iaW4vc3RhcnQuc2gK | base64 -d > /tmp/boot.sh; exec /bin/sh /tmp/boot.sh'`
- **Health check:** /health
- **Public domain:** Yes

## Documentation

# Deploy and Host Databasement on Railway

**Built for an LLM agent to deploy and use.** There is no registration page to open: the admin account and an API token are created from generated variables on first boot, and the contract below lists every address, variable name and one script that checks health and calls the authenticated API.

Databasement is an open source, self-hosted database backup manager. You register MySQL, MariaDB, PostgreSQL, MongoDB, Redis or SQLite servers, schedule backups, send the dumps to S3-compatible storage, SFTP or a local volume, and restore a snapshot onto any registered server from a web UI or a REST API.

## About Hosting Databasement

This template runs one service: the official `davidcrty/databasement` v1.10.10 image, pinned by digest, with a volume on `/data`. The volume holds the SQLite application database (users, servers, schedules, snapshot records) and the local backup storage, so they survive redeploys. The image's web server, queue worker and scheduler run together in this one container.

Upstream makes the first visitor to `/register` the administrator, which on a public Railway domain means anyone who finds the URL first. This template closes that: on first boot, while the user table is empty, it creates the admin user `admin@databasement.example.com` with the password in `DATABASEMENT_ADMIN_PASSWORD`, and registers `DATABASEMENT_API_TOKEN` as an API token for that user. The account is created on the first boot only, so changing the password variable later does not change the password; change it in the dashboard instead. The application key is derived from `DATABASEMENT_APP_SECRET`, so encrypted server credentials stay readable after every redeploy. The image's fixed port is moved to Railway's injected `PORT` so the healthcheck and the public domain reach it.

Backups are written to the volume by default. For off-site copies add an S3-compatible volume in the dashboard (Volumes, then Add) and point a schedule at it.

### Agent contract

- Public URL: `DATABASEMENT_PUBLIC_URL` (`https://` plus the service's `RAILWAY_PUBLIC_DOMAIN`). The dashboard is at `/`, the REST API under `/api/v1`.
- Private URL: `http://databasement.railway.internal:8080`, exposed as `DATABASEMENT_PRIVATE_URL`.
- Credentials: `DATABASEMENT_ADMIN_PASSWORD` (password of the admin user `admin@databasement.example.com`), `DATABASEMENT_API_TOKEN` (API token for that user), `DATABASEMENT_APP_SECRET` (server-side key material; clients never send it).
- Auth: API calls send `Authorization: Bearer DATABASEMENT_API_TOKEN` and `Accept: application/json`. The dashboard signs in with the admin email and password.
- Health: `GET /health` returns 200 without credentials.
- API: `GET|POST /api/v1/database-servers`, `GET /api/v1/database-servers/{id}/test-connection`, `POST /api/v1/database-servers/{id}/backup`, `POST /api/v1/database-servers/{id}/restore`, `GET|POST /api/v1/backup-schedules`, `GET /api/v1/jobs`.

```bash
# run with DATABASEMENT_PUBLIC_URL and DATABASEMENT_API_TOKEN set
U="$DATABASEMENT_PUBLIC_URL"
curl -s -o /dev/null -w "health: %{http_code}\n" "$U/health"
curl -s -o /dev/null -w "no token: %{http_code}\n" -H "Accept: application/json" "$U/api/v1/database-servers"
curl -s -o /dev/null -w "with token: %{http_code}\n" -H "Accept: application/json" -H "Authorization: Bearer $DATABASEMENT_API_TOKEN" "$U/api/v1/database-servers"
curl -s -H "Accept: application/json" -H "Authorization: Bearer $DATABASEMENT_API_TOKEN" "$U/api/v1/database-servers" | sed -n 's/.*"data":\(\[[^]]*\]\).*/servers: \1/p'
curl -s -o /dev/null -w "register closed: %{http_code}\n" "$U/register"
```

A fresh deploy prints `health: 200`, `no token: 401`, `with token: 200`, `servers: []` and `register closed: 401`.

## Why Deploy Databasement 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 Databasement 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 admin password and API token, contract block and one working script; no registration page.
- **No claimable admin** - the first-visitor-becomes-admin hole is closed before the URL is public.
- **State survives redeploys** - users, schedules, snapshot records and local backups live on one volume, and credentials stay decryptable.
- **A working port** - the image's fixed port is moved to Railway's injected port, so the healthcheck passes.
- **Backups next to your databases** - register the Postgres, MySQL or MongoDB services in the same Railway project over the private network.

## Common Use Cases

- **Scheduled backups for Railway databases** - dump Postgres, MySQL, MariaDB or MongoDB services on a cron schedule with retention rules.
- **Restore into staging** - pull a production snapshot onto another server with one API call.
- **Off-site copies** - ship dumps to S3-compatible storage or SFTP.

## Dependencies for Databasement Hosting

- One Railway volume on `/data`, created by the template.

### Deployment Dependencies

- [Databasement repository](https://github.com/David-Crty/databasement)
- [Official image](https://hub.docker.com/r/davidcrty/databasement)
- [Databasement documentation](https://david-crty.github.io/databasement/)

### Implementation Details

| Variable | Purpose |
| --- | --- |
| `DATABASEMENT_ADMIN_PASSWORD` | Password of the admin user, read on the first boot only. Generated per deploy. |
| `DATABASEMENT_API_TOKEN` | API token registered for the admin user at boot. Generated per deploy. |
| `DATABASEMENT_APP_SECRET` | Source of the Laravel application key. Generated per deploy; do not change after first boot. |
| `APP_URL` | Public base URL used for links and redirects. |
| `DATABASEMENT_PUBLIC_URL` | HTTPS address for clients outside Railway. |
| `DATABASEMENT_PRIVATE_URL` | Address on the private network, for services in the same project. |

The start command points SQLite at `/data/database.sqlite`, sets the web server to listen on `PORT`, derives `APP_KEY`, hands the volume to the image's unprivileged user, runs migrations, creates the admin and token if missing, then runs the image's own start script.


## 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/databasement-or-just-updated-database-ba
