Sanari
sanari.ai

Sanari · deployment

Package and readiness

What we ship, what they must have, on-prem vs cloud. Bajaj is on-prem / hybrid: Jira Data Center does not live in our SaaS.

System architecture

Where it runs. Bajaj: skip the cloud strip. Hybrid: UI may sit above the perimeter.

  • Operator
  • Hybrid UI
  • Customer DC
  • Query
  • Execute
OPERATORS · CORP NETWORKBrowser · HITLSSO · Entra / AD FSCAB types APPROVENo Sanari agent on laptopsSANARI CLOUD · HYBRID ONLY · SKIP FOR BAJAJ ON-PREMsanari-ui (optional)License / heartbeatTLS out from DC. No inbound punch.DC PERIMETER · INBOUND WEBHOOK DENIED · OUTBOUND 443 OPTIONALSANARI RACK · COLLECTOR HOSTsanari-uiCase · blast · APPROVEsanari-collectorPoll · index · orchestratesanari-workerExecute after APPROVE8B runtimellama.cpp / vLLM · GPU optionalPostgreSQL 16 + pgvectorCases · RAG · graph cacheCompose on 1 VM (pilot) or k8s ns (20+)Vault path for runbook creds · SSO group for APPROVEENTERPRISE SYSTEMS OF RECORDJira Data CenterServiceNowPrometheus / DynatraceELK / OpenSearchGitLab / BitbucketConfluenceVaultAnsible / K8sQuery: Jira · Snow · Prom · ELK · GitExecute: Vault checkout → Ansible / SQLWe do not ingest the log lake or mirror Git.Git read at deploy SHA for API-failure hints.queryexecute

What is in the package

PartFormRole
sanari-uiContainerControl plane: inbox, case, blast, APPROVE, allow-list, audit.
sanari-collectorContainerPollers, adapters, indexer, 8B client, case orchestrator.
sanari-workerContainerAllow-listed execute after HITL. Vault checkout. Ansible / SQL / systemd.
PostgreSQL 16 + pgvectorContainer or their existing PGCases, vectors, graph cache, case memory.
Local 8B runtimellama.cpp or vLLM + pinned GGUFClassifier, RCA prose, Jira comment, possible-fix. Optional GPU.
Prompt packVersioned files (vN) + GBNF schemasclassify / rca / comment / hint. Hash in the audit line.
Runbook packYAML, allow-listedkill-session, restart-api, rollback-api. Restart-db off.
InstallCompose + HelmSame images. On-prem namespace or two VMs.

Also: SBOM, image hashes, prompt-pack hash, runbook checksum. Air-gap bundle is the same tarball minus outbound license ping.

Sizing

AppsComputeGPUNote
2–5 (pilot)1 VM · 8 vCPU · 32 GB · 200 GB diskNone (CPU 8B) or 1× T4/L4Collector + UI + Postgres together.
202 VM or 1 small k8s ns · 16 vCPU · 64 GB1× L4Split poller vs 8B if embed jobs fight CPU.
100k8s · collector replicas · 32 vCPU · 128 GB1× L4/A10Optional Qdrant. Graph still Postgres until blast is slow.

On-prem (Bajaj default)

Collector, UI, Postgres, and 8B in their DC. No inbound webhook from the internet. Tickets and SQL never leave the farm.

  • Network path: collector → Jira DC, Snow, Prom/DT, ELK, Git, Vault, Ansible (egress inside DC).
  • No inbound from Sanari cloud required. Optional outbound for license/heartbeat only.
  • Service accounts: Jira project BAU (comment + transition), Snow incident (work notes).
  • Vault (or CyberArk) path for DB and job-template creds. Short-lived. Worker stores nothing.
  • SSO (Entra / AD FS) groups for who may type APPROVE.
  • NTP, DNS, backup of Postgres, pinned GGUF on local registry or air-gap bundle.
  • Change record: first two runbooks in CAB. Restart-database stays off.

Cloud / hybrid

Sanari is not a full SaaS for Jira Data Center. Cloud means the control plane may sit in our VPC; the collector still sits in theirs.

  • Hybrid (typical): UI in Sanari cloud; collector + 8B + Postgres in their DC. TLS out, no inbound punch.
  • Full SaaS only if Jira Cloud + all evidence already SaaS — not this tenant.
  • Data residency: India collector = India data. Do not stream tickets to a US model API.
  • Same service accounts and Vault as on-prem. Same HITL.
  • Their firewall: outbound 443 to Sanari control plane (session, not bulk logs).

Readiness checklist

Required vs not. GPU and k8s are optional on the 5-app pilot. Public inbound is never required.

ItemOn-premCloud / hybrid
Jira DC project + bot account (comment, transition)RequiredRequired
ServiceNow subprod table incident (work notes)RequiredRequired
Prometheus or Dynatrace query user (read)RequiredRequired
SSO group for APPROVERequiredRequired
Vault/CyberArk path for runbook credsRequiredRequired
Deploy-key read on payments-api (API-failure hints)RequiredRequired
GPU for 8B (optional on pilot; CPU works)Not requiredNot required
Kubernetes namespace (optional; Compose is enough for 5 apps)Not requiredNot required
Public inbound webhookNot requiredNot required
Install OneAgent / extra APMNot requiredNot required

Component map: architecture.