deku: 9MB, dekud: 16MB, dashboard bundle: 848 KB
Deku is a lightweight self-hosted PaaS for deploying and operating applications on your own server.
It combines:
- A Rust CLI:
deku - A Rust daemon:
dekud - Docker for app and service containers
- Angie for routing and TLS
- A built-in dashboard served directly by the daemon
The current workflow is intentionally practical:
- Install Deku on a Linux server
- Create an app
- Start from a local starter template when you want a ready-made app skeleton
- Deploy from a source directory or image
- Manage config, domains, TLS, scale, logs, services, storage, networks, and cron from the CLI or dashboard
- App lifecycle: create apps, deploy from source archives or images, inspect deployment history, and roll back when needed
- Starter templates: begin from local framework templates adapted for Deku deploys
- Runtime management: manage config vars, domains, port mappings, TLS, process scale, logs, networks, storage mounts, and cron entries
- Built-in services: provision Postgres, Redis, and MySQL services and link them to apps
- Operational visibility: use the dashboard for app, routing, service, object-store, SSH-key, and plugin workflows
- CLI-first workflows: use
dekufrom the terminal for setup, deploys, inspection, and automation-friendly operations
Requirements:
- Linux server with
apt-getavailable - Ubuntu 22.04+ or Debian 11+
- Docker Engine 24+
- 512 MB RAM minimum
- Root access
Install on the server:
curl -fsSL https://get-deku.vercel.app/install.sh | sudo bashUninstall guidance, including deku uninstall, lives in docs/src/content/docs/installation.md.
After install:
deku dashboard
deku apps create my-app
deku deploy run my-app --path /absolute/path/to/appNew installs bind Deku's optional SSH deploy server to port 2222 by default so the API/dashboard can coexist with a standard host sshd on port 22.
Useful follow-up commands:
deku apps info my-app
deku deploy list my-app
deku logs my-app -n 100
deku ps list my-app
deku checks run my-app
deku checks routing my-appThe dashboard is served by dekud itself.
Run:
deku dashboardThat prints:
- The server-reachable dashboard URL
- The local loopback dashboard URL for on-host access
- The config path
- The token status
- SSH tunnel and firewall guidance for remote access
- The reset-token command if you need a replacement token
The initial token is shown once during deku setup or deku dashboard reset-token.
The dashboard and authenticated HTTP API listen on TCP port 2810 by default. If your browser is on another machine, either use an SSH tunnel or allow 2810/tcp through your firewall.
Deku currently includes first-party built-in service workflows for:
- Postgres
- Redis
- MySQL
These services can be created, linked to apps, inspected, and tailed from the CLI and dashboard.
Postgres and Redis also support persisted backup workflows through the configured object store.
Deku supports:
- Image deploys via
deku deploy run <app> --image <ref> - Source deploys via
deku deploy run <app> --path <dir> - SSH
git pushdeploys as a supported secondary path
Starter templates live under templates/ in this repository. They are adapted for Deku's dockerfile and nixpacks deploy paths.
Rollout behavior is controlled by deku.toml:
[deploy]
healthcheck = "/health"
port = 3000
wait = 5
timeout = 30
attempts = 5
retire = 60Those settings are applied by the live deploy pipeline, not just stored as metadata.
crates/deku: CLIcrates/dekud: daemon and HTTP APIcrates/deku-core: shared types and auth utilitiesdashboard/: Astro + React dashboarddocs/: Starlight documentation siteplugins/: first-party plugin crates plus dynamic plugin runtime supportscripts/: installer, release packaging, and smoke teststemplates/: local starter app catalog for common framework deploys
Common verification commands:
cargo fmt --all -- --check
cargo clippy --workspace --all-targets --all-features -- -D warnings
cargo test --allFull local CI gate:
./scripts/ci-local.shFrontend and docs:
cd dashboard && bun install --frozen-lockfile
cd dashboard && bun run lint
cd dashboard && bun run check
cd dashboard && bun run build
cd docs && bun install --frozen-lockfile
cd docs && bun run check
cd docs && bun run buildThe dashboard build output lives in dashboard/dist. Packaged installs consume that output through the release deku-dashboard.tar.gz artifact rather than embedding a compiled dashboard snapshot into dekud.
MIT