Skip to content

Install ​

Requirements ​

ComponentRequirement
DockerCurrent stable
Docker Composev2.24 or newer
DatabasePostgreSQL 16 or 17 when running without the reference stack

Reference Compose installation ​

bash
git clone https://github.com/blendsdk/openvault.git
cd openvault
./deploy/compose/prepare.sh
export OPENVAULT_BASE_URL=https://vault.example.com
export OPENVAULT_SITE_ADDRESS=vault.example.com
docker compose -f deploy/compose/compose.yaml up -d

prepare.sh creates the persistent host directories and Docker secrets with the non-root owners the containers require. It needs root or equivalent permission once. It never overwrites an existing secret.

The stack runs:

ServicePurpose
proxyPublic TLS, routing, and security headers
openvaultdAPI, authentication, access control, audit, and agent listener
webWeb UI
postgresDatabase
openvault-initOne-shot keyring, certificate authority, TLS, organization, and bootstrap administrator
openvault-rolesOne-shot least-privilege database grants

Only the proxy publishes port 443. The admin listener (8443) and agent listener (8444) stay on internal networks. Replace the local tls internal certificate with a trusted certificate for anything beyond local use.

First initialization ​

The Compose stack runs ov init --prepare automatically. For a manual install, set OPENVAULT_MIGRATION_DB_URL to the migration role and run:

bash
ov init

This creates the organization, bootstrap administrator, keyring, internal certificate authority, server certificate, and signing material. Re-running ov init does not rotate an existing certificate authority.

The bootstrap password is written once to a file with mode 0600; it is never printed to stdout, stderr, or container logs. Read it through the init container, sign in through the web UI, change the password, then remove the temporary copy:

bash
install -m 0600 /dev/null /tmp/openvault-bootstrap
docker compose -f deploy/compose/compose.yaml cp \
  openvault-init:/bootstrap/bootstrap-password /tmp/openvault-bootstrap
cat /tmp/openvault-bootstrap
rm -f /tmp/openvault-bootstrap

If the password is lost before the first login, start again with an empty database.

File-backed Compose secrets are bind mounts. prepare.sh makes them 0444 so non-root container users can read them; the 0700 secrets directory keeps other host users out.

Protect the keyring

The keyring is outside the database and is the only way to decrypt stored values. Back it up separately from the database, with mode 0600 and a parent directory that is not group- or world-writable. Losing it means losing every secret.

Ports and networks ​

PortListenerExposure
443Public TLSHost
8443Admin HTTPSadmin_net only; not published
8444Agent TLSvault_net only; not published
8080Web UIweb_net only; not published
5432Databasedb_net only; not published

The proxy reaches the admin listener on admin_net. Agents use the separate listener on vault_net; the first join is token-authenticated, and every later agent request uses mutual TLS. Application containers must not join admin_net, vault_net, or db_net.

Next ​

Released under the Apache-2.0 License