Skip to content

Deploy to servers you own. Stay in control.

A free deploy platform for your Docker servers: Git or image, verified releases, databases and backups. Bring your AI agent over MCP or the CLI if you like.

curl -fsSL https://nebulactrl.com/install.sh | sudo bash

Paste it on a Linux server as root. Read the script or see what it changes first.

The NebulaCtrl dashboard: the production canvas of a project called Acme Shop, with the web, api and postgres services live behind the public domain shop.localhost.

Every release proves itself01

A new release takes traffic only after it passes.

A rolling deploy starts the new container beside the old one and moves traffic only after its health check passes. If the check fails, the old release keeps serving.

Services with volumes recreate instead, with a short downtime. How deployments work

Which recorded deployment to replay
DeploymentNot running

Serving the current release.

EventsLast run
  1. 0.1Pull image startedPulling traefik/whoami:latest
  2. 0.4Pull image succeeded
  3. 0.5Create container startedCreating container nc-web-f9db9596-0
  4. 0.9Create container succeeded
  5. 0.9Start container started
  6. 1.0Start container succeeded
  7. 1.0Health check startedChecking health (http)
  8. 3.1Health check succeeded
  9. 3.2Move the route startedUpdating proxy routes
  10. 3.4Move the route succeeded
  11. 3.4Verify through the proxy startedVerifying http://shop.localhost/ through the proxy
  12. 3.4Verify through the proxy succeeded
  13. 3.4Retire previous release startedRetiring previous release
  14. 5.6Retire previous release succeeded

Bring your AI agent02

Your agent does the work. Over MCP, production waits for you.

Your agent runs in its own client and connects over MCP or the CLI. Over MCP, edits stage until they are applied, and production changes wait for a person to approve them.

The instance admin switches MCP on. The dashboard has no AI of its own. MCP reference

An AI agent, connected to NebulaCtrl over MCP from its own client, writes a nebula.toml, plans it and stages it. When it asks to apply the change to production, NebulaCtrl shows an approval page and waits for a person to approve. Then web deploys and goes live.

Stop the control plane03

Turn it off. Your apps keep serving.

The control plane never stops containers on your servers while it is down, restarts and upgrades included. When it is back, each agent reports what is running and the control plane reconciles it.

The control plane

Terminalcontrol plane host
cd /opt/nebulactrlsudo docker compose stop nebulactrlcurl -sI https://shop.example.com | head -1# the shop still answers: its container and the proxy kept runningsudo docker compose start nebulactrl# each agent reconnects and reports what is running

Keeps running

  • Every container on your servers
  • The proxy on each server

Waits until it is back

  • The dashboard and deploys
  • Logs and metrics in the interface
  • A backup slot that came due

Comes with it04

The rest of a platform, already in the box.

What you would otherwise glue together yourself, on the same servers.

The deployments of a service after a rollback: the rollback to ghcr.io/acme/shop:1.3 on top and live, and earlier releases, each with a Rollback to this release button.

Roll back

Rolling back creates a new deployment of an earlier release. It restores the image and configuration; databases and volumes are not rolled back. Deployments

A server's agent opens the connection to the control plane, so managing it needs no inbound port. Visitors of a public site reach the server's proxy on ports 80 and 443.

Servers dial out

A small agent opens the connection to the control plane, so a box behind your home router is managed like a VPS. Public sites still need ports 80 and 443, or a Cloudflare Tunnel. Add a server

The seven database engines: Valkey, the default, then PostgreSQL, MySQL, MariaDB, Redis, MongoDB (opt in) and ClickHouse. Backups go to S3 compatible storage or a directory.

Databases and backups

Seven engines, with Valkey as the default key value engine. Backups run on a schedule to S3 compatible storage or a directory, and restore into a new or the same database. Database backups

Two routes of a service: a public domain with a certificate and a Cloudflare DNS record, and a hostname on a tailnet with no public port.

Domains, DNS and tailnet

A domain gets a Let's Encrypt certificate. With Cloudflare connected, its DNS records follow the service. Or keep a service on your tailnet, with no public port. Cloudflare, tailnet

One component of a public status page: web, operational, with a bar of its last 90 days, one day a month ago slightly degraded.

Uptime and status pages

Every service is probed from its own server every 30 seconds, with an alert when it goes down and when it recovers. A status page on your own hostname shows 90 days. Uptime, status pages

The uninstall command: it stops NebulaCtrl and your containers keep running.

Leaving is easy

Your services are plain Docker containers, and their data sits on your own disks. Uninstalling stops NebulaCtrl and leaves your containers running. Uninstall

Questions05

Before you run the installer.

What do I need?
One Linux machine with systemd and root access: Debian 12 or 13, Ubuntu 22.04, 24.04 or 26.04 LTS, or RHEL, Rocky or AlmaLinux 9, on amd64 or arm64, with 1 GB of RAM for the control plane. The installer adds Docker 24 or newer if it is missing. Ports 80 and 443 should be free. A domain is optional: without one the dashboard is plain HTTP on port 8000 until you add one. Requirements
What does the installer change?
It installs Docker if needed, applies safe daemon defaults (log rotation, live restore), starts Postgres on a private network and the control plane, sets up ufw, fail2ban and unattended security updates, and schedules a daily backup. Every step has a flag to skip it, it keeps your existing Docker settings, and it never changes SSH settings. To upgrade, run it again, with --version to pin a release; to go back, run it with the previous version. The uninstaller keeps your apps and data unless you ask otherwise. Read the script before you run it, or see what each step does and how to upgrade and roll back.
Is it ready for production?
It is young, so start with something you can afford to move. There is a single control plane with no automatic replica promotion, the Cloudflare and Tailscale paths have been tested against simulated APIs and not a live account, and the limitations page lists everything it does not do. Your apps keep running if the control plane goes down. The agent runs as root, because the Docker socket is root equivalent, and NebulaCtrl assumes a trusted team: roles limit what people can do in the product, not what a compromised host can do. The threat model has the rest.
Do I need an AI client?
No. An agent can use the CLI, or the MCP server, which is off until you enable it and create a scoped token. MCP goes through the same checks as the dashboard, edits stage until applied, a person approves any change to production, and every call is audited. The dashboard has no AI of its own. The docs are also published as llms.txt and as markdown per page for the agents that read them. MCP reference
What happens when the control plane is down?
Your apps keep running and the proxy on each server keeps serving traffic: the control plane never stops remote containers while it is down, and that includes restarts and upgrades. What you lose until it is back is the dashboard, deploys, logs and metrics in the interface. When it returns, each agent reconnects, reports what is running and the control plane reconciles it against what you asked for. A backup slot that came due while it was down runs as soon as it is up. The control plane, servers and the reconciler
Who owns my data?
You do. It lives in a Postgres database on your control plane host and in Docker volumes on your servers. Variables are encrypted with AES-256-GCM under a key that exists only on your host and is never part of a backup. Backups go to a directory or an S3 bucket you choose. The threat model lists what is protected and what is not.

All the questions

Try it on a server you already have.

Free. No sign-up, no licence key. Uninstalling leaves your containers running.

curl -fsSL https://nebulactrl.com/install.sh | sudo bash

FAQHow it compares