# Installation Run KestrelOS from source (npm), Docker, or Kubernetes (Helm). ## npm (from source) ```bash git clone kestrelos cd kestrelos npm install npm run dev ``` Open **http://localhost:3000**. First run creates `data/kestrelos.db` and bootstraps an admin (see [Authentication](auth.md)). **Production:** ```bash npm run build npm run preview # or node .output/server/index.mjs ``` Set `HOST=0.0.0.0` and `PORT` for production. ## Docker ```bash docker build -t kestrelos:latest . docker run -p 3000:3000 -p 8089:8089 \ -v kestrelos-data:/app/data \ kestrelos:latest ``` Expose ports **3000** (web/API) and **8089** (CoT for ATAK/iTAK). ## Helm (Kubernetes) **From registry:** ```bash helm repo add keligrubb --username USER --password TOKEN \ https://git.keligrubb.com/api/packages/keligrubb/helm helm install kestrelos keligrubb/kestrelos ``` **From source:** ```bash helm install kestrelos ./helm/kestrelos ``` Configure in `helm/kestrelos/values.yaml`. Health: `GET /health`, `/health/live`, `/health/ready`. ## Environment Variables | Variable | Default | Description | |----------|---------|-------------| | `HOST` | Nuxt default | Bind address (use `0.0.0.0` for all interfaces) | | `PORT` | `3000` | Web/API port | | `DB_PATH` | `data/kestrelos.db` | SQLite database path | See [Authentication](auth.md) for auth variables. See [ATAK and iTAK](atak-itak.md) for CoT options.