Skip to content

Vaultwarden

Interní týmový password manager (Bitwarden-kompatibilní, Rust). Nativní auth + Organization, invite-only.

Owner sentinel (deploy/container/provoz)
Status running
Spec REQ-002 (catalog/specs/REQ-002.md)
Image vaultwarden/server:latest (oficiální, žádný build)
Deploy config /root/projects/vaultwarden/ (deploy.yml + docker-compose.yml + DEPLOY.md), non-git
Prod URL https://pass.studio60.cz
Admin https://pass.studio60.cz/admin (ADMIN_TOKEN)
Catalog catalog/services/vaultwarden.yaml

⚠️ Single-env: prod-only single-instance interní služba — NEMÁ hub instanci. Deploy přeskakuje hub-before-prod gate (deploy.yml bez domains.staging, viz ADR-009).

Komponenta

Container Port Role
s60-vaultwarden 80 interní (ROCKET_PORT), 127.0.0.1:8222→80 Vaultwarden server

DB

Env DB User Server Port
Prod s60_vault_prod s60_vault_prod_user pg-alfa (100.125.3.121) 5432 DIRECT

⚠️ Port 5432 direct (ne 6432 pgBouncer) — Diesel prepared statements se s transaction poolingem tlučou (stejný důvod jako n8n). Vaultwarden si schema tvoří sám při startu (Diesel embedded migrations → 29 tabulek). public schema owned vault userem (jinak boot migrace selžou).

Auth model — NATIVNÍ (bez SSO)

  • Per-user master heslo (E2E — server nikdy nevidí plaintext; master heslo = šifrovací klíč na klientu).
  • Sdílení přes Organization → Collections (+ Groups, ORG_GROUPS_ENABLED=true).
  • Invite-only (SIGNUPS_ALLOWED=false) — admin zve členy.
  • Odříznutí uživatele přímo v admin panelu / Organization (žádné SSO — REQ-002 Zamítnuto).
  • Master heslo min 12 znaků = built-in Bitwarden web vault floor, nejde snížit.

Admin

  • Server admin (/admin): token-based (ADMIN_TOKEN), správa celé instance (všichni users, SMTP, diagnostika). Není vázané na účet.
  • Org role: kdo vytvoří Organization = automaticky Owner (plná správa members/collections/groups/policies). Role: Owner → Admin → User.

SMTP (pozvánky)

Přes Resend (stejně jako n8n): smtp.resend.com:587 STARTTLS, from vault@studio60.cz (studio60.cz verified v Resendu), user resend, password = RESEND_API_KEY.

nginx / cert

  • Vhost pass.studio60.cz na prod-alfa, proxy na 127.0.0.1:8222.
  • WebSocket live sync: location /notifications/hub s upgrade headers.
  • LE cert HTTP-01 (auto-renew), client_max_body_size 128M pro attachmenty.

Backup

  • DB s60_vault_prod/usr/local/bin/s60-backup.sh (daily 4:30) → storagebox sync.
  • Volume vaultwarden_vaultwarden-datadeploy/docker-volume-backup.sh (daily 4:00, auto-detect na prod-alfa).
  • ⚠️ Kritické — ztráta DB+volume = ztráta všech týmových hesel.

Secrets

  • /root/secrets/vaultwarden/.env.prod — DATABASE_URL, ADMIN_TOKEN, SMTP_*, SIGNUPS_ALLOWED, ORG_GROUPS_ENABLED

Deploy

./deploy.sh vaultwarden prod   # oficiální image, non-git, single-env (skip hub gate)

Známé / follow-up

  • ADMIN_TOKEN je plain (root-only secrets) — argon2 upgrade je follow-up hardening (/vaultwarden hash vyžaduje TTY host; argon2 CLI/python na sentinelu chybí).

Health check

  • curl https://pass.studio60.cz/alive → 200

Související