Deployment

The same images, five ways to install

Every Thulpar installation runs the same images and opens the same console. What differs is where the images come from and who operates them. The options are your own machine, your closed network, your Kubernetes cluster, a private instance we operate, or your Aginies deployment.

Install

One command, nine steps, one health gate

thulpar install runs the pre-checks and verifies every file and signature. It pins the images by digest, places the model weights with hashing and starts the services. It does not finish until every container is healthy; an interrupted install resumes with the same command.

Install simulation →
First run

The first-run wizard then opens in the browser.

Its steps are administrator, identity, licence, network, detectors, first tenant and evidence. The bootstrap token is single use and invalid after the first administrator. At the end the first tenant, policy template and API key are ready.

Wizard steps →
Network

There is no outbound connection at run time.

Services talk on the internal network. Only ghcr.io is reached during install and upgrade; an air-gap install needs no connection at all. Console 8050, api 8051, gateway 8053; Prometheus 9051/9053 on loopback only.

Network topology →
Licence

The licence file is uploaded in Thulpar’s console.

The same signed licence file applies on every install path. Clock-rollback protection and offline metering are built in. Embedded in Aginies, the licence file is still uploaded in Thulpar’s console.

Install options →
Options

Five install options

On-premise install

Organisations running their own data centre

How
The thulpar installer. Images are pulled with a customer-specific read-only registry token and pinned by digest.
Identity
The organisation’s OIDC provider. Local admin accounts serve as break-glass.
Licence
A signed licence file uploaded in the console
Network
Only the registry during install and upgrade. No outbound connections at run time.
  • One Linux machine with Docker Engine 24+ and Compose 2.20+ (amd64 or arm64)
  • The first-run wizard covers admin, identity, licence, network, detectors, tenant and evidence
  • Upgrade, backup, restore and rollback with the same tool

Air-gapped

Defence, public sector and critical infrastructure. Networks with no internet access.

How
One .tar bundle per architecture. It holds the install kit, every image, the model weights and the licence texts. It is verified by sha256 and the cosign signature.
Identity
Local admin accounts and TOTP. An in-network OIDC provider is used where one exists.
Licence
The same signed licence file. Clock-rollback protection and offline metering.
Network
No outbound connection. Model download is off and models arrive as a tar.
  • The vendor prepares the transfer media. Every file is re-hashed against the catalogue
  • An upgrade is a bundle too. It includes a pre-upgrade backup, a health gate and automatic rollback
  • Evidence packs verify offline (files and manifest.sig)

Kubernetes (Helm)

Platform teams with an existing cluster and a GitOps flow

How
The deploy/helm/thulpar chart. The restricted pod security standard, NetworkPolicies, Prometheus rules and the Grafana dashboard are included.
Identity
OIDC. The optional SPIRE profile provides workload identity.
Licence
The same licence file
Network
Egress is closed by NetworkPolicy. Model download runs only when explicitly enabled.
  • api and gateway scale horizontally. State lives in Postgres and Valkey
  • helm lint, kubeconform and a kind smoke test run in CI
  • The detector tier runs on its own (GPU) node pool

Managed private instance

Organisations with a data-residency requirement that do not want to run the infrastructure

How
A dedicated (single-tenant) install in verified data centres in Türkiye. Abra Partners operates it. The same images and the same console.
Identity
The organisation’s OIDC provider
Licence
Subscription. The licence file sits on the install.
Network
Private link or allow-listed TLS. The organisation’s endpoints and MCP servers are reachable by that organisation alone.
  • Moves to the organisation’s own servers when needed. A backup is taken, restored on the new host and the ledger recomputed
  • Abra Partners handles monitoring, upgrades and backups. Policy and evidence belong to the organisation
  • The shortest path to a pilot

Embedded in Aginies

Organisations on the Aginies Platform

