First Run
Bootstrap Vaulthalla after installation, bind the CLI admin Linux UID, configure database access, and expose the web console.
First Run
After installation, finish the host-specific setup: database access, CLI ownership, group membership, service health, and optional Nginx/TLS exposure.
First-Run Checklist
- Confirm the package installed and services exist with
vh statusandsystemctl status. - Bootstrap a local or remote PostgreSQL connection.
- Add the operator Linux user to the
vaulthallagroup. - Bind the initial CLI admin user to that Linux UID.
- Configure Nginx and TLS if the web console should be reachable by domain.
- Open the web console and create the first operational vault. :::
- Confirm the package installed and services exist with
Database Setup
For local PostgreSQL:
1sudo vh setup dbFor remote PostgreSQL:
1sudo vh setup remote-db \2 --host db.example.com \3 --port 5432 \4 --user vaulthalla \5 --database vaulthalla \6 --password-file /root/vaulthalla-db-passwordUse
VH_SKIP_DB_BOOTSTRAP=1during package install when you want to configure database access after the package is installed.CLI Admin Linux UID
Vaulthalla's local CLI is intentionally tied to Linux identity. The CLI talks to
/run/vaulthalla/cli.sock, which is owned for Vaulthalla use. Non-root CLI users must be in thevaulthallagroup and must be mapped to an application user by Linux UID.The initial admin binding is handled by:
1vh setup assign-adminRun this as the Linux account that should operate Vaulthalla. The command binds the built-in admin user to that Linux UID when it is still unbound. If the admin user is already bound to the same UID, the command reports that it is already assigned. If it is bound to a different UID, it refuses to rebind.
The first non-root CLI user can become the CLI ownerIf setup is skipped and the admin UID is still unbound, the first eligible non-root user that reaches the CLI socket can claim the initial CLI ownership. Choose the operator user intentionally during install or immediately run
vh setup assign-adminas the intended user.Group Membership
The installer can add an operator to the
vaulthallagroup. If you do it manually:1sudo usermod -aG vaulthalla <linux-user>Then refresh the login session:
1newgrp vaulthallaor log out and back in. Confirm membership:
1id2getent group vaulthallaLifecycle Commands Require Sudo
Runtime lifecycle commands modify host services or privileged configuration and must be run with
sudo:1sudo vh setup db2sudo vh setup remote-db --host <host> --user <user> --database <name> --password-file <path>3sudo vh setup nginx --domain vault.example.com4sudo vh teardown nginx5sudo vh teardown dbMost day-to-day commands, such as
vh vaults,vh user,vh api-key, andvh vault sync, are normal CLI commands that use the local control socket.For unattended lifecycle automation, set:
1VAULTHALLA_NONINTERACTIVE=1or pass lifecycle helper options such as
--non-interactiveor--yeswhere supported.Configure The Web Console
If Nginx was not configured during package install:
1sudo vh setup nginx --domain vault.example.comFor managed TLS:
1sudo vh setup nginx --domain vault.example.com --certbotThen check:
1systemctl status vaulthalla-web.service2systemctl status vaulthalla.service3sudo nginx -tThe web service listens locally and is intended to be exposed through Nginx.
Health Checks
Use these after any setup change:
1vh status2journalctl -fu vaulthalla.service3journalctl -fu vaulthalla-web.serviceCheck the CLI socket when
vhcannot connect:1ls -l /run/vaulthalla/cli.sock2systemctl status vaulthalla-cli.socket3systemctl status vaulthalla-cli.serviceNext Steps
Create an API key if you plan to use S3/R2 vaults, create a vault, and then review backup and key export procedures before putting important data into the system:
