Railway's workflow on your own servers
Open source and self-hosted. Install it on a Linux VM and deploy apps and databases from a canvas, the way you do on Railway.
curl -fsSL https://openrail.app/install.sh | sudo sh
Deploy a Docker image, add Postgres, point DATABASE_URL at it, generate an HTTPS domain and open it: the real console on a fresh 2 vCPU VM, 2026-10-24, one take of 24 s. Waits are sped up and labelled on screen; host names are replaced with example.com.
Read the steps
- Deploy an image. On an empty canvas, Add, then Docker Image: nginx:1.27 is staged and deployed. The wait is sped up and labelled.
- Add Postgres. Add Postgres. It runs as its own service with a volume.
- Wire DATABASE_URL. Set DATABASE_URL on nginx to ${{Postgres.DATABASE_URL}}, then redeploy.
- Get a URL. In Settings, Networking, Generate Domain gives nginx a public HTTPS name.
- Live. Open the name: the nginx welcome page, served over HTTPS.
The same flow, step by step, is the quick start.
Watch the 88 s demo
One take on a fresh VM: install, deploy, add Postgres, reference its URL, open the HTTPS address, scale. Captions are on; there is no sound.
The console you already know
Install with one command
One install script turns a Linux VM into a canvas of services. Run it on a fresh Ubuntu 24.04 VM with a public IPv4 address and ports 80 and 443 open. It installs Docker, the control plane, the agent, Caddy for HTTPS and a private registry, then prints a one-time link to create your account.
- With curl
curl -fsSL https:// | sudo shopenrail.app/ install.sh - With wget
wget -qO- https:// | sudo shopenrail.app/ install.sh - Guided: asks for your domain and email
curl -fsSLo install.sh https:// && sudo sh install.shopenrail.app/ install.sh
No domain needed: without one, the console and your services get sslip.io names with real certificates. See the install guide and every install option.
Your domains, with HTTPS
Every service can get a generated sslip.io name, and your own domains get Let's Encrypt certificates.
- Generate Domain gives a public HTTPS name that works at once.
- Custom Domain asks for one DNS record.
- The status moves from Waiting for DNS to Issuing certificate to Active.
| Type | Name | Value |
|---|---|---|
| A | shop | 203.0.113.10 |
| CNAME | www | shop.example.com |
What it costs
For the 4 vCPU API running all month: Railway $220.15 at steady load and $134.15 at typical load; a VM with 8 dedicated vCPU that fits it, about $156.89.
openrail is free. You pay your VM provider a fixed monthly price. A small, mostly idle app costs about the same either way, and Railway also runs the servers for you.
Prices and sources
- API sized 4 vCPU / 8 GB; Postgres 1 vCPU / 2 GB; Redis 0.1 vCPU / 0.5 GB
- Steady case: all of that in use 730 hours. Typical case: API averages 1.6 vCPU / 6 GB, Postgres 0.5 / 1.5, Redis 0.05 / 0.3
- 21 GB volumes, 200 GB egress
- Railway Pro (the $20 minimum is covered by usage)
List prices in USD read on 2026-10-22, excluding tax; euro prices at 1.1234 USD per EUR (ECB, 2026-10-21). Shared vCPUs under constant full load may be throttled, so the dedicated row is the fair comparison for the steady case. Check current prices: railway.com/pricing, docs.railway.com/reference/pricing/plans, hetzner.com/cloud/cost-optimized, hetzner.com/cloud/regular-performance, hetzner.com/cloud/general-purpose, docs.hetzner.com/general/infrastructure-and-availability/ipv4-pricing.
Bring your Railway habits
A railway CLI alias, the same variable names and the same reference syntax. After openrail alias install, the commands you type today deploy to your own console.
| On Railway | On openrail |
|---|---|
railway up | railway up, or openrail up |
railway link | railway link |
${{Postgres.DATABASE_URL}} | ${{Postgres.DATABASE_URL}} |
railway.json in the repo | railway.json in your repo is read and applied |
| Railpack builds | Railpack builds, or your Dockerfile |
| Import a project | By hand in 0.1.0: move a project |
DATABASE_URL follows Postgres wherever it runs. VariablesHonest limits
Beta in 0.1.0
These work but are not yet covered by the end-to-end tests that run on fresh VMs.
- More than one host: joining hosts, the private WireGuard network, a second ingress host.
- Replicas spread across hosts.
- Database backups to an S3-compatible bucket, and restoring them.
- Upgrades with
openrail upgradeand their automatic revert.
Not in 0.1.0
- The Railway project importer. The manual move works today.
- PR environments, app sleeping, global regions and an edge network.
- Master key rotation, and enforcing two-factor login for everyone.
- A clear error when a certificate fails: it stays on Issuing certificate.
By design
- One control host. If it is down, apps keep serving but deploys, cron and the console wait.
- Databases run on one host each, with no automatic failover.
- Services with a volume have a short gap on each deploy.
- You own the VM. Security updates are automatic; reboots are yours.
Open source, no lock-in
The server is AGPL-3.0; the CLI, templates and installer are MIT. Every deployment is a standard Docker image, databases are ordinary containers, and openrail config pull writes your services to one file.
- View on GitHubThe server, CLI, installer and templates in one repository.
- Release v0.1.0The server for Linux on amd64 and arm64, the CLI for Linux, macOS and Windows, and signed checksums.
- Compare with Railway, Coolify, Dokploy and KamalHow they differ, feature by feature.
Questions
Is it cheaper than Railway for a small project?
Usually not. Railway bills by use, so an idle app costs $6.20 to $14.65 a month there, about what a small VM costs. The saving shows up at steady load, with several apps on one VM, and with a lot of egress.
What do I need?
A Linux VM with a public IPv4 address, ports 80 and 443 open, and root access. Ubuntu 24.04 is tested, on amd64 or arm64. 2 vCPU and 4 GB of RAM is a comfortable start.
Do I need a domain?
No. Without one, the console and your services get sslip.io names with real certificates. Add your own domain at install time or later, per service.
Is it a fork of Railway?
No. It is an independent project that follows Railway's ideas and names so your projects and habits move over. It is not affiliated with Railway. Builds use Railpack, Railway's open-source builder.
Can I use my Docker Compose file?
Yes. openrail import compose docker-compose.yml stages its services, variables, ports and volumes for you to review and deploy.
Install it on a VM you already pay for
curl -fsSL https://openrail.app/install.sh | sudo sh