305 one-click templates
Immich, Paperless, Authentik, Karakeep, Docmost and many more. Browse the expanded catalog and its runtime certification marks.
Explore the catalogPush a branch, get a healthy container behind TLS. NineDeploy builds it on a server you own, keeps the old version serving until the new one passes its healthcheck, and runs the databases, certificates and backups around it.
curl -fsSL https://ninedeploy.com/install.sh | bashapi.example.com
Try breaking it. Traffic stays where it is.
New in the 0.15 series
Immich, Paperless, Authentik, Karakeep, Docmost and many more. Browse the expanded catalog and its runtime certification marks.
Explore the catalogNixpacks and Railpack on nodes, dedicated build servers, sealed image transfer, node databases and opt-in Docker Swarm.
Explore multi-server deploysKeyDB and Dragonfly join the lineup, with Redis-compatible backups, imports and drills. Teams and Resend extend notification delivery.
Explore managed dataRedrawn here from the real dashboard, numbers moving. Everything on this page has a screen like these behind it.
System
Activity
Monitoring
Doctor
Docker
Servers
Users
Settings
Live Monitoring & Telemetry
Real-time host, cluster nodes, container metrics and alerts.
Host CPU
8 cores
load avg 1.07 · total 5.5%
Host memory
16%
2.7 GB / 16.8 GB
Disk storage
30%
117.5 GB free
Active workloads
11
8 services · 3 databases
n8n
n8n-75
CPU
0.60 %
Memory
346 MB
Directus
directus-77
CPU
2.63 %
Memory
232 MB
Next.js Demo
nextjs-demo-118
CPU
0.03 %
Memory
42 MB
Uptime Kuma
uptime-kuma-41
CPU
0.24 %
Memory
88 MB
IT-Tools
it-tools-38
CPU
0.02 %
Memory
15 MB
pg
postgres
CPU
0.03 %
Memory
74 MB
Host, node and per-container telemetry every few seconds, with limits you can change in place.
Triggered by the panel, a webhook, the CLI, a cron job or a template install. Ten stages, and your site stays up through all of them.
A worker slot claims the deployment atomically and snapshots the build config plus a fingerprint of your env keys — never the values.
→ deployment #48 queued · slot-1 claimed
Builds still marked building after 45 minutes are requeued on boot, so a panel restart mid-build recovers instead of leaving a ghost.
→ requeued 1 stale build on boot
Image deploys pull, and a rollback pins the exact digest. Repo deploys check out the commit with the token scrubbed from every log line.
→ checkout 9f3c1ab · creds scrubbed
Project vars, then service vars, then attached database URLs. Infisical and Doppler references resolve at deploy time and are never stored.
→ env: 14 keys · DATABASE_URL injected
Your Dockerfile through buildx, Nixpacks when there isn't one, PM2 on the host, or docker compose up --build. The manifest fills any gaps.
→ buildx · 11/14 layers cached
The new container starts with secrets from a 0600 env-file that's deleted right after start. The old container keeps serving.
→ api-green up · api-blue serving
Container liveness and an HTTP probe against the new container's network IP, retried with a fresh timeout per attempt for up to five minutes.
→ GET /healthz → 200 (3/3)
Only after the probe passes: pin the digest, assign the domain, flip Traefik, wait two seconds, then retire the previous container.
→ route flipped → api-green
If anything fails, the new runtime is torn down and the old one keeps serving. Only the deployment is marked failed — not your site.
→ deploy #49 failed · api-green still live
The pipeline re-reads its own status at every checkpoint and tears down partial work when you cancel.
→ deploy #50 cancelled at build
Triggered by the panel, a webhook, the CLI, a cron job or a template install. Ten stages, and your site stays up through all of them.
Swipe through the ten stages.
It replaces the docker run invocations, nginx vhosts, certbot cron jobs and pg_dump scripts — and the wiki page nobody updated since the last migration.
From a push, an image or a template to a healthy container — and back again by digest.
Create services with a wizard, stream a running deploy, cancel it, roll it back. The CLI speaks the same REST API as the dashboard.
npm install -g ninedeploy
ninedeploy login # authenticate against your panel
ninedeploy services create # interactive wizard
ninedeploy services deploy 12
ninedeploy deploys watch 12 480 # stream a running deployment
ninedeploy env set 12 NODE_ENV production
ninedeploy domains add 12 api.example.com
ninedeploy system dashboard # live health boardThe honest pitch: you get the managed-platform experience and keep the bill and the data of a box you rent.
| Capability | NineDeploy | Raw Docker | Managed PaaS |
|---|---|---|---|
| Your data stays on your server | Always | Yes | Vendor cloud |
| Zero-downtime deploys | Blue-green | DIY scripts | Yes |
| Managed databases and backups | 11 engines, S3 | Manual | Metered |
| Automatic HTTPS and wildcard domains | ACME DNS-01 | Manual proxy | Yes |
| AI agents can operate it | 62 MCP tools | Shell access | Varies |
| Price at 50 services | $0, your hardware | $0, your weekends | Per seat, per GB |
| Lock-in | None, MIT | None | Proprietary |
Start with one host, then add nodes for workloads, databases or builds. The panel keeps its state in SQLite; Docker Swarm is an optional orchestrator for services that need rolling updates and replicas. Upgrades snapshot your data first and gate on a health endpoint.
It is not Kubernetes, and doesn't pretend to be.
NineDeploy
Self-hosted deployment platform
Serial: your-server-01. Made by OXOGNET OÜ, Estonia.
Finding these out during an incident is worse than reading them here. The architecture doc tracks each one against the code and marks it when it closes.
Agent transport has no TLS of its own.
It fails closed and uses sealed operations, but keep worker nodes on a private network or VPN.
Node capabilities depend on the agent version.
Updated nodes support Nixpacks and Railpack. Missing capabilities or disabled node switches give an explicit refusal. PM2 remains on the panel host.
Remote health is container state, not an HTTP probe.
Probing would mean publishing ports on the node's public interface. The deploy log says so.
PM2 services have no blue-green window.
They stop, then start, with automatic rollback on failure.
One command, one admin account, one dashboard. The first account you create becomes the instance operator.
curl -fsSL https:/ / ninedeploy.com/ install.sh | bashRecommended for production on Linux. Provisions Node and Docker on Debian/Ubuntu, verifies the release checksum, and starts a hardened systemd service. Read the script