• Latest
  • Trending
  • All
Vaultwarden: Self-Host Your Own Bitwarden in 20 Minutes (2026) - cover image

Vaultwarden: Self-Host Your Own Bitwarden in 20 Minutes (2026)

May 30, 2026
WordPress Security Hardening Checklist: 34 Scored Controls with Copy-Paste Fixes - cover image

WordPress Security Hardening Checklist: 34 Scored Controls with Copy-Paste Fixes

June 3, 2026
Maximizing Website Speed with Image Optimization Techniques for 2026 - cover image

Maximizing Website Speed with Image Optimization Techniques for 2026

June 3, 2026
SSL certificate renewal manager - 8 ACME clients, expiry calculator and monitoring - cover image

SSL Certificate Renewal Manager: certbot, acme.sh, lego, Caddy, cert-manager

June 3, 2026
CORS policy generator - 14 server and framework configs with presets and live security review - cover image

CORS Policy Generator: Headers + Nginx, Apache, Express, FastAPI, Django Config

June 3, 2026
netsh wlan command reference - 72 commands with example output and copy - cover image

netsh wlan Commands: Windows Wi-Fi Cheat Sheet (Show Password, Profiles, Hotspot)

June 2, 2026
Fix: ESXi Host Not Responding / Disconnected in vCenter (2026) - cover image

Fix: ESXi Host Not Responding / Disconnected in vCenter (2026)

June 1, 2026
VMware ESXi Purple Screen of Death (PSOD): Diagnose and Recover (2026) - cover image

VMware ESXi Purple Screen of Death (PSOD): Diagnose and Recover (2026)

June 1, 2026
VMware PowerCLI command generator cover

VMware PowerCLI Command Generator: VM, Snapshots, Networking, esxcli

June 1, 2026
dd Command Generator: Write ISO to USB, Image Disks, Wipe Drives - cover image

dd Command Generator: Write ISO to USB, Image Disks, Wipe Drives

June 1, 2026
SSH Tunnel Command Generator: Local, Remote and Dynamic Forwarding - cover image

SSH Tunnel Command Generator: Local, Remote and Dynamic Forwarding

June 1, 2026
sed Command Generator: Build Substitute, Delete and Print Commands - cover image

sed Command Generator: Build Substitute, Delete and Print Commands

May 31, 2026
VMware Workstation and Hyper-V on the Same Machine (2026 Fix) - cover image

VMware Workstation and Hyper-V on the Same Machine (2026 Fix)

May 31, 2026
  • Online Tools
  • Network Tools
  • Developer Tools
  • Security Tools
Wednesday, June 3, 2026
  • Login
People Are Geek
  • Online Tools
  • Network Tools
  • Developer Tools
  • Security Tools
No Result
View All Result
People Are Geek
No Result
View All Result
Home Security Tools

Vaultwarden: Self-Host Your Own Bitwarden in 20 Minutes (2026)

by People Are Geek
May 30, 2026
in Security Tools, Server Tools
0
Vaultwarden: Self-Host Your Own Bitwarden in 20 Minutes (2026) - cover image
0
SHARES
3
VIEWS
Share on FacebookShare on Twitter

Self-host quickstart Vaultwarden · 9 min read · Published May 2026

Vaultwarden is the Rust-based, Bitwarden-compatible password server you can self-host in a single Docker container. It speaks the same wire protocol as the official Bitwarden server, so every official client — browser extension, iOS, Android, desktop — works against it without modification. The container weighs about 50 MB on disk and 200 MB resident; the SQLite database can live on a Raspberry Pi just as comfortably as on a Hetzner ARM box. This guide is the timed walkthrough: from a fresh VPS to your first stored credential in under 20 minutes, then the discipline (backups, fail2ban, admin-route hardening) you absolutely owe yourself before tomorrow.