How
Installed with the Aginies deployment. The Platform, Hub, Dialog, Voice and Code adapters call the check API from the executor hooks.
Identity
Platform SSO. A local admin serves as break-glass.
Licence
The same licence file, in Thulpar’s console
Network
Inside the Aginies network. No egress.
  • Policy applies from the executor hooks whatever the graph. A thulpar block is a convenience, never the only control
  • A hold lands on the Platform’s approval card. The run resumes on approval
  • The same console, ledger and evidence packs
Install

One command, nine steps, one health gate

The thulpar install output and the wizard steps, replayed in your browser.

sudo ./thulpar install --method registry --tier baslangic
host · compose project thulparedgedetectdatano route outweb:8050api:8051licence ✓gateway:8053detectorscpugpu adapteroptionalpostgresvalkey
Installer
1
Pre-checksDocker, Compose, tools, architecture, vCPU/RAM/disk, ports, clock sync, NVIDIA runtime
2
VerificationEvery kit file is checked against KIT.sha256. The bundle is checked against MANIFEST.json and the cosign signature
3
FilesThe kit goes into /opt/thulpar. The thulpar command goes on PATH
4
Configuration.env written in every folder. Every secret generated. A one-time bootstrap token issued
5
ImagesFrom the registry with the token, or docker load from the bundle. Every service pinned by digest
6
ModelsThe tier’s weights go into the thulpar_bundle volume. Every file is re-hashed against the catalogue
7
StartPostgres, Valkey, migrations, api, gateway, detectors, console
8
Health gateEvery container healthy. The api answering with this version. Every service on this version’s image
9
SummaryThe console address and the bootstrap token for the wizard
First-run wizard
WelcomeBootstrap tokenFirst administratorIdentityLicenceNetworkDetectorsFirst tenantEvidenceSummary
Simulation · thulpar install output and the wizard stepstimings illustrative
Installer
  1. Pre-checksDocker, Compose, tools, architecture, vCPU/RAM/disk, ports, clock sync, NVIDIA runtime
  2. VerificationEvery kit file is checked against KIT.sha256. The bundle is checked against MANIFEST.json and the cosign signature
  3. FilesThe kit goes into /opt/thulpar. The thulpar command goes on PATH
  4. Configuration.env written in every folder. Every secret generated. A one-time bootstrap token issued
  5. ImagesFrom the registry with the token, or docker load from the bundle. Every service pinned by digest
  6. ModelsThe tier’s weights go into the thulpar_bundle volume. Every file is re-hashed against the catalogue
  7. StartPostgres, Valkey, migrations, api, gateway, detectors, console
  8. Health gateEvery container healthy. The api answering with this version. Every service on this version’s image
  9. SummaryThe console address and the bootstrap token for the wizard
First-run wizard
  1. WelcomeVersion, image digests and the installation id
  2. Bootstrap tokenSingle use. Invalid after the first administrator
  3. First administratorLocal account + TOTP (the QR drawn in the browser)
  4. IdentityOIDC provider (discovery, client, role mapping). Local accounts as break-glass
  5. LicenceUpload the signed file. Covered tenants, term and metering are shown
  6. NetworkPublic address, trusted proxies, the egress allowlist (empty by default)
  7. DetectorsPick from the catalogue. The memory estimate is compared with the container’s limit. Model endpoints (your own vLLM)
  8. First tenantTenant, sector template, API key
  9. EvidenceRetention, anchor time, export profiles, signer key
  10. SummaryEvery step on the ledger as a config_change event
Requirements

One Linux machine, Docker and a tier

Operating system

Linux x86_64 or aarch64. Every image is published for both (an H200 server amd64, a DGX Spark arm64).

Docker

Docker Engine 24+ and Compose 2.20+. For older Compose, the stack script brings up the same containers.

Hardware

The Starter tier needs 8 vCPU, 16 GB RAM and 40 GB disk. The GPU tiers need 1 × 24 GB, 1 × 48 GB or 2 × 48 GB+.

Network

Only ghcr.io is reached during install and upgrade. An air-gap install needs no connection at all. There are no outbound connections at run time.

Identity

Your OIDC provider (discovery, client, role mapping). A local admin with TOTP as break-glass.

Ports

