Open source ยท Self-hosted
Ship to your
own server.
Deku turns a Linux server into your own hosting platform. Deploy with one command and get HTTPS, databases, backups and rollbacks, without paying per app.
curl -fsSL https://get-deku.vercel.app/install.sh | sudo bash$ deku apps create shop
Created app 'shop'
$ deku postgres create shop-db
$ deku postgres link shop-db shop
Linked 'shop-db' to 'shop'.
$ deku deploy run shop --path ./shop
[deploy.release]
[deploy.health_checking]
[deploy.replica_ready]
[deploy.live] https://shop.example.com
Why Deku
What a hosting platform does, on a server you own.
Use whichever fits the moment: the CLI, the dashboard, or the HTTP API.
Deploy the way you already work
Send a project folder, a Docker image, or git push. Deku builds it, starts it, and serves it on your domain.
deku deploy run shop --path .Undo a bad release with one command
Every deploy is kept. If something looks wrong after a release, put the previous version back.
deku deploy rollback shopHTTPS without the busywork
Add a domain and point it at your server. Deku gets its certificate and keeps it renewed. Redirects, maintenance pages and password protection are settings, not config files.
deku domains add shop shop.example.comDatabases in one command
Run Postgres, MySQL, MariaDB, Redis or MongoDB next to your app. Linking one gives the app its connection URL.
deku postgres link shop-db shopBackups you do not have to remember
Schedule encrypted backups to any S3-compatible storage, and restore one when you need it.
deku backup schedule shop-db --keep 7Room to grow
Add copies of the app, set memory and CPU limits, run scheduled jobs, and give staging its own settings.
deku ps scale shop web=3
How a deploy works
A broken deploy never reaches your users.
Your current version keeps serving until the new one has passed every step. If any step fails, nothing changes.
- 01
buildBuild
Deku builds your Dockerfile, or works out how to build the app when there is none.
- 02
deploy.releaseMigrate
Your release command runs next. If a migration fails, the deploy stops here.
- 03
deploy.health_checkingCheck
Every new copy of the app has to answer its health check before it gets traffic.
- 04
deploy.liveSwitch
Traffic moves to the new version. The old one stays ready if you need to roll back.
The dashboard
Watch it go live from the browser.
Your apps, deploys, logs and services in the browser. It updates live, so a deploy you start from your terminal plays out on screen.

- Every step as it happens
See the build, the migration and the health check, with the output streaming underneath.
- The command for every button
Each action shows the CLI command that does the same thing, so you can script it later.
- Problems at the top
A failed deploy or a host that needs attention is the first thing you see, with what to do about it.
Secure by default
Locked down before you change a setting.
- The dashboard is not public
It only answers on the server itself. Open it through an SSH tunnel, or serve it over HTTPS on your own domain.
- Databases are not exposed
Apps reach them over a private network. No database port is opened on the server.
- Apps are only reachable through the proxy
So password protection and maintenance pages cannot be bypassed.
- Secrets are encrypted
Config values and backups are encrypted with a key that setup creates for you.
- A restart never leaves a half-finished deploy
If the server restarts mid-deploy, Deku cleans up and the previous version keeps serving.
- Downloads are checked
The installer verifies every download before it runs, and refuses a signed release whose signature does not match.
Requirements
All you need is a Linux server.
Ubuntu 22.04 or later, or Debian 11 or later, with Docker Engine 24+, 512 MB of memory and root access. One command installs everything else.