Vaultwarden self-host architecture: two containers (Caddy reverse proxy with automatic Let's Encrypt TLS on port 443, Vaultwarden server with SQLite database and argon2id hashing on internal port 80) plus a bind mount for the data volume and host-level fail2ban watching auth logs. Timeline on the right shows the 20-minute setup from VPS spin-up to first stored credential.
Figure 1. The whole stack in one picture. Two containers, one bind mount, one host-level fail2ban. The right column shows the 20-minute clock: each row is a step you can do in under three minutes. Backups and per-domain hardening are the next-day work.

Contents

  1. Why Vaultwarden over Bitwarden Cloud
  2. Prerequisites — what you need before you start the clock
  3. The 20-minute install (docker compose + Caddy)
  4. First admin sign-in and disable open signups
  5. Pointing the Bitwarden clients at your server
  6. Day-2 hardening: fail2ban, backups, admin-route
  7. Org accounts and family sharing
  8. FAQ

Why Vaultwarden over Bitwarden Cloud

Three reasons. Cost: Vaultwarden gives you every paid Bitwarden feature (organisations, TOTP, attachments, emergency access) for the price of a VPS. Sovereignty: your encrypted vault never leaves your infrastructure; even an attacker with full Cloudflare logs sees only TLS to your domain. Velocity: Vaultwarden ships features ahead of the official server — Argon2id by default, FIDO2 WebAuthn, push notifications via Bitwarden’s own service. The trade-off is exactly two: you carry the ops burden (updates, backups, TLS), and you accept that the project is volunteer-maintained, so paid premium support is not in the box.

Prerequisites — what you need before you start the clock

  • A VPS, the cheapest tier on Hetzner Cloud, OVH, DigitalOcean. 1 vCPU, 1 GB RAM, 20 GB disk. Vaultwarden idles at ~80 MB resident.
  • A domain name, with an A record pointing at the VPS. Vaultwarden absolutely requires HTTPS — there is no plain-HTTP fallback in modern Bitwarden clients.
  • SSH access to the VPS with a key, not a password.
  • 10 minutes for the DNS A record to propagate before you start. Caddy will fail to fetch a Let’s Encrypt cert if your record is still propagating.

The 20-minute install (docker compose + Caddy)

Drop both files in the same directory. The whole stack is two containers and one shared network.

# docker-compose.yml
services:
  vaultwarden:
    image: vaultwarden/server:latest
    restart: unless-stopped
    environment:
      DOMAIN: "https://vault.example.com"
      SIGNUPS_ALLOWED: "true"           # disable after first signup
      ADMIN_TOKEN: "<long-random-string>"
      WEBSOCKET_ENABLED: "true"
      LOG_FILE: "/data/vaultwarden.log"
    volumes:
      - ./data/vaultwarden:/data

  caddy:
    image: caddy:2-alpine
    restart: unless-stopped
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - ./Caddyfile:/etc/caddy/Caddyfile:ro
      - ./data/caddy:/data
      - ./data/caddy_config:/config
# Caddyfile
vault.example.com {
    encode gzip
    reverse_proxy vaultwarden:80
    header {
        Strict-Transport-Security "max-age=31536000;"
        X-Frame-Options "DENY"
        X-Content-Type-Options "nosniff"
        Referrer-Policy "no-referrer"
    }
}

Now bring the stack up:

$ docker compose up -d [+] Running 2/2 ✔ Container vault-caddy Started ✔ Container vault-vaultwarden Started $ docker logs –tail 20 vault-caddy | grep certificate {“level”:”info”,”msg”:”certificate obtained successfully”,”identifier”:”vault.example.com”}

Caddy fetched the cert from Let’s Encrypt automatically. Open https://vault.example.com in a browser; you should see the Bitwarden Web Vault login screen.

First admin sign-in and disable open signups

Create your account first via the public signup flow, then flip the toggle.

  1. Hit Create account, enter email, master password ≥ 14 chars (Vaultwarden enforces it for new accounts in 2026).
  2. Sign in and confirm your vault works — store a throwaway credential.
  3. SSH back to the VPS, edit docker-compose.yml to set SIGNUPS_ALLOWED: "false", then docker compose up -d to restart.
  4. Browse to https://vault.example.com/admin, paste the ADMIN_TOKEN from the compose file. You now have the admin dashboard for invites, users, and global config.
If you leave SIGNUPS_ALLOWED=true for more than a few minutes, an attacker who guesses the domain can register their own account and start storing data inside your vault server. Disable it as soon as you finish the first signup.

Pointing the Bitwarden clients at your server

Every official Bitwarden client supports a custom server URL. The configuration lives behind the login screen: tap the gear icon, choose Self-hosted, enter https://vault.example.com as the Server URL. The mobile apps and the browser extension pick it up immediately.

  • Browser extension (Chrome, Firefox, Edge, Safari): Settings → Logged out → gear icon → Server URL.
  • iOS / Android: Tap Region on the login screen → Self-hosted.
  • Desktop (Win/macOS/Linux): Settings → Server URL.
  • CLI (bw): bw config server https://vault.example.com then bw login.

Day-2 hardening: fail2ban, backups, admin-route

You owe yourself three things before you stop calling it a side project.

  • fail2ban: Vaultwarden writes auth failures to /data/vaultwarden.log. Configure fail2ban with the official Vaultwarden filter and a 1-hour ban on 3 failed attempts. Drops brute-force attempts from drive-by scanners.
  • Restic to off-site: nightly snapshot of the ./data/vaultwarden bind mount to a B2 / Backblaze / Hetzner storage box, encrypted with a 32-byte passphrase that lives in your password manager (not the one you are running on this very box). 60 GB B2 bucket = €0.30/month.
  • Lock the admin route: extend the Caddyfile with a basic_auth challenge on /admin, or restrict it to your home IP with @admin path /admin* + respond @admin 403 from anywhere else. The admin token alone is not enough.

Org accounts and family sharing

The admin dashboard lets you create unlimited Organisations. Each org has its own collections, role-based access (Owner, Admin, Manager, User), and emergency-access policy. The setup for a family of four:

  1. Admin → Users → Create user for each family member, send the invite link.
  2. Each user accepts, creates a personal vault on the same server.
  3. You create an org “Family”, invite the other three, share a collection of household credentials (router admin, Netflix, electricity supplier).
  4. Personal vaults stay private to each user; only the explicitly shared collection is visible to everyone.

FAQ

Is Vaultwarden as secure as Bitwarden Cloud?

The crypto is identical — Bitwarden’s client-side argon2id + AES-256-GCM design is honoured. Where the security posture differs is operational: Bitwarden Cloud’s team handles patching, DDoS, infrastructure isolation; on Vaultwarden you are that team. Apply OS updates weekly, watch the upstream GitHub for advisories, run fail2ban.

Can I migrate from Bitwarden Cloud to Vaultwarden?

Yes. Export your vault from the Bitwarden web client as an encrypted JSON, point a clean client at your Vaultwarden URL, log in to the new (empty) account, import the JSON. Items, folders, attachments transfer cleanly. Organisation migration is similar but should be done after every user accepts the new invite.

Will browser push notifications work?

Yes, by default. Vaultwarden relays push notifications through Bitwarden’s own infrastructure, so the Bitwarden mobile app gets vault-updated notifications from your self-hosted server without any extra configuration. You can disable this relay by setting PUSH_RELAY_BASE_URI to an empty string if you prefer not to depend on Bitwarden infrastructure.

What about FIDO2 / passkeys?

Supported. The Bitwarden web vault can register passkeys against your domain as a passwordless second factor. The catch is the WEBAUTHN_ORIGIN must match your real domain exactly — same scheme, same host, no port. Add it as an env var in compose if Vaultwarden cannot infer it.

How do I back up the vault?

Stop the container briefly (or use SQLite WAL mode + a copy snapshot), copy the ./data/vaultwarden directory, ship it encrypted to off-site storage. Restic with a Hetzner Storage Box backend is the cheapest reliable pattern — about €1.20/mo for 100 GB.

Can I run this on a Raspberry Pi?

Yes — Vaultwarden has an official ARM64 image. A Pi 4 with 2 GB RAM is plenty. The only operational difference is to use a real SSD (USB or NVMe HAT) — SD cards will burn out under SQLite write activity.

Vault sitting in your cloud? Tunnel into it.

Pair Vaultwarden with self-hosted WireGuard so the admin route is only reachable from inside your VPN — defence in depth.

WireGuard guide →
ShareTweetPin
People Are Geek

People Are Geek

People Are Geek

Copyright © 2017 JNews.

Navigate Site

  • About PeopleAreGeek
  • All Tools and Articles
  • Contact
  • Cookie Policy
  • Hyper-V Hub: Tools, Error Fixes and Lab Guides
  • Linux Hub: Cross-Distro Reference, Articles, Tools
  • Page de test Codex
  • Privacy Policy
  • Sample Page
  • Terms of Service
  • VMware vSphere & ESXi Hub: Tools, Error Fixes and Guides

Follow Us

Welcome Back!

Login to your account below

Forgotten Password?

Retrieve your password

Please enter your username or email address to reset your password.

Log In
No Result
View All Result
  • Online Tools
  • Network Tools
  • Developer Tools
  • Security Tools

Copyright © 2017 JNews.