Overview
Full on-premises deployment runs all Navigara components in your infrastructure. Source code, analysis results, and all metadata stay within your network.Architecture
A full deployment consists of three infrastructure components:- Linux VM: runs the Navigara application (backend, frontend, collector) via Docker Compose
- Managed PostgreSQL: stores all application data including vector embeddings (requires pgvector extension)
- LLM API endpoint: Anthropic, OpenAI, or Google Vertex AI API for AI-powered commit analysis
- Navigara license key: JWT issued by Navigara that unlocks analysis features (see License Key)
Prerequisites
Linux VM
The VM runs all Navigara application containers via Docker Compose. Operating system: Ubuntu 24.04 LTS or Debian 13+ (other systemd-based Linux distributions may work but are not officially supported) Required software:- Docker Engine 24+
- Docker Compose v2+
Managed PostgreSQL
A managed PostgreSQL instance with the pgvector extension enabled. All major cloud providers support this:- AWS: Amazon RDS for PostgreSQL with pgvector
- GCP: Cloud SQL for PostgreSQL with pgvector
- Azure: Azure Database for PostgreSQL with pgvector
- Self-managed: PostgreSQL 18+ with pgvector extension installed
uuidv7())
Required extension: pgvector (vector similarity search for knowledge graph analysis)
License Key
A full on-premises deployment requires a license key issued by Navigara. Contact your Navigara account representative with the domain you intend to host Navigara on (e.g.navigara.yourcompany.com) to obtain one. Set it as LICENSE_KEY in secrets/backend.env.
LLM API Endpoint
Navigara requires an LLM API endpoint for AI-powered commit analysis. Supported providers: Analysis uses two models. The knowledge agent classifies every commit and is most of the token spend, so it runs on a small fast model fromLLM_MODEL_AGENT_KG. Summaries and the rest of the pipeline are low volume and run on the stronger model in LLM_MODEL. Leave LLM_MODEL_AGENT_KG unset and the knowledge agent falls back to LLM_MODEL.
The endpoint must be reachable from the VM. For air-gapped environments, a locally hosted model with an OpenAI-compatible API (e.g. vLLM, Ollama) can be used. Contact support for guidance.
- Anthropic (Recommended)
- Google Vertex AI
- OpenAI
- Self-hosted (OpenAI-compatible)
LLM_API_URL is required. Claude Haiku 4.5 costs half as much per token as Claude Sonnet 5, and the knowledge agent is most of the traffic. Drop LLM_MODEL_AGENT_KG to run everything on Claude Sonnet 5 instead.For Azure AI Foundry, internal API gateways, or other Anthropic-Messages-API-compatible endpoints, set LLM_API_URL to that endpoint. Do not include /v1 in the URL; the SDK appends /v1/messages itself.Network Requirements
The VM must have outbound access to the following services. Ensure your firewall rules allow these connections:Hardware Requirements
- Small (up to 500K commits)
- Medium (up to 5M commits)
- Large (up to 50M commits)
Suitable for small to mid-size engineering teams.
Knowledge graph data and vector embeddings drive the disk requirement.
Installation
1. Prepare the VM
Install Docker from Docker’s own package repository.- Ubuntu
- Debian
Do not use the
get.docker.com convenience script. Docker does not support it for production installs.2. Verify the release
Navigara publishes, for every release, a signature, a software bill of materials (SBOM), and build provenance for each image. Verify them before you deploy. Install cosign, then verify each image at the digest you intend to run. Your account representative provides the digests for your release, and they are listed in step 5.vision-collector and vision-fe. Then read the provenance and the SBOM, which travel with the image:
3. Configure the deployment
Create the deployment directory structure anddocker-compose.yml:
read_only, cap_drop, security_opt, resource limit, and network settings as written.
navigara-collector only, so it cannot reach Caddy or the frontend. A self-hosted database belongs on navigara-app.
4. Generate Root Private Key
Generate an Ed25519 key pair for admin root access. You will use the private key to generate login links in Product Setup.5. Prepare Environment Files
Use.env only for non-secret Compose settings. Use a separate 0600 file for each service. Do not mount a secret file in the frontend.
Create the public Compose file. Pin every image by digest. Verify each digest as
described in step 2 before you start the stack.
PASSWORD_HASH_PEPPER to 32 bytes or more. The backend refuses to start without it, and you cannot rotate it.
Generate PAGINATION_TOKEN_SECRET once with your secret manager and set it. Without it, the backend starts on a shared default value and only logs a warning, so your own checks must catch its absence. Use the same generated COLLECTOR_API_KEY value in secrets/backend.env and secrets/collector.env.
The collector file contains only its connection and LLM configuration:
0600 key file read-only into only the service that requires it.
Email (SMTP)
Navigara sends transactional email over SMTP: password resets, organization invitations, and the workspace-ready welcome message. Use any provider: Amazon SES, SendGrid, Postmark, Mailgun, Google Workspace, or an internal relay. SetSMTP_HOST, SMTP_USERNAME, and SMTP_PASSWORD. SMTP_PORT defaults to 587 (STARTTLS) and SMTP_FROM defaults to SMTP_USERNAME. For an IP-allowlisted internal relay that needs no credentials, set SMTP_HOST and leave the username and password empty. Use SMTP_TLS=ssl with SMTP_PORT=465 for providers that require implicit TLS.
Email is optional. Without
SMTP_HOST, Navigara runs normally but sends no email. Password resets and invitations are not delivered, so you need an authentication method that does not depend on email: OAuth/SSO, or sharing the invitation link directly.6. Configure PostgreSQL
Connect to your PostgreSQL instance as its administrative user and run the following. On a managed service that user ispostgres on Cloud SQL, the master
user on RDS, or your Azure administrator login.
DATABASE_URL in secrets/backend.env to use the navigara user:
7. Configure Reverse Proxy (Caddy)
Navigara ships with Caddy as the reverse proxy. Caddy terminates TLS, provisions and renews certificates through Let’s Encrypt, and routes between the frontend, the backend API, and the gRPC services. Create the Caddyfile atcaddy/Caddyfile. The site address comes from DOMAIN in your .env:
/api/metrics and /api/debug/* routes are unauthenticated, so this Caddyfile returns 404 for both. Never expose them publicly.
8. Start Navigara
1001 and hold no Linux capabilities:
uid=1001 and caps=0000000000000000 for all three. Caddy runs with CAP_NET_BIND_SERVICE alone (0000000000000400), so it can bind ports 80 and 443.
Only the reverse proxy should publish a host port:
9. Product Setup
Log in as root to create the first organization and invite users. Use theadmin_key.pem you generated in step 4.
Generate a Root Login
The Python script below signs a one-time credential and hands it to your browser from a local page. The credential expires 60 seconds after it is signed and works only once.
Requirements: PyJWT and cryptography, in a virtual environment. Ubuntu 24.04
and other modern distributions refuse pip install into the system Python.
Debian and Ubuntu also need the python3-venv package.
~/.navigara-admin/bin/python in place of python3.
impersonate.py and run it on the workstation that holds the private key, not on the server:
A root session lasts 15 minutes, and signing in again ends the previous root session.
Backup and Restore
Database backup
Back up your PostgreSQL database regularly usingpg_dump:
Database restore
Monitoring and Health Checks
The backend exposes a health check endpoint. The application containers publish no host port, so reach it through the proxy:
The backend and frontend containers also carry a Compose health check, so
docker compose ps reports their status locally.
Use these with your monitoring system (Prometheus, Datadog, etc.) to track service availability.
Prometheus metrics stay on the container network. The proxy returns
404 for /api/metrics, because that route is unauthenticated. Scrape it from a container attached to navigara-edge, not from the host.Upgrades
An upgrade is a change to the digests in your.env. Verify the new release before you run it, exactly as you did at install.
-
Back up the database. Migrations run automatically on startup.
-
Verify the new release, as in step 2.
-
Update
NAVIGARA_VERSIONand all three image digests in.env, then restart.
Rolling back
Keep the previous release’s digests. A roll-back is the same procedure with the old values. Restore the database backup first if the newer release ran a migration; migrations do not run in reverse.Emergency security releases
Navigara treats two classes of finding as emergencies. We ship a release for them on this clock, from the time we confirm the finding:
We notify the technical contact on your account directly for both classes.
For a credential compromise, also follow the instructions in the notice. It names what to rotate on your side and, if a signing key is involved, the new identity your
cosign verify must expect. Always verify the image during a key-compromise event.
All other findings follow the remediation targets in Security best practices → Updates and patching.

