# Installation

Run KestrelOS from source (npm), Docker, or Kubernetes (Helm).

## npm (from source)

```bash
git clone <repository-url> 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.
