Axel Verne → Junk Drawer kit → Chapter 8
Chapter 8 — Break Up With Big Tech II: Password Manager → Vaultwarden
6 blocks to copy, in the order they appear in the chapter. Nothing here is required to be typed by hand.
The build
8.1 · bash
mkdir -p /srv/lab/compose/vaultwarden && cd /srv/lab/compose/vaultwarden8.2 · yaml
services:
vaultwarden:
image: vaultwarden/server:latest
container_name: vaultwarden
restart: unless-stopped
environment:
DOMAIN: "https://vault.local" # change to your hostname
SIGNUPS_ALLOWED: "false" # disabled after you create your account
INVITATIONS_ALLOWED: "false"
ADMIN_TOKEN: "${ADMIN_TOKEN}" # see below
volumes:
- /srv/lab/data/vaultwarden:/data
ports:
- "8000:80" # plain HTTP from Caddy
networks:
- vw-net
caddy:
image: caddy:2-alpine
container_name: caddy-vw
restart: unless-stopped
ports:
- "443:443"
- "443:443/udp" # HTTP/3
volumes:
- ./Caddyfile:/etc/caddy/Caddyfile:ro
- caddy-data:/data
- caddy-config:/config
networks:
- vw-net
environment:
DOMAIN: "vault.local" # must match above
networks:
vw-net:
driver: bridge
volumes:
caddy-data:
caddy-config:8.3 · bash
docker run --rm vaultwarden/server:latest /vaultwarden hash --preset bitwarden -i 38.4 · bash
ADMIN_TOKEN='$argon2id$v=19$m=...(the whole hash)'8.5 · text
vault.local {
tls internal # local CA, self-signed certs
reverse_proxy vaultwarden:80
}8.6 · bash
docker compose up -d
docker compose logs -f caddy # wait for "listening on..." then Ctrl-CGet the next build in your inbox
An email when a new build write-up goes up: what I ran, on what hardware, and the commands that paste. Free, unsubscribe any time. The kit stays free either way.