Self-hosting Authpermit

Authpermit runs as a single node. The umbrella is a modularity boundary for the code, not a deployment boundary, so hosting it yourself does not mean orchestrating a fleet of services.

What you need

  • PostgreSQL 17 with the pgvector extension.
  • The Authpermit container.
  • Optionally the sidecar container, for document, face and liveness work.
cp .env.example .env && docker compose up --build

Secrets

Three are required and have no defaults: SECRET_KEY_BASE, AUTHPERMIT_VAULT_KEY and AUTHPERMIT_AUDIT_ANCHOR_KEY. In production the platform refuses to start on a development key, on a key shorter than 32 bytes, or with the demo seeds enabled. A production Authpermit holds other people's identity documents; booting on a key that shipped with the source would make every tenant's data readable by anyone with a copy.

The sidecar

Native document and biometric work runs in a separate process that holds no database credentials and no tenant data. It receives bytes, answers, and forgets — it never persists an image and never logs one. Without it, verification uses the deterministic stub engine and says so rather than pretending to have looked.

Nothing phones home

An air-gapped Authpermit is fully functional. The AI gateway falls back to an offline model, every external provider is optional, and no telemetry leaves the deployment.