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 (which is designed for enterprise deployment via Docker Swarm/Kubernetes). You get the full Bitwarden client ecosystem pointed at your own server instead of Bitwarden's cloud.
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=false
- ADMIN_TOKEN=${ADMIN_TOKEN}
restart: unless-stopped
SIGNUPS_ALLOWED=false- set this after creating your own account(s), so a Vaultwarden instance briefly visible on your LAN can't be signed up to by anything else on the network.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: Bitwarden's
official browser extensions and mobile apps require a secure
context (HTTPS) to connect to a server - a plain
http://192.168.1.50:8082 works fine in a regular browser tab for
occasional use via the web vault, but the extension and mobile apps
will refuse to sync against a plain HTTP address.
You have two reasonable paths, since a proper reverse proxy with automatic TLS isn't covered until Reverse Proxy and TLS in Intermediate:
- Use the web vault only, for now. Log in at
http://server-ip:8082in a browser on your LAN. Not as convenient as the extension's autofill, but fully functional, and a fine way to run this for the rest of the Beginner tier. - Read the Reverse Proxy and TLS page out of order. If daily-driver extension/app support matters to you now, it's a reasonable exception to the tier ordering - Vaultwarden is one of the more common reasons people jump ahead to set up TLS earlier than "intended."
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.