Company password manager: records encrypted in the browser, every piece of state in TessariDB
60
A password manager for companies, with every record encrypted in the browser and every piece of state in TessariDB.
Companies, departments and teams share passwords, keys, notes and small files as end-to-end encrypted records. The server and the database store and move ciphertext; neither holds a key that opens a record. One Rust binary serves the API and the web application; nothing of the database is inside this image.
| Tag | |
|---|---|
0.0.1, latest | the first release |
The configuration and the HTTP surface may still change in a minor release before 1.0. Pin a version tag.
0.39.3 or later (0.39.4 is withdrawn), and an account on it that may edit one namespace.
The server never signs in as the store's owner. Without TESSARIDB_VAULT_STORE_AUTHORITY it reaches a store only on
loopback, which is why the Compose example runs it in the node's network namespace.65532 alone. It
derives every company's vault key. It is not in the store, so back it up apart from the store's backups.TESSARIDB_VAULT_PUBLIC_URL) before anyone else reaches it; passkeys need it.| Port | Listener |
|---|---|
8080 | the web application and the API (TESSARIDB_VAULT_LISTEN, 0.0.0.0:8080 in this image) |
The listener speaks plain HTTP for a TLS terminator in front of it.
The repository's compose.yaml starts the node, declares the server's account (docker/vault-account.sh), writes the
service key into a volume of its own (docker/service-key.sh) and starts the server:
git clone https://github.com/tessaridb/tessaridb-vault && cd tessaridb-vault && git checkout v0.0.1
cp .env.example .env # set TESSARIDB_PASSWORD, VAULT_STORE_PASSWORD and the platform admin
docker compose up -d --wait
docker compose run --rm vault enrolment-link
enrolment-link prints a single-use enrolment token for the platform admin, valid for 24 hours; open
http://localhost:8080/#/join and paste it.
| Variable | Default | What it is |
|---|---|---|
TESSARIDB_VAULT_STORE | required | the node's wire address, host:port |
TESSARIDB_VAULT_STORE_USER | required | the server's account on the node |
TESSARIDB_VAULT_STORE_PASSWORD | required | that account's password |
TESSARIDB_VAULT_STORE_AUTHORITY | none | the PEM a node's certificate must lead to; without it only a loopback store is reached |
TESSARIDB_VAULT_SERVICE_KEY_FILE | required | the service key file |
TESSARIDB_VAULT_NAMESPACE | vault | the namespace it keeps everything in |
TESSARIDB_VAULT_DATABASE | main | the database inside it |
TESSARIDB_VAULT_LISTEN | 0.0.0.0:8080 | where it serves |
TESSARIDB_VAULT_PUBLIC_URL | none | the address people reach it at; passkeys need it |
TESSARIDB_VAULT_PLATFORM_ADMIN_EMAIL, _NAME | none | the platform admin to ensure at start, both or neither |
TESSARIDB_VAULT_OIDC_ISSUER, _CLIENT_ID, _REDIRECT | none | an OpenID Connect issuer to sign in through, all three or none |
The server refuses to start, naming the variable, when a value it needs is missing. The image carries no credential.
The image's health check runs tessaridb-vault health, which asks the server in the container whether it answers and
exits 0 when it does, so docker compose up --wait returns once the server serves. The server finishes the requests in
flight on SIGTERM. It runs as the non-root user 65532 on a distroless base.
Business Source License 1.1. Production use is free, commercial use included. A commercial licence is needed only to provide it to third parties as a hosted or managed service for their passwords and secrets, or to sell it. Each version converts to the Apache License 2.0 on its Change Date. [email protected]
Content type
Image
Digest
sha256:cddda3b34…
Size
13.1 MB
Last updated
about 5 hours ago
docker pull tessaridb/vault