Vaultwarden — a lightweight, Rust-based server implementing the Bitwarden API (password manager) for self-hosting. Deployed as a host-networked Nomad service with a persistent Docker volume; uses the bundled SQLite database.
Save as values.hcl, edit, then run:
# The name of the Nomad job.
job_name = "vaultwarden"
# The Nomad namespace to deploy into.
namespace = "default"
# The datacenters to deploy to.
datacenters = ["*"]
# The Vaultwarden container image.
image = "vaultwarden/server:latest"
# Host port for the Vaultwarden web vault / API. Default 8280 (avoids 8222 used by the nats pack's monitoring).
port = 8280
# Public URL Vaultwarden is served at (e.g. https://vault.example.com). STRONGLY recommended — WebAuthn/U2F, some clients, and the admin page need it correct. Empty = leave unset (works for basic LAN use over the IP).
domain = ""
# Allow open user registration. Set false once your users have signed up (or use invitations from the admin page).
signups_allowed = true
# Argon2/plain token guarding the /admin page. Empty = admin page DISABLED (recommended unless you need it). If set, treat it as a secret.
admin_token = ""
# Docker named volume for /data (SQLite DB, RSA keys, attachments, icon cache). All of Vaultwarden's state — BACK IT UP. Vaultwarden runs as root, so a fresh volume is writable.
data_volume = "vaultwarden_data"
# Placement constraints — pin to one node so the local volume stays put. On a nomploy cluster: attribute = "$${meta.nomploy_control_plane}", operator = "=", value = "true".
constraints = []
# The task resources.
resources = {
cpu = 300
memory = 256
}
| Name | Type | Default | Description |
|---|---|---|---|
| job_name | string | "vaultwarden" | The name of the Nomad job. |
| namespace | string | "default" | The Nomad namespace to deploy into. |
| datacenters | list | ["*"] | The datacenters to deploy to. |
| image | string | "vaultwarden/server:latest" | The Vaultwarden container image. |
| port | number | 8280 | Host port for the Vaultwarden web vault / API. Default 8280 (avoids 8222 used by the nats pack's monitoring). |
| domain | string | "" | Public URL Vaultwarden is served at (e.g. https://vault.example.com). STRONGLY recommended — WebAuthn/U2F, some clients, and the admin page need it correct. Empty = leave unset (works for basic LAN use over the IP). |
| signups_allowed | bool | true | Allow open user registration. Set false once your users have signed up (or use invitations from the admin page). |
| admin_token key | string | "" | Argon2/plain token guarding the /admin page. Empty = admin page DISABLED (recommended unless you need it). If set, treat it as a secret. |
| data_volume | string | "vaultwarden_data" | Docker named volume for /data (SQLite DB, RSA keys, attachments, icon cache). All of Vaultwarden's state — BACK IT UP. Vaultwarden runs as root, so a fresh volume is writable. |
| constraints | list | [] | Placement constraints — pin to one node so the local volume stays put. On a nomploy cluster: attribute = "$${meta.nomploy_control_plane}", operator = "=", value = "true". |
| resources | object | {
cpu = 300
memory = 256
} | The task resources. |
No variables match.
Vaultwarden — a lightweight, Rust-based server that implements the Bitwarden API, so you can self-host a password manager and use the official Bitwarden apps/extensions against it. Host-networked Nomad service with a persistent Docker volume; uses the bundled SQLite database.
nomad-pack registry add nomploy github.com/Nomploy/nomad-packs
nomad-pack run vaultwarden --registry nomploy
In nomploy: create a Compose service, type Nomad Pack, pack vaultwarden, custom
registry github.com/Nomploy/nomad-packs, then Deploy.
Open the web vault, create your account, then point Bitwarden clients at the same URL.
Vaultwarden serves plain HTTP here, but in practice you must front it with a reverse
proxy that terminates TLS — browser crypto (unlock, WebAuthn) and the Bitwarden clients
require HTTPS. Set domain to your public https://… URL so links, WebAuthn and the admin
page work.
| Variable | Default | Notes |
|---|---|---|
image |
vaultwarden/server:latest |
Pin a tag in production. |
port |
8280 |
Web vault / API host port (off 8222 to dodge the nats pack). |
domain |
"" |
Public https:// URL — strongly recommended. |
signups_allowed |
true |
Turn off after your users register (or invite from /admin). |
admin_token |
"" |
Empty = /admin disabled. Set a strong token to enable it. |
data_volume |
vaultwarden_data |
SQLite DB + keys + attachments. Back it up. |
constraints |
[] |
Pin to a node so the local volume stays put. |
resources |
cpu 300 / mem 256 |
Lightweight. |
count is fixed to 1 (SQLite on a local volume). Pin with
constraints. Vaultwarden runs as root, so a fresh volume is writable (no chown)./data volume holds the SQLite DB and the RSA keys. Snapshot it
regularly; without it, vaults are unrecoverable.signups_allowed off once set up, and keep admin_token unset
unless you need the admin page.