Vaultwarden Password Manager
A self-hosted, Bitwarden-compatible password manager - one of the fastest ways to feel a homelab pay for itself in daily life, not just as a tech demo.
First Services covered Pi-hole/AdGuard, a media server, and a dashboard - useful, but easy to go a few days without opening. A password manager gets opened dozens of times a day by everyone in the household, which makes it one of the best "real win" services to run early: you'll notice the value immediately, and you'll notice immediately if it's down.
What Vaultwarden actually is
Vaultwarden is a from-scratch, Rust-based reimplementation of the Bitwarden server, compatible with the official Bitwarden apps, browser extensions, and CLI - but far lighter to self-host than Bitwarden's own server (a heavier multi-container deployment - web vault, API, identity, admin, attachments, database, and more - run via Docker Compose, with an optional Kubernetes Helm chart for larger/HA setups). You get the full Bitwarden client ecosystem pointed at your own server instead of Bitwarden's cloud.
Worth noting: Bitwarden shipped a lighter single-container self-host option in late 2025 that narrows this gap somewhat. That option is new enough that its specifics (resource requirements, long-term support) were still shifting as of this writing, so check Bitwarden's current self-hosting docs rather than relying on older comparisons - this page included - if that path interests you.
Running it
services:
vaultwarden:
image: vaultwarden/server:latest
container_name: vaultwarden
ports:
- "8082:80"
volumes:
- ./data:/data
environment:
- DOMAIN=https://vault.yourdomain.com
- SIGNUPS_ALLOWED=true # flip to false once your accounts exist
- ADMIN_TOKEN=${ADMIN_TOKEN}
restart: unless-stopped
SIGNUPS_ALLOWED- leave ittruejust long enough to create your own account(s), then change it tofalseand rundocker compose up -dagain, so nothing else on your network can sign up to your instance. (Adding someone later doesn't need it turned back on - invite them from the/adminpanel instead.)ADMIN_TOKEN- protects the/adminpanel (user management, diagnostics). Generate a real random value and keep it in a.envfile (see Docker Compose Basics), never hardcoded in the compose file itself.
⚠️ Risk: never expose the
/adminpanel (or the whole instance) to the public internet without a strongADMIN_TOKENand a plan for keeping it patched - a password manager is one of the highest-value targets on your entire network, precisely because of what it stores.
The TLS requirement you'll hit immediately
This is worth knowing before you're confused by it: Vaultwarden needs
HTTPS to be usable at all. The web vault does its encryption in
your browser using the Web Crypto API, which browsers only enable in a
secure context - an https:// address, or localhost on the same
machine. Open http://192.168.1.50:8082 from another device and the
page loads, but you can't create an account or log in. The browser
extensions and mobile apps want an HTTPS server too.
A proper reverse proxy with automatic TLS isn't covered until Reverse Proxy and TLS in Intermediate, so you have two reasonable paths:
- Read the Reverse Proxy and TLS page out of order (recommended). If you want to actually use Vaultwarden day to day - extension autofill, phone app - this is the real fix, and a reasonable exception to the tier ordering. Vaultwarden is one of the most common reasons people set up TLS earlier than "intended."
- Use an SSH tunnel as a stopgap. Because
localhostcounts as a secure context, you can reach the web vault through a tunnel from your everyday machine:
then openssh -L 8082:localhost:8082 yourname@server-iphttp://localhost:8082in a browser on that machine (setDOMAIN=http://localhost:8082until you have a real hostname). Good enough to create your account and try it out - not a way to run it long term, since the extension and phone apps still can't use it.
Backing it up
Everything that matters lives in the ./data folder from the compose
file above - your entire encrypted vault. This is exactly what
Backups 101 is for; make sure this folder is
explicitly included in whatever backup scope you set up there. A lost,
un-backed-up Vaultwarden instance means losing every password you
stored in it, not just a service you can reinstall.
Next: Photo Backup with Immich.