The files
Create these two files in a working directory on the worker host (e.g.~/tigerstrike), then follow Run Docker below.
docker-compose.client.yml
.env.example
Prerequisites
- Linux VM with 8 vCPU / 16 GB RAM / 40 GB disk — see Requirements.
- Docker 24+ and the Docker Compose v2 plugin (
docker compose ...). - Outbound HTTPS (443) to your region’s API host and Docker Hub — see Outbound endpoints.
- A TigerGate dashboard account with permission to create API keys.
TIGERGATE_REGION in the .env above. Leave it unset for us1, the default, whose API host is api.tigergate.dev. See Regions.
You do NOT need to expose any inbound ports from the public internet. The worker is poll-based — it dials out to the platform and pulls jobs from the queue.
End-to-end setup flow
| # | Step | Where |
|---|---|---|
| 1 | Allow outbound HTTPS to your region’s API host and Docker Hub on the worker host | Network / firewall |
| 2 | Sign in to the TigerGate dashboard | Browser |
| 3 | Configure your LLM provider key (OpenAI / Anthropic / etc.) and test it | Dashboard → Pentest → Settings → AI Providers |
| 4 | Create an Organization API key, copy the tg_… value | Dashboard → Settings → Organization → API Keys |
| 5 | Create the two files above on the worker host; paste the key into .env | Worker host (shell) |
| 6 | docker compose -f docker-compose.client.yml up -d and verify via logs | Worker host (shell) |
| 7 | Confirm the worker shows up in Pentest → Scanners (/pentest/scanners) | Dashboard |
| 8 | Create a target + scan config and pick your self-hosted worker as the runner | Dashboard → Pentest → New Scan |
| 9 | Trigger the scan; findings stream into Pentest → Scans | Dashboard |
Run Docker
Create the files
Save
docker-compose.client.yml and .env.example (from The files above) into a working directory:Paste your TIGERGATE_API_KEY into .env
TIGERGATE_API_KEY=tg_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx. See §4 below if you don’t have one yet.network_mode: host, so the port is on the host directly.
Upgrades: bump the image tag in docker-compose.client.yml and re-run docker compose -f docker-compose.client.yml up -d. In-flight scans drain on a 30-second SIGTERM grace period.
Stop / remove:
Run on Kubernetes
Prefer a cluster? The worker runs as a single Deployment with a privilegeddocker:dind sidecar — managed clusters (EKS / GKE / AKS) run containerd, not Docker, so the sidecar hosts the per-scan sandboxes (both containers mount the volumes at identical paths).
tigerstrike.yaml
This variant keeps all state on the node’s local disk (
emptyDir) — no PVC or StorageClass needed, and it’s the right choice when your default StorageClass is a network filesystem (EFS / NFS / Azure Files), where DinD’s overlay store is slow and races. Schedule it onto a node with ~30 GB free ephemeral storage. DinD needs a privileged pod — if Pod Security blocks it, label the namespace: kubectl label ns tigerstrike pod-security.kubernetes.io/enforce=privileged.Create a target and scan config
Targets and scan configs are created in the TigerGate dashboard — not on the worker host. The worker just executes whatever the platform sends it.Sign in
Go to your region’s dashboard — app.tigergate.dev on
us1 — or your private dashboard URL.Open Pentest → New Scan
Pick a target type:
- Web app — full-app crawl with auth
- API — REST / GraphQL / SOAP, with optional bearer / OAuth
- Codebase — scan a repo on disk for code-aware findings
Set target details
| Field | Notes |
|---|---|
| Target URL | Public: https://staging.example.com. Internal: any URL the worker host can reach (https://10.0.5.12:8443). |
| Private codebase | Drop the repo on the worker host at /var/lib/tigerstrike/codebase/<name> and reference that path. (Public Git URLs the worker clones itself.) |
| Scope | auth, api, auth+api, or full |
| Max duration | Wall-clock cap in minutes |
| Per-scan budget (USD) | Hard ceiling for LLM spend on this scan |
| Runner | Pick your self-hosted worker |
Where to configure the LLM API key
The LLM API key is configured once per organization in the dashboard — not on the worker host. The platform injects it into each scan job at runtime, so the worker host never has the LLM key on disk.Open Pentest → Settings → AI Providers
Click Add provider and pick one of:
- OpenAI (
gpt-4o,gpt-4o-mini, …) - Anthropic (
claude-opus-4-x,claude-sonnet-4-x, …) - Google Gemini
- Self-hosted / OpenAI-compatible endpoint (set the base URL)
- Azure OpenAI (set deployment name)
Paste your provider API key and click Test
TigerGate makes a tiny live call to confirm it works. Failed tests surface the upstream provider’s error so you can fix it (bad key, missing model access, etc.).
(Optional) Set a monthly spend budget
Under Pentest → Settings → Budgets so a runaway scan can’t burn through your quota. See Budgets & spend.
The provider key is stored encrypted at rest in TigerGate. It is sent to the worker only as part of an active scan job and never written to disk on the worker host.
How to get a TigerGate API key
The worker authenticates to the platform with an Organization API key (tg_…).
Rotation: create a new key, update
.env, run docker compose -f docker-compose.client.yml up -d, then delete the old key in the dashboard. The worker reconnects with no scan loss.
Scope: the key is scoped to your organization. See API keys.