Step-by-step tutorials
Self-host the apps you use, deploy your framework to a server you own, and move off a managed platform. Every guide shows the manual way and the one-click way.
Self-host open-source apps
Self-host a Mastodon server
Run a real Mastodon instance with Postgres, Redis, the streaming API and Sidekiq as separate services, behind Caddy HTTPS, with backups.
Self-host AFFiNE, an open-source Notion alternative
Run AFFiNE, the open-source Notion and Miro alternative, with Postgres and Redis in Docker Compose, Caddy HTTPS, backups and an upgrade path.
Self-host Castopod to publish a podcast
Run Castopod with MariaDB and Redis in Docker Compose behind Caddy HTTPS, publish an RSS feed you own, and back up the audio volume.
Self-host changedetection.io to watch web pages
Run changedetection.io on a $6/month server to get notified when any web page changes: price drops, restocks, or a notice page updating.
Self-host Chatwoot with Postgres, Redis and Sidekiq
Run your own Chatwoot support inbox on a VPS you control, with Postgres, Redis, a Sidekiq worker and HTTPS, from a bare server to a working login.
Self-host Ghost with MySQL
Run Ghost on your own server with MySQL, Docker Compose and Caddy, including real backups, HTTPS, and a tested upgrade path.
Self-host Gitea for your own Git server
Run Gitea on your own server with Docker Compose, HTTPS through Caddy and Git over SSH, plus a backup you have tested by restoring it.
Self-host Healthchecks.io to monitor cron jobs
Run Healthchecks.io on your own server with Docker, Postgres and HTTPS: the full Compose setup, SMTP alerts, backups and the one-click shortcut.
Self-host Immich for your photo library
Run Immich, the open-source Google Photos alternative, on your own server with Docker, Postgres and HTTPS through Caddy, and point your phone at it.
Self-host Jitsi Meet for video calls
Run Jitsi Meet, the open-source video conferencing platform, on your own Docker server with HTTPS, and the one port that trips up most setups.
Self-host LibreChat for your own ChatGPT-style app
Run LibreChat with MongoDB in Docker Compose behind Caddy HTTPS, with real secrets generated, registration locked down and backups in place.
Self-host MediaCMS for video hosting
Run MediaCMS with Postgres, Redis and a separate Celery worker for transcoding in Docker Compose, behind Caddy HTTPS, with backups.
Self-host Meilisearch for fast search
Run Meilisearch in Docker Compose behind Caddy HTTPS, with a real master key, a backup snapshot and an upgrade path you can repeat.
Self-host Memos for notes
Run Memos, a lightweight self-hosted note-taking app, on your own $6/month droplet with HTTPS, backups and an upgrade path.
Self-host Metabase with Postgres
Run Metabase, the open-source BI tool, on your own server with Docker, its own Postgres metadata database, and HTTPS through Caddy, no per-seat license.
Self-host n8n on a $6 server
Run n8n on your own $6/month droplet with Postgres and HTTPS: the full Docker Compose setup, backups, upgrades and the one-click shortcut.
Self-host Rocket.Chat for team chat
Run Rocket.Chat on your own Hetzner server with a MongoDB replica set, HTTPS, backups and an upgrade path, start to finish.
Self-host Umami analytics
Run Umami on your own server with Docker Compose, Postgres and automatic HTTPS through Caddy, with backups you have restored at least once.
Self-host Uptime Kuma for status pages and alerts
Run Uptime Kuma on your own server with Docker Compose and Caddy HTTPS, add backups and upgrades, and see the one-click path too.
Self-host Vaultwarden, the Bitwarden-compatible password manager
Run your own Bitwarden-compatible vault with Vaultwarden, Docker Compose and Caddy, with a hashed admin token and a working backup.
Deploy your framework to your own server
Deploy a Go web app to Hetzner
Build and ship a Go net/http service with Postgres on a Hetzner server using Docker, Compose and Caddy, with backups and a repeatable upgrade path.
Deploy a Rails app to DigitalOcean
A full walkthrough: deploy a Dockerized Rails app with Postgres and HTTPS on a $12/month DigitalOcean droplet, with backups and upgrades.
Deploy a Rails app to Hetzner
Deploy a Rails app to a Hetzner server with Postgres, Caddy HTTPS and nightly backups using Docker Compose, plus a repeatable release process.
Deploy an Express app to DigitalOcean
Run an Express 5 app with a Postgres-backed route on a DigitalOcean droplet, behind Caddy for HTTPS, plus the shortcut that skips the setup.
Deploy Django to DigitalOcean
Run a Django app on a DigitalOcean droplet with Postgres, gunicorn and Caddy for HTTPS, plus the one-click path that skips the setup.
Deploy Django with Celery to Hetzner
Run Django, gunicorn, Celery and Postgres on a Hetzner server with Docker Compose, Caddy and HTTPS, from scratch to production.
Deploy FastAPI to Hetzner
Run a FastAPI app in production on a Hetzner Cloud server: Postgres, Alembic migrations and Caddy for HTTPS, all in Docker.
Deploy Flask to DigitalOcean
Run a Flask app in production on a DigitalOcean Droplet: gunicorn, Postgres and Flask-Migrate behind Caddy for HTTPS, all in Docker.
Deploy Laravel to Hetzner
Run Laravel in production on a Hetzner Cloud server with FrankenPHP, MySQL, a queue worker and the scheduler in Docker, with HTTPS set up automatically.
Deploy Next.js to DigitalOcean
Run a production Next.js app on a DigitalOcean droplet: a standalone Docker build, Caddy for automatic HTTPS, and a repeatable way to ship updates.
Deploy Next.js to Hetzner
Build a Next.js app in standalone output mode, containerize it, and serve it behind Caddy with HTTPS on a Hetzner Cloud server.
Deploy Nuxt to Hetzner
Build a Nuxt app with its Nitro node-server output, containerize it, and serve it behind Caddy with HTTPS on a Hetzner Cloud server.
Deploy Phoenix to Hetzner
Build a Phoenix release and run it in production on a Hetzner Cloud server, with Postgres and Caddy for HTTPS, all in Docker with mix release.
Deploy Spring Boot to Hetzner
Package a Spring Boot app as a layered Docker image, add Postgres and Caddy HTTPS, and run it on a Hetzner server with backups and a release step.
Deploy SvelteKit to Hetzner
Build a SvelteKit app with adapter-node, containerize it, and serve it behind Caddy with HTTPS on a Hetzner Cloud server you control.
Move off a managed platform
Move a Django app from Heroku to DigitalOcean
Migrate a production Django app off Heroku to a DigitalOcean droplet: Dockerize it, pull the Postgres data across, map config vars, and cut DNS over.
Move a Next.js app from Vercel to your own server
Take a Next.js app off Vercel and onto a server you own: environment variables, a standalone Docker build, HTTPS, cron jobs and a safe DNS cutover.
Move a Rails app from Heroku to Hetzner, step by step
Migrate a production Rails app off Heroku to Hetzner: Dockerize it, pull the Postgres data across, map config vars, and cut DNS over safely.
Move from Fly.io to your own server
Export your app's image, secrets and Postgres data from Fly and run them on a server you own, with Docker Compose and Caddy.
Move from Railway to your own server
Export your Railway app and its Postgres database, stand them up on your own VPS behind Caddy, and the one-click import that does most of it for you.
Move from Render to your own server
A full walkthrough for moving a Render web service and its Postgres database to a server you own, with HTTPS and backups set up at the end.
Move off Heroku Key-Value Store (Redis)
Heroku renamed its Redis add-on to Key-Value Store. Here's how to run your own Redis instead, move the data over, and keep your app working.
Move off Heroku Postgres without losing data
Capture a Heroku Postgres backup, restore it into a new database, verify every row, and cut over without downtime or data loss.
Replace Heroku review apps with pull request previews
Build your own per-PR preview environments with GitHub Actions and Docker, then see what a hosted version with sleep-on-idle looks like.
Replace Heroku Scheduler with cron jobs on your server
Heroku Scheduler's jobs aren't guaranteed to run on time or at all. Here's how to replace them with cron on your own server, with locking and real logs.
Run it in production
Automatic Postgres backups you can actually restore
Script pg_dump, schedule it with cron, ship it off-server, prune old copies, and prove every backup restores cleanly before you need it.
HTTPS for many apps on one server
Run several small apps on one VPS behind a single Caddy instance, each on its own subdomain with an automatic certificate, plus the automated version.
Run cron jobs for Dockerized apps
Add scheduled jobs to a containerized app with a dedicated scheduler container and Docker labels, no cron daemon baked into your image.
Run Sidekiq or Celery workers next to your web app
Set up a dedicated Sidekiq or Celery worker process alongside your web app, with Docker Compose, systemd, and real failure modes covered.
Secure a new Ubuntu server before you put apps on it
Lock down a fresh Ubuntu 24.04 server before deploying: a sudo user, key-only SSH, ufw, fail2ban and automatic security updates, step by step.
Deploy your first app on a server you own.
Attach a machine with a host, a user and an SSH key, or let Railyard create one in your cloud account. It installs the rest and watches it come online.
Free plan, no card, and 14 days of Pro for every new team. One flat price per team.