Files

5.3 KiB

Running ServerKit alongside another control panel

Plan 27. The honest answer to "can this panel manage / migrate my existing box?" — including what it will and won't do while another panel is still in charge.

ServerKit has three explicit adoption modes. Pick the one that matches where the box is today; you can move between them as you migrate.

1. Observe — read-only, safe to run anywhere

Install the agent on any Linux box, including one still run by another control panel, and set the server to Observed. You get:

  • Metrics — CPU / memory / disk / network, like any paired server.
  • A read-only survey ("flight") — a map of what's running: web servers and their virtual hosts (domain → document root / upstream), databases, TLS certificates, cron jobs, listening ports, and a flag if another control panel is detected. See the read-only guarantees below.
  • Doctor probes — the read-only health checks.
  • Backups of paths you explicitly point at.

You do not get, by design:

  • Site creation or web-server config writes.
  • Any mutating server-targeted action. These are refused server-side — the server list and detail page show an Observed chip and a read-only banner, and the agent command choke point returns a clean refusal rather than letting two panels fight over the same files. Every refusal is recorded in the server's audit trail, and the Survey tab shows a blocked-commands counter.
  • Agent binary updates. Observe mode covers the agent itself: agent:update is refused too, so observing never silently re-flashes the box. If you do want to keep the agent current while observing, set the per-server "allow agent updates while observing" break-glass on the Survey tab — an explicit, audited opt-in, off by default.

What an Observed server still allows (all reads): system metrics/info/processes, Docker/compose list/inspect/logs/stats, file read/list within allowed paths, the survey, doctor probes, agent:recapabilities (capability re-discovery), and backups of paths you point at.

Why the hard line: two panels writing the same web-server config (nginx / Apache vhosts, PHP-FPM pools, TLS) will overwrite each other and eventually break the site. That scenario is never supported. Observe mode exists precisely so you can adopt a box for visibility without stepping on the panel that currently owns its config.

Detection only ever suggests. If the survey finds another panel's marker, ServerKit shows a one-click "switch to Observed" prompt — it never flips a managed server automatically, and it never downgrades an existing managed box.

The survey's read-only guarantees

The survey is driven by a shipped, versioned probe catalog you can read in full (the Survey tab's "What we check" view lists every location verbatim). The agent enforces the trust boundary with a fixed allowlist of read-only primitives — file-exists, glob, unit status, socket list, process list, and parse-light extraction of a few config directives (server_name, root, proxy_pass, and equivalents). Concretely:

  • Credential and environment files are listed by path only — never read.
  • No file contents leave the box beyond those parse-light directive lines.
  • The catalog can only combine those primitives; it can never name a command to run. A compromised panel can at worst enumerate paths — never execute.

Full agent contract: AGENT_SURVEY_SPEC.md.

2. Migrate — the guided path off the other panel

When you're ready to move a site onto ServerKit:

  1. Survey the box (Observe mode) so you can see every site, its document root, and its databases.
  2. Import each site. From the Survey tab, "Migrate this site" pre-fills the import wizard with the domain and document root. Imports cover files + MySQL databases + database users (password hashes preserved) + crontabs — from a control-panel backup archive, or a live pull over SSH for panel-less boxes. Mail accounts and DNS zones are not migrated (they stay on the source until moved separately).
  3. Verify on ServerKit using a staging domain / basic-auth before touching public DNS; WordPress sites get the URL-swap tool for post-move URL fixes.
  4. DNS cutover, reversible per domain. Before changing any record, ServerKit snapshots the domain's existing records (name / type / content / TTL). Lower the TTL a step ahead, switch the record, verify propagation, and revert from the snapshot in one click if anything looks wrong.
  5. Decommission. Once every surveyed site is migrated, ServerKit shows a checklist: what to stop on the old box, what to keep until TTLs expire, and when it's safe to wipe.

3. Manage — full takeover on a clean box

Today's normal mode: ServerKit owns the box and manages the web stack end to end. This is the right mode for a fresh server, or for one you've finished migrating off its previous panel and cleaned up.

What is never supported

  • Two panels writing the same web-server config. Keep exactly one owner of nginx/Apache/PHP-FPM/TLS per box. Use Observe (read-only) until ServerKit is that single owner.
  • Mail and DNS-zone migration are not part of v1 imports (the future path is the mail extension + DNS zone rails).