Skip to main content

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:
  1. Linux VM: runs the Navigara application (backend, frontend, collector) via Docker Compose
  2. Managed PostgreSQL: stores all application data including vector embeddings (requires pgvector extension)
  3. LLM API endpoint: Anthropic, OpenAI, or Google Vertex AI API for AI-powered commit analysis
  4. 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
PostgreSQL version: 18 (required for native UUIDv7 support via 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.
Treat LICENSE_KEY as a secret. Store it alongside your other credentials (vault or secret manager) and do not commit it to source control.

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 from LLM_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.

Network Requirements

The VM must have outbound access to the following services. Ensure your firewall rules allow these connections:
If any of these services are unreachable, the corresponding Navigara features will not function. Git provider access is required for core functionality.

Hardware Requirements

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.
Then allow your user to reach the Docker socket, and confirm the install. Log out and back in for the group change to take effect.
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.
A successful verification prints the signed claims. Repeat for vision-collector and vision-fe. Then read the provenance and the SBOM, which travel with the image:
Feed the SPDX SBOM to your own vulnerability scanner if your policy requires it.
If cosign verify reports no signatures found or no matching signatures, stop. Either the version you pinned predates image signing (install the current release instead), or the image is not the one Navigara published. Contact support before deploying it.

3. Configure the deployment

Create the deployment directory structure and docker-compose.yml:
This deployment is hardened by default. Keep the read_only, cap_drop, security_opt, resource limit, and network settings as written.
The collector is attached to 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.
The admin_key.pem file is a root credential for your Navigara instance. Store it in a vault or password manager, and restrict access to named administrators.

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.
These digests are for 0.15.7. Your account representative provides the digests for every release. The commented resource limits match the Small hardware tier; raise them when you move to a larger tier. Create the secret files from your secret manager. Set restrictive permissions before writing them. Do not put a literal token in a shell command or shell history.
The backend file needs this minimum configuration. Add optional values only for enabled features.
With password auth you must also set 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:
Prefer an attached workload identity for Vertex AI. Do not use a static service-account JSON key. If no workload identity is available, mount a 0600 key file read-only into only the service that requires it.
At least one authentication method must be configured for users to log in to Navigara. Enable one or more of: password auth (ENABLE_PASSWORD_AUTH=true), Google OAuth (GOOGLE_CLIENT_ID + GOOGLE_CLIENT_SECRET), or Microsoft OAuth (MICROSOFT_CLIENT_ID + MICROSOFT_CLIENT_SECRET). Without at least one of these, only the root admin can access the instance via Product Setup.On 0.14.6 and earlier, configure OAuth. The invitation page offers only a sign-in form. An invited user who has no account cannot create one, so OAuth is the only way in. Later releases accept password signup from the invitation link.

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. Set SMTP_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 is postgres on Cloud SQL, the master user on RDS, or your Azure administrator login.
Then set DATABASE_URL in secrets/backend.env to use the navigara user:
Navigara runs database migrations automatically on startup; no manual schema setup is needed.

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 at caddy/Caddyfile. The site address comes from DOMAIN in your .env:
The /api/metrics and /api/debug/* routes are unauthenticated, so this Caddyfile returns 404 for both. Never expose them publicly.

8. Start Navigara

Verify all services are running:
Confirm the containment controls took effect. Each application container must run as user 1001 and hold no Linux capabilities:
Expect 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 the admin_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.
Run the script below with ~/.navigara-admin/bin/python in place of python3.
Save this as impersonate.py and run it on the workstation that holds the private key, not on the server:
Your browser opens on the platform administration page, signed in as the root admin. Create your first organization and invite users. Root belongs to no organization and has no dashboard of its own.
Re-run the script whenever you need root access. Every run signs a new credential. A spent or expired credential cannot be reused.
Upgrading from 0.14.1 or earlier? Replace any older copy of this script. An older copy fails with “Sign-in links are no longer accepted” or “invalid or expired credential”.
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 using pg_dump:

Database restore

The database contains all application state. Ensure backups are stored securely and tested regularly.

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.
  1. Back up the database. Migrations run automatically on startup.
  2. Verify the new release, as in step 2.
  3. Update NAVIGARA_VERSION and all three image digests in .env, then restart.
Your account representative provides the digests for each release. This page carries the digests for the current one.
Change the version and all three Navigara digests together. A digest left on the previous release silently keeps that component on the old image, and mixed versions are not supported.

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.

Troubleshooting