Programs

Unified Launcher

The single entry point that bootstraps every KillTheHost service and serves the control panel on http://localhost:5000.

Overview

The launcher is a Python script that orchestrates docker compose under the hood. When you run ./launch.sh (or launch.bat on Windows), it:

  1. Verifies that the docker daemon is reachable.
  2. Pulls service images (first run only) and applies any pending database migrations.
  3. Starts each program in dependency order: DB-3NGIN3 MAIL-SRVR PHP-MNGRSTAX-MNGR.
  4. Serves the control panel at http://localhost:5000.
  5. Optionally opens a Cloudflare tunnel and synchronizes Namecheap DNS records if those integrations are enabled.

Service lifecycle

The launcher is long-running and acts as a supervisor. Send SIGTERM (Ctrl+C) to trigger a graceful shutdown — each program drains pending work and then exits.

CLI flags

FlagDescription
--stopStops every KillTheHost service and exits.
--restartStop and then start everything again, useful after upgrades.
--pullPulls the latest service images without starting them.
--pruneRemoves unused KillTheHost docker images and volumes.
--port <n>Override KTH_PORT for this run only.
--debugEquivalent to KTH_LOG_LEVEL=debug.
bash
$./launch.sh --restart --debug
$./launch.sh --port 5173

Control panel

The control panel is the browser-based UI served by the launcher. It is the recommended way to interact with KillTheHost — nothing needs to be edited by hand.

Panel tabs

  • Dashboard — health of each program, current tunnel status, DNS sync status, recent log lines.
  • Projects — manage PHP projects via PHP-MNGR.
  • Databases — create and browse instances across five engines via DB-3NGIN3.
  • Mail — mailbox management and DKIM/SPF/DMARC status via MAIL-SRVR.
  • Stacks — import, start, stop and monitor docker compose stacks via STAX-MNGR.
  • Integrations — configure Cloudflare and Namecheap credentials.
  • Settings — panel port, log level, update schedule.

Logs & health

All services stream into the launcher’s console. Per-service logs are also written to disk:

data/logs/
data/logs/
├─ launcher.log
├─ db-3ngin3.log
├─ php-mngr.log
├─ mail-srvr.log
├─ stax-mngr.log
└─ cloudflared.log

The panel exposes a one-click Download logs button that packages these files into a single zip — paste the archive when you file a GitHub issue.