[Blog](https://console.f1b10.testing.getox.in/blog) [Product](https://console.f1b10.testing.getox.in/blog#c-product) # A Heroku alternative on your own VPS, without Docker A Heroku alternative for 2026: move your app to a VPS you own. What maps to what, real costs, five migration steps, and what ox does not do. Saurav Sharma Oct 8, 2026 9 min read On this page - [What "on your own server" means here](https://console.f1b10.testing.getox.in/blog/heroku-alternative-on-your-own-server#heading-what-it-means) - [Heroku concepts and their ox names](https://console.f1b10.testing.getox.in/blog/heroku-alternative-on-your-own-server#heading-concepts) - [Heroku pricing compared with a VPS](https://console.f1b10.testing.getox.in/blog/heroku-alternative-on-your-own-server#heading-cost) - [How to migrate from Heroku to a VPS, step by step](https://console.f1b10.testing.getox.in/blog/heroku-alternative-on-your-own-server#heading-move) - [What you get beyond the move](https://console.f1b10.testing.getox.in/blog/heroku-alternative-on-your-own-server#heading-included) - [What ox does not do](https://console.f1b10.testing.getox.in/blog/heroku-alternative-on-your-own-server#heading-limits) - [Other Heroku alternatives worth a look](https://console.f1b10.testing.getox.in/blog/heroku-alternative-on-your-own-server#heading-others) - [Key takeaways](https://console.f1b10.testing.getox.in/blog/heroku-alternative-on-your-own-server#key-takeaways) - [Frequently asked questions](https://console.f1b10.testing.getox.in/blog/heroku-alternative-on-your-own-server#faq) - [Next step](https://console.f1b10.testing.getox.in/blog/heroku-alternative-on-your-own-server#heading-next) The cheapest Heroku alternative that still feels like Heroku is a VPS you rent yourself, with a tool on top that gives back push-to-deploy, config vars, add-ons and rollbacks. You pay one flat monthly price for the machine, run several apps on it, and your data stays on a server you control. The trade: one server per app, and no autoscaling. Heroku made deploying feel like `git push` and nothing else. On February 6, 2026, Heroku said it is ["transitioning to a sustaining engineering model"](https://www.heroku.com/blog/an-update-on-heroku/), focused on stability and security rather than new features, and stopped offering Enterprise contracts to new customers. Existing apps keep running, and nothing changed for card-paying customers. Still, many teams are asking where to go next. This post explains the own-server option, how Heroku's ideas map onto it, what it costs, how to move an app, and where it falls short. **In this guide:** - [What "on your own server" means](https://console.f1b10.testing.getox.in/blog/heroku-alternative-on-your-own-server#heading-what-it-means) - [Heroku concepts and their ox names](https://console.f1b10.testing.getox.in/blog/heroku-alternative-on-your-own-server#heading-concepts) - [Heroku pricing compared with a VPS](https://console.f1b10.testing.getox.in/blog/heroku-alternative-on-your-own-server#heading-cost) - [How to migrate from Heroku to a VPS, step by step](https://console.f1b10.testing.getox.in/blog/heroku-alternative-on-your-own-server#heading-move) - [What ox does not do](https://console.f1b10.testing.getox.in/blog/heroku-alternative-on-your-own-server#heading-limits) - [Other Heroku alternatives](https://console.f1b10.testing.getox.in/blog/heroku-alternative-on-your-own-server#heading-others) - [Frequently asked questions](https://console.f1b10.testing.getox.in/blog/heroku-alternative-on-your-own-server#faq) ## What "on your own server" means here You rent a VPS from a company like Hetzner, DigitalOcean, Vultr or Linode, running the latest Ubuntu LTS. Your app, your database and your backups live on it. You pay the provider directly, one flat price per month for the whole machine. ox is the part that makes it feel like Heroku. ox is not self-hosted: its control panel is hosted, so you run nothing extra yourself. You paste one command on the server, which installs a small agent and Caddy. From then on you deploy from the dashboard, the `ox` command line, or a `git push`. ox doesn't use Docker or buildpacks. Your app runs as a plain systemd service under its own Linux user, behind Caddy with automatic HTTPS. The agent dials out to ox over an encrypted connection, so no port is opened for it and ox holds no SSH key. ## Heroku concepts and their ox names | On Heroku | On ox | | --- | --- | | `web` process in the Procfile | `[app] start` in `ox.toml`, or detected from your repo | | `worker` processes | `[workers]`, one line each | | `release` phase (migrations) | `[build] migrate`, run before traffic moves to the new release | | Buildpacks | Detection from your lockfile and version files; toolchains installed with mise | | Config vars | Variables, with history and undo | | Postgres and Redis add-ons | `[services]`: `postgres = {}`, `redis = {}` on your server | | Heroku Scheduler | `[cron]`, with a schedule per job | | Pipelines and promotion | A staging copy and Promote to production | | Review apps | Branch previews, each with its own database and web address | | `heroku releases:rollback` | `ox rollback`, to a kept release, with no rebuild | | `heroku logs --tail` | `ox logs myapp --follow` | One difference to know: ox does not read a Procfile. You move its lines into `ox.toml`, which takes a minute (example below). Review apps become [branch previews and a staging copy](https://console.f1b10.testing.getox.in/docs/operate/previews), which run on the same server. ## Heroku pricing compared with a VPS Heroku prices each process and each add-on. On October 8, 2026, [Heroku's pricing page](https://www.heroku.com/pricing) listed Eco dynos at $5 a month, Basic at $7, Standard-1X at $25, and the smallest Heroku Postgres plan (Essential-0) at $5. A web process and a worker on Basic plus that database comes to $19 a month for one app, before Redis or more apps. On your own server you pay for the machine once and put several apps on it. Small servers cost about $5 to $24 a month. ox is free for one project, with every feature. ox Pro is $10 a month for unlimited projects and servers, so the price stays the same as you add apps. | | Heroku | Your VPS with ox | | --- | --- | --- | | How you pay | Per dyno and per add-on, per app | One server price, any number of apps on it | | Where the app runs | Heroku's machines | Your server, as a systemd service | | Database | Heroku Postgres add-on | PostgreSQL on your server, backed up daily | | Scaling | More dynos, autoscaling on some plans | A bigger server; no autoscaling | | Who runs the machine | Heroku | You own it; ox hardens and updates it | ## How to migrate from Heroku to a VPS, step by step The move takes five steps. Keep the Heroku app running until the last one. ### 1. Add a server and the repository Sign in to ox with GitHub, add a fresh Ubuntu LTS server with the command ox shows, and pick your app's repository. ox reads it and shows what it will run before anything starts. The [quickstart](https://console.f1b10.testing.getox.in/docs/quickstart) walks through these screens. ### 2. Turn the Procfile into ox.toml A typical Python Procfile: Code ``` web: gunicorn config.wsgi --bind 0.0.0.0:$PORT worker: celery -A config worker release: python manage.py migrate --noinput ``` becomes: TOML ```toml domains = ["example.com"] [app] start = "uv run gunicorn config.wsgi --bind 127.0.0.1:$PORT" [build] migrate = "uv run python manage.py migrate --noinput" [workers] worker = "uv run celery -A config worker" [services] postgres = {} redis = {} ``` ox gives each process its `$PORT` and sets `HOST=127.0.0.1`. Bind there, as above, and Caddy stays the only thing facing the internet. Run `ox check` in the repo to see the resolved plan and any missing variables before you deploy. For other stacks, the guides have a complete `ox.toml` each: [deploy Next.js](https://console.f1b10.testing.getox.in/docs/guides/nextjs), [deploy FastAPI](https://console.f1b10.testing.getox.in/docs/guides/fastapi), [deploy a Node API](https://console.f1b10.testing.getox.in/docs/guides/node) and [deploy Laravel](https://console.f1b10.testing.getox.in/docs/guides/laravel). ### 3. Copy your config vars Print them with `heroku config -s --app myapp` and add your own keys in ox's Variables tab, or with `ox vars set`. Skip `DATABASE_URL`, `REDIS_URL` and `PORT`: ox provides those, pointing at the services on your server. ### 4. Bring the Heroku Postgres database over Shell ```bash heroku pg:backups:capture --app myapp heroku pg:backups:download --app myapp ``` That saves `latest.dump`, a pg_dump archive. ox [restores it from a file](https://console.f1b10.testing.getox.in/docs/operate/backups#restore): it loads the dump into a copy first, so the live database changes only when the load works. The dashboard and the command line take a file of up to 95 MB. Put a bigger dump in your S3 bucket and restore it from there. From the command line: Shell ```bash ox restore myapp postgres --file latest.dump --confirm myapp --wait ``` ### 5. Deploy, check, then switch DNS Deploy. Before your domain points at the server, ox gives the app a temporary address so you can check it. When it looks right, point your domain's A record at the server. Caddy gets the HTTPS certificate on its own. Turn off the Heroku dynos once traffic has moved. ## What you get beyond the move - Updates with no downtime: the new release starts beside the old one and visitors move only after it answers its health check ([how zero-downtime deploys work with systemd and Caddy](https://console.f1b10.testing.getox.in/blog/zero-downtime-deploys-systemd-caddy)). - A daily backup of your Postgres, MySQL, SQLite and Qdrant data, and of Redis or Neo4j when the project runs its own, kept on the server and copied to your S3 bucket if you add one, plus a snapshot before every migration. - A command line your AI coding agent can drive: every command takes `--json` and exits with an error when something fails. - Your data stays on your server. ox shows your variables in the dashboard but keeps no copy. ## What ox does not do Know these before you move: - **One project runs on one server.** There is no scaling across several servers and no autoscaling. You pick a bigger server when you need one. - **Rails works, with a few limits.** ox deploys a standard Rails app with Postgres, and the [Rails guide](https://console.f1b10.testing.getox.in/docs/guides/rails) shows how. Background jobs need a `[workers]` line, and a SQLite-only app needs an ox.toml line that keeps its storage folder. - **No Procfile and no buildpacks.** Your build runs from your lockfile and `ox.toml`. - **No Docker.** If your app only ships as a container image, ox is not the right fit. - **One operating system.** Servers run the latest Ubuntu LTS. - **One person per account for now.** Teams are planned for after the beta. - **The server is yours.** ox sets up a firewall, fail2ban and automatic security updates, but the machine, its size and its provider are your choice and your bill. ## Other Heroku alternatives worth a look - **Dokku** is an open-source Heroku alternative you install on your server. It builds with Heroku buildpacks and runs apps in Docker containers. - **Coolify** is open source and self-hostable, deploys anything that works with Docker, and also offers a hosted plan. - **Kamal**, from 37signals, deploys containerized apps to your servers from the command line, with zero-downtime deploys. - **Hosting platforms** like Render, Railway and Fly.io run your app on their machines, closer to Heroku's model. If you want containers, those are good fits. ox is for when you want your app to be a plain service on a server you own, without running a panel yourself. ## Key takeaways - Heroku has been in sustaining engineering since February 2026: apps keep running, but new features have stopped. - A VPS costs one flat monthly price for several apps; Heroku charges per dyno and per add-on. - Every Heroku idea has an ox equivalent except the Procfile and buildpacks, which become a short `ox.toml`. - The move is five steps, and the Heroku app keeps serving until you switch DNS. - ox does not autoscale or spread one app over several servers. ## Frequently asked questions ### Is Heroku shutting down? No end date has been announced. Heroku's February 2026 update says it is moving to a sustaining engineering model, focused on stability, security and support, and existing customers' apps and contracts continue. What changed is that new features have stopped and new customers can no longer sign Enterprise contracts. ### What is the cheapest Heroku alternative? For more than one app, usually a VPS of your own. A small server costs about $5 to $24 a month and holds several apps and their databases, while Heroku charges per dyno and per add-on for each app. The catch is the server work, which a tool like ox, Dokku or Coolify takes over. ### Do I need to know Linux to run my app on a VPS? Not with ox. You paste one command on the server once, and everything after that happens in the dashboard or the CLI. You won't need to log in to the server. ox sets up the firewall, fail2ban and automatic security updates, so the usual first-day hardening is done for you. ### Which languages can I move off Heroku to ox? JavaScript and TypeScript (npm, pnpm, Yarn, Bun), Python (uv, Poetry, pip, Django, FastAPI), Go, Rust, Ruby on Rails, PHP and plain websites. Each stack guide in the docs has a complete `ox.toml` you can copy, and `ox check` shows what ox will run before you deploy anything. ### Can I leave ox later? Yes. Your apps are plain programs on your server and your database is plain PostgreSQL, so nothing is locked into a format only ox reads. Your backups are standard PostgreSQL dumps. Download them first: `sudo ox uninstall` deletes everything ox created on the server, backups included, and keeps the security settings. [How to leave](https://console.f1b10.testing.getox.in/docs/operate/leaving) lists what to copy. ## Next step Pick the smallest app you run on Heroku and try the move on a fresh $5 to $10 server while the Heroku copy keeps serving. The [quickstart](https://console.f1b10.testing.getox.in/docs/quickstart) takes you from sign-in to a first deploy in five steps. *Updated Oct 11, 2026: the FAQ on leaving ox now says what deleting a project and uninstalling ox remove, and links the page on how to leave.* New to running apps on your own server? [How ox self-hosts your apps](https://console.f1b10.testing.getox.in/self-hosting) shows what ox sets up on your server. On this page - [What "on your own server" means here](https://console.f1b10.testing.getox.in/blog/heroku-alternative-on-your-own-server#heading-what-it-means) - [Heroku concepts and their ox names](https://console.f1b10.testing.getox.in/blog/heroku-alternative-on-your-own-server#heading-concepts) - [Heroku pricing compared with a VPS](https://console.f1b10.testing.getox.in/blog/heroku-alternative-on-your-own-server#heading-cost) - [How to migrate from Heroku to a VPS, step by step](https://console.f1b10.testing.getox.in/blog/heroku-alternative-on-your-own-server#heading-move) - [1. Add a server and the repository](https://console.f1b10.testing.getox.in/blog/heroku-alternative-on-your-own-server#heading-move-1) - [2. Turn the Procfile into ox.toml](https://console.f1b10.testing.getox.in/blog/heroku-alternative-on-your-own-server#heading-move-2) - [3. Copy your config vars](https://console.f1b10.testing.getox.in/blog/heroku-alternative-on-your-own-server#heading-move-3) - [4. Bring the Heroku Postgres database over](https://console.f1b10.testing.getox.in/blog/heroku-alternative-on-your-own-server#heading-move-4) - [5. Deploy, check, then switch DNS](https://console.f1b10.testing.getox.in/blog/heroku-alternative-on-your-own-server#heading-move-5) - [What you get beyond the move](https://console.f1b10.testing.getox.in/blog/heroku-alternative-on-your-own-server#heading-included) - [What ox does not do](https://console.f1b10.testing.getox.in/blog/heroku-alternative-on-your-own-server#heading-limits) - [Other Heroku alternatives worth a look](https://console.f1b10.testing.getox.in/blog/heroku-alternative-on-your-own-server#heading-others) - [Key takeaways](https://console.f1b10.testing.getox.in/blog/heroku-alternative-on-your-own-server#key-takeaways) - [Frequently asked questions](https://console.f1b10.testing.getox.in/blog/heroku-alternative-on-your-own-server#faq) - [Is Heroku shutting down?](https://console.f1b10.testing.getox.in/blog/heroku-alternative-on-your-own-server#heading-faq-shutdown) - [What is the cheapest Heroku alternative?](https://console.f1b10.testing.getox.in/blog/heroku-alternative-on-your-own-server#faq-cheapest) - [Do I need to know Linux to run my app on a VPS?](https://console.f1b10.testing.getox.in/blog/heroku-alternative-on-your-own-server#heading-faq-linux) - [Which languages can I move off Heroku to ox?](https://console.f1b10.testing.getox.in/blog/heroku-alternative-on-your-own-server#heading-faq-languages) - [Can I leave ox later?](https://console.f1b10.testing.getox.in/blog/heroku-alternative-on-your-own-server#heading-faq-leave) - [Next step](https://console.f1b10.testing.getox.in/blog/heroku-alternative-on-your-own-server#heading-next) Written by Saurav Sharma Builds ox. Writes about running apps on servers you own, without Docker and without a platform bill. [Older post Zero-downtime deploys without Docker: systemd and Caddy](https://console.f1b10.testing.getox.in/blog/zero-downtime-deploys-systemd-caddy) [Newer post Deploy Django Without Docker: Gunicorn, systemd and Caddy](https://console.f1b10.testing.getox.in/blog/deploy-django-to-a-vps-without-docker) ## Keep reading - Product [A Coolify Alternative Without Docker, on Your Own VPS](https://console.f1b10.testing.getox.in/blog/coolify-alternative-without-docker) Want Coolify's dashboard without Docker? How ox runs apps as plain systemd services on your VPS, a fair comparison, and when Coolify is the better pick. Saurav Sharma Oct 15, 2026 7 min read - Product [Dokploy vs Coolify vs ox: Which One Fits Your VPS?](https://console.f1b10.testing.getox.in/blog/dokploy-vs-coolify-vs-ox) Dokploy vs Coolify vs ox in October 2026: how each runs apps on your own server, what the panel needs, what each costs, and which one fits your project. Saurav Sharma Oct 15, 2026 7 min read - Product [Render and Railway Alternatives on a Server You Own](https://console.f1b10.testing.getox.in/blog/render-railway-alternatives-on-your-own-server) Render and Railway alternatives for 2026: run your apps on a VPS you own. How pricing compares, what you give up, and when Render or Railway still wins. Saurav Sharma Oct 15, 2026 7 min read ## Deploy to a server you own ox sets up systemd, Caddy and PostgreSQL on your Ubuntu server and deploys on every push. Free for your first project. [Sign up with GitHub](https://console.f1b10.testing.getox.in/login/github) [Read the docs](https://console.f1b10.testing.getox.in/docs)