Console 8050, api 8051, gateway 8053. Prometheus 9051/9053 on loopback only.

Network

Services talk on the internal network. There is no outbound connection.

ORGANISATION NETWORK · CLOSED CIRCUIT Application / agentOpenAI SDK · thp_live_… MCP clienttools/list · tools/call Aginies Platformexecutor hooks THULPAR thulpar-gateway/v1/* · /mcp/:server · :8053 thulpar-api/v1/check · policy · ledger thulpar-detectorsCPU: ONNX, llama.cpp · GPU: vLLM console:8050 · OIDC Postgres · Valkeyledger · state Model endpointsvLLM · your own hosts MCP serversschemas pinned OIDC · SPIREusers · workloads evidence ledger · daily anchor · signed evidence packs · verify offlineKVKK · BDDK · SEDDK · public · EU AI Act · ISO 42001 · DORA INTERNET telemetry licence server vendor API remote generation × no connection at run time install only: ghcr.io · by digest or air-gap media ×
Operations

Upgrade, backup and rollback use the same tool.

An upgrade hands over to the new kit’s installer. The installer shows the notes, runs the gates, takes a pre-upgrade backup and passes the health gate. On failure it rolls back. A backup consists of pg_dump, the evidence directory and .env. It can be encrypted with AES-256 and protected with HMAC. A backup restores onto a fresh host. The ledger is then recomputed and verified.

Operations

  • thulpar status · backup · restore · upgrade · rollback · uninstall
  • Backup: pg_dump + evidence + .env, optionally AES-256 + HMAC
  • Restore works onto a fresh host too. The ledger is recomputed and verified

Monitoring

  • Prometheus /metrics on its own listener (api 9051, gateway 9053), loopback only
  • Alert rules (tested with promtool) and the Grafana dashboard in the kit
  • OpenTelemetry traces only when OTEL_EXPORTER_OTLP_ENDPOINT is set

Supply chain

  • Multi-arch images on GHCR by digest. An SBOM per architecture. cosign keyless signatures
  • Third-party images (Postgres, Valkey, vLLM, SPIRE) from the vendor’s mirror, byte-identical digests
  • Every checksum file signed. The kit verifies its own signature
$ thulpar status
thulpar 0.7.0 · build 1b55e3c · installed 2026-10-12 · tier baslangic
api ✓ gateway ✓ detectors ✓ (11 active · 4.1 GB / 12 GB) web ✓ postgres ✓ valkey ✓
licence ✓ ACME-2026-10 · 2 tenants · valid until 2027-10-11 · metering: fixed term
ledger ✓ last anchor 2026-10-19 00:00 UTC · nightly verification ok
$ thulpar backup --passphrase-file /root/.thulpar-bk   → /var/backups/thulpar/2026-10-19T0215.tar.enc
$ thulpar upgrade 0.8.0 --kit thulpar-kit-0.8.0.tar.gz  → notes · gates · pre-backup · health gate · (rollback on failure)
Kubernetes

A Helm chart with restricted pods and NetworkPolicies

The chart scales the api and the gateway horizontally. It places the detector tier on its own (GPU) node pool. It also carries the Prometheus rules and the Grafana dashboard. helm lint, kubeconform and a kind smoke test run in CI. The optional SPIRE profile provides workload identity.

helm install thulpar oci://ghcr.io/abrapartners/charts/thulpar \
  --version 0.7.0 -n thulpar --create-namespace \
  --set oidc.issuer=https://sso.corp.internal/realms/corp \
  --set models.download.enabled=false
Aginies

Thulpar installs with the Aginies deployment.

The Platform, Hub, Dialog, Voice and Code adapters call the check API from the executor hooks. Policy applies whatever the graph. Identity comes from Platform SSO. The licence file is uploaded in Thulpar’s console. A hold lands on the Platform’s approval card. Thulpar remains a separate product. The same images, kit and upgrade path apply.

aginies.com ↗

See it in your own environment.

A one-hour technical demo: your scenario, your policy pack, on a closed-circuit install. Then the install kit and a trial licence for a pilot.