This document explains how to deploy VaultKit in production and production-like environments. VaultKit is designed to be easy to deploy for design partners, while remaining flexible enough for advanced infrastructure setups.
VaultKit consists of four main components:
VaultKit supports two deployment models out of the box.
Best for:
Example:
https://alpha.vaultkit.io
In this mode:
This is the recommended starting point.
Best for:
Example:
https://app.acme.com → Console (frontend)
https://api.acme.com → Control Plane (backend)
In this mode:
No VaultKit images need to be rebuilt — only routing changes.
VaultKit ships with a deployment layout under deploy/:
deploy/
alpha/
docker-compose.yml
.env.example
install.sh
secrets/
keys/
vkit_priv.pem
vkit_pub.pem
All deployment steps happen inside deploy/alpha.
git clone https://github.com/vaultkit-inc/vaultkit.git
cd vaultkit/deploy/alpha
./install.sh
This does the following:
.env.example → .env (if missing)vkit_priv.pem, vkit_pub.pem)If .env is newly created, the script will stop and ask you to edit it.
.envEdit .env and set at least:
POSTGRES_PASSWORDAPP_HOSTFRONTEND_BASE_URLExample (single-domain):
RAILS_ENV=production
APP_HOST=https://alpha.vaultkit.io
FRONTEND_BASE_URL=https://alpha.vaultkit.io
DATABASE_URL=postgres://vaultkit:<password>@postgres:5432/vaultkit
FUNL_URL=http://funl-runtime:8080
VKIT_PRIVATE_KEY=/secrets/keys/vkit_priv.pem
VKIT_PUBLIC_KEY=/secrets/keys/vkit_pub.pem
docker compose up -d
Verify services:
docker compose ps
All containers should be running.
Console UI:
https://alpha.vaultkit.io
Health check:
https://alpha.vaultkit.io/up
VaultKit supports OIDC providers such as Okta, Auth0, Azure AD, and others.
For browser-based login:
Redirect URI must be:
https://<your-domain>/auth/oidc/callback
VaultKit intentionally redirects back to the frontend after successful authentication. The frontend then exchanges the session with the backend.
This design allows:
If you want separate frontend and backend domains:
app.acme.com → Console
api.acme.com → Control Plane
.env:APP_HOST=https://api.acme.com
FRONTEND_BASE_URL=https://app.acme.com
/ → Console containerVaultKit images remain unchanged.
By default, VaultKit runs Postgres inside Docker.
If you already have Postgres:
postgres service from docker-compose.ymlDATABASE_URL to your existing databaseExample:
DATABASE_URL=postgres://vaultkit:<password>@db.acme.internal:5432/vaultkit
.env must not be committedsecret_key_base, JWT secrets) are read from credentials or envTo update to a new version:
docker compose pull
docker compose up -d
Database migrations run automatically on container startup.
docker compose logs console/auth/oidc/callback is routed to backend/auth/callback is handled by frontendAfter deployment:
If you are a design partner and need help:
docker compose logsVaultKit is designed to deploy cleanly, predictably, and without surprises. If something feels harder than it should be, that’s a signal — and we want to hear about it.