En selvhostet password manager lyder som et sidste projekt for paranoide sysadmins. Men efter at endnu en cloud-tjeneste har lækket krypterede vaults i 2026, er der en voksende gruppe danske og nordiske brugere, der vil have deres adgangskoder på egen server, med egen backup og uden en tredjeparts sky mellem dem og deres data. Vaultwarden gør det muligt uden at give afkald på Bitwardens app-økosystem. Denne guide viser dig, hvordan du sætter det op fra bunden, sikrer det korrekt og undgår de fejl, der rammer de fleste førstegangsbrugere.

Vaultwarden er en uofficiel, Bitwarden-kompatibel server skrevet i Rust af udvikleren dani-garcia. Projektet har samlet 65.508 stjerner på GitHub og bruges af alt fra enkeltpersoner til mindre virksomheder, der ikke vil betale for Bitwardens hostede business-planer. Den seneste stabile version er 1.37.1, udgivet den 29. juli 2026. Fordi den er langt lettere end den officielle Bitwarden-server (den bruger typisk under 50 MB RAM mod flere hundrede for den .NET-baserede officielle server), kører den fint på selv billig VPS-hardware eller en Raspberry Pi.

Hvorfor selvhoste sin password manager i 2026

De fleste bruger en cloud-baseret password manager, fordi det er nemt. Problemet er, at du så stoler på, at en tredjepart aldrig bliver hacket, aldrig ændrer sin prispolitik, og aldrig lukker uden varsel. Med Vaultwarden ejer du hele kæden: serveren, databasen og krypteringsnøglerne rører aldrig en fremmed sky. End-to-end-krypteringen sker stadig lokalt i klienten, ligesom i den officielle Bitwarden-app, så selv hvis din server bliver kompromitteret, forbliver de gemte adgangskoder krypteret uden din masterpassword.

Der er også en ren praktisk fordel: Vaultwarden understøtter alle officielle Bitwarden-klienter, browser-udvidelser, mobilapps, desktop-apps og CLI, uden at du behøver skifte software. Du peger bare klienten mod din egen server-URL i stedet for bitwarden.com. Fra GDPR-perspektivet betyder det også, at data om dine login-oplysninger aldrig forlader EU/EØS, hvis du hoster på en dansk eller europæisk VPS, hvilket forenkler compliance for virksomheder, der er underlagt Databeskyttelsesforordningens artikel 32 om sikker databehandling.

Ulempen er ærlig talt vedligeholdelse. Du er selv ansvarlig for opdateringer, backup og patching af sårbarheder. Det er derfor, sikkerhedsdelen af denne guide fylder lige så meget som selve opsætningen.

Hvem bør vælge selvhosting frem for cloud

Selvhosting er ikke den rigtige løsning for alle. Er du en almindelig privatbruger uden interesse i serverdrift, får du sandsynligt mere sikkerhed ud af en betalt, officiel cloud-løsning, hvor et helt team overvåger infrastrukturen døgnet rundt. Vaultwarden giver mest mening for tre typer brugere: teknisk kyndige privatpersoner, der allerede kører en hjemmeserver eller VPS til andre formål, små virksomheder og foreninger, der skal dokumentere, hvor persondata fysisk ligger som led i GDPR-compliance, og IT-afdelinger, der ønsker central kontrol over adgangsstyring uden at betale for en fuld Bitwarden Business-licens.

Spørg dig selv, om du realistisk kan afsætte tid til at opdatere serveren, når der kommer en sikkerhedsrettelse, som det ofte sker med kort varsel. Kan du ikke det, er en officiel cloud-løsning det mere robuste valg, selv for en sikkerhedsbevidst bruger. Denne guide forudsætter, at du kan afsætte den tid, og at du forstår, at ansvaret for driften ligger hos dig selv, ikke hos en leverandør.

En god tommelfingerregel: hvis du allerede kører andre selvhostede tjenester, som en mediaserver, en hjemmeautomatiseringsplatform eller en privat DNS-blokering, har du sandsynligvis allerede vanerne og rutinerne til at holde en Vaultwarden-instans kørende sikkert. Er dette derimod dit første selvhostede projekt nogensinde, kan det være en god idé at starte med noget mindre kritisk, før du flytter dine faktiske adgangskoder over.

Sådan virker krypteringen bag kulisserne

Det vigtigste at forstå, før du sætter noget op, er at Vaultwarden-serveren aldrig ser din masterpassword i klartekst, og den kan derfor heller aldrig læse indholdet i din vault. Krypteringen foregår udelukkende i klienten, altså i browser-udvidelsen, desktop-appen eller mobilappen, før noget som helst sendes til serveren. Det kaldes en zero-knowledge-arkitektur.

Når du logger ind, strækker klienten din masterpassword gennem en nøgleafledningsfunktion (typisk PBKDF2 eller Argon2id, afhængigt af kontoens indstillinger) flere hundrede tusinde gange, hvilket gør brute force-angreb upraktisk selv med kraftig hardware. Den afledte nøgle bruges derefter til at dekryptere din personlige krypteringsnøgle, som igen bruges til at dekryptere de enkelte poster i din vault med AES-256-CBC. Serveren opbevarer og synkroniserer altså kun krypteret data, den kan aldrig regne masterpassworden ud fra det, den modtager. Det er grunden til, at selv en fuldt kompromitteret Vaultwarden-server, i teorien, ikke direkte afslører dine adgangskoder, forudsat at din masterpassword er stærk nok.

Forudsætninger: dette skal du bruge

Før du går i gang, skal følgende være på plads. Brug ikke ældre versioner end dem nævnt her, medmindre du har en konkret grund; nyere versioner lukker kendte sårbarheder.

  • En VPS eller hjemmeserver med mindst 1 GB RAM og 10 GB diskplads (Vaultwarden selv fylder meget lidt, men OS og backup tager plads)
  • Ubuntu 24.04 LTS eller 26.04 LTS, eller Debian 13 “Trixie” (udgivet 9. august 2025, aktuel stabil gren) — undgå Debian 12 “Bookworm”, som når end-of-life 11. juli 2026
  • Docker Engine, aktuel version 29.7.2
  • Docker Compose plugin, aktuel version v5.4.0
  • Et domænenavn, du kontrollerer, med DNS peget mod din servers IP-adresse
  • Caddy som reverse proxy, aktuel version v2.11.4 (eller nginx, hvis du foretrækker manuel TLS-konfiguration)
  • Grundlæggende kendskab til SSH og terminalkommandoer
  • En SMTP-konto til udsendelse af e-mails (invitationer, password-reset), fx via et eksisterende Office 365- eller Google Workspace-abonnement

Du behøver ikke betale for licens. Vaultwarden er udgivet under AGPL-3.0-licensen og er gratis at bruge, også kommercielt, forudsat at du overholder open source-vilkårene. Vær opmærksom på, at AGPL kræver, at du gør din kildekode tilgængelig, hvis du ændrer i Vaultwarden selv og tilbyder den ændrede version som en netværkstjeneste til andre, hvilket sjældent er relevant for en almindelig privat opsætning, men er værd at kende, hvis du planlægger at tilpasse serveren.

Estimatet af tidsforbrug for hele opsætningen, fra tom server til fuldt fungerende vault med backup, er typisk 45 til 90 minutter for en, der har prøvet Docker før. Har du aldrig brugt Docker, så afsæt gerne en hel eftermiddag, da fejlfindingsafsnittet sidst i guiden dækker de mest almindelige forhindringer undervejs.

Valg af VPS eller hjemmeserver

Hvis du ikke allerede har en server kørende, er det værd at overveje, hvor den fysisk skal stå. For danske og nordiske brugere med fokus på GDPR-compliance giver det mening at vælge en udbyder med datacentre inden for EU/EØS, så du kan dokumentere, at persondata aldrig forlader regionen. De fleste større europæiske VPS-udbydere tilbyder billige instanser med 1-2 GB RAM til få dollars om måneden, hvilket er rigeligt til Vaultwarden alene. Kører du allerede en hjemmeserver eller NAS, kan du sagtens tilføje Vaultwarden som endnu en container ved siden af dine eksisterende tjenester, forudsat at du har styr på port-forwarding og dynamisk DNS, hvis din internetudbyder ikke giver dig en fast IP-adresse.

Uanset valg af hosting bør du undgå at placere Vaultwarden på samme server som andre offentligt eksponerede tjenester, du ikke selv har fuld kontrol over patchingen af. Jo mindre angrebsfladen er omkring din vault-server, jo bedre.

Trin 1: Opdater serveren og installer Docker

Log ind på din server via SSH og sørg for, at systemet er fuldt opdateret, inden du installerer noget som helst.

sudo apt update && sudo apt upgrade -y
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh
sudo usermod -aG docker $USER
newgrp docker
docker --version
docker compose version

Kør docker --version og docker compose version for at bekræfte, at begge dele virker uden sudo. Hvis du får en “permission denied”-fejl, skal du logge helt ud og ind igen, så gruppemedlemskabet slår igennem. Undgå at installere Docker via distributionens eget pakkearkiv (fx apt install docker.io), da disse pakker ofte halter flere versioner bagefter det officielle Docker-arkiv, hvilket kan betyde manglende funktioner i Compose-filen nedenfor. Du kan læse mere om Compose-syntaksen i Dockers officielle Compose-dokumentation, hvis du støder på felter, denne guide ikke dækker.

Trin 2: Opret mappestruktur og miljøvariabler

Hold dine data adskilt fra selve containerkonfigurationen. Det gør backup og opgraderinger langt enklere senere.

mkdir -p ~/vaultwarden/{data,caddy_data,caddy_config}
cd ~/vaultwarden
touch .env docker-compose.yml Caddyfile

Generér derefter en stærk admin-token. Denne bruges til Vaultwardens administrationspanel, hvor du opretter brugere og styrer serverens indstillinger. Fra version 1.37 anbefaler Vaultwarden-teamet at bruge en Argon2-hashet token frem for klartekst.

docker run --rm vaultwarden/server:1.37.1 /vaultwarden hash

Kommandoen beder dig taste en adgangskode to gange og returnerer en lang streng, der starter med $argon2id$. Gem den, du skal bruge den i næste trin. Vælg en admin-adgangskode, der er mindst lige så stærk som din masterpassword til selve vaulten, da admin-panelet giver fuld kontrol over serverens brugere og indstillinger, herunder muligheden for at deaktivere andre brugeres 2FA.

Trin 3: Skriv docker-compose.yml

Dette er kernen i opsætningen. Nedenstående konfiguration kører Vaultwarden 1.37.1 sammen med Caddy som reverse proxy, der automatisk henter og fornyer TLS-certifikater via Let’s Encrypt.

services:
  vaultwarden:
    image: vaultwarden/server:1.37.1
    container_name: vaultwarden
    restart: unless-stopped
    environment:
      DOMAIN: "https://vault.dinDomæne.dk"
      SIGNUPS_ALLOWED: "false"
      ADMIN_TOKEN: "${ADMIN_TOKEN}"
      SMTP_HOST: "${SMTP_HOST}"
      SMTP_FROM: "${SMTP_FROM}"
      SMTP_PORT: "587"
      SMTP_SECURITY: "starttls"
      SMTP_USERNAME: "${SMTP_USERNAME}"
      SMTP_PASSWORD: "${SMTP_PASSWORD}"
      WEBSOCKET_ENABLED: "true"
      LOG_LEVEL: "warn"
    volumes:
      - ./data:/data
    networks:
      - vw_net

  caddy:
    image: caddy:2.11.4
    container_name: vw_caddy
    restart: unless-stopped
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - ./Caddyfile:/etc/caddy/Caddyfile
      - ./caddy_data:/data
      - ./caddy_config:/config
    networks:
      - vw_net
    depends_on:
      - vaultwarden

networks:
  vw_net:
    driver: bridge

Bemærk SIGNUPS_ALLOWED: "false". Det er en af de vigtigste linjer i hele filen. Uden den kan alle med adgang til din URL oprette en konto på din server. Du inviterer i stedet brugere manuelt via admin-panelet, når resten af opsætningen er på plads. Bemærk også WEBSOCKET_ENABLED: "true", som aktiverer live-synkronisering, så ændringer i vaulten dukker op på dine andre enheder med det samme i stedet for først ved næste manuelle opdatering, og LOG_LEVEL: "warn", som holder logfilerne læsbare uden at drukne i debug-støj, samtidig med at du stadig fanger reelle fejl.

Trin 4: Opret .env-filen

Miljøvariablerne med følsomme værdier hører hjemme i en separat .env-fil, som aldrig committes til et versionsstyringssystem.

ADMIN_TOKEN=$argon2id$v=19$m=65540,t=3,p=4$dinHashHer...
SMTP_HOST=smtp.office365.com
SMTP_FROM=vault@dinDomæne.dk
SMTP_USERNAME=vault@dinDomæne.dk
SMTP_PASSWORD=dinSmtpAdgangskode

Sæt filrettigheder, så kun din bruger kan læse den:

chmod 600 .env

Trin 5: Konfigurer Caddyfile til automatisk TLS

Caddy er valgt her frem for nginx, fordi den håndterer Let’s Encrypt-certifikater automatisk uden ekstra scripts eller cron-jobs til fornyelse. Ønsker du i stedet at bruge nginx, kan du finde tilsvarende reverse proxy-konfiguration i Caddys officielle dokumentation, som også dækker overgangen fra manuel til automatisk certifikatstyring. Din Caddyfile skal se sådan ud:

vault.dinDomæne.dk {
    reverse_proxy vaultwarden:80

    header {
        Strict-Transport-Security "max-age=31536000; includeSubDomains; preload"
        X-Content-Type-Options "nosniff"
        X-Frame-Options "SAMEORIGIN"
        Referrer-Policy "same-origin"
    }

    encode gzip
}

HSTS-headeren tvinger browseren til altid at bruge HTTPS til din vault-URL fremover, hvilket lukker et helt angrebsvindue for man-in-the-middle-angreb på ukrypterede forbindelser.

Trin 6: Start containerne

Med alle filer på plads kan du starte stakken:

docker compose up -d
docker compose logs -f vaultwarden

Hvis alt går, som det skal, ser du en logbesked, der ligner dette output, uden fejl om manglende miljøvariabler eller port-konflikter:

[INFO] vaultwarden 1.37.1
[INFO] Config validated
[INFO] Started Rocket server on 0.0.0.0:80
[INFO] WebSocket server listening on 0.0.0.0:3012
[INFO] Vaultwarden ready to accept connections

Åbn https://vault.dinDomæne.dk i browseren. Caddy skal automatisk have hentet et gyldigt TLS-certifikat i løbet af få sekunder, så du ser en grøn hængelås uden advarsler.

Trin 7: Opret din første bruger via admin-panelet

Gå til https://vault.dinDomæne.dk/admin og log ind med din klartekst-adgangskode (den du hashede i trin 2, ikke selve hashen). Herfra kan du sende en invitation til din egen e-mail under fanen “Users”. Da SIGNUPS_ALLOWED er sat til false, er invitation den eneste vej ind, hvilket er præcis, hvad du vil have på en privat instans.

Klik på invitationslinket i din mail, sæt en stærk masterpassword (mindst 16 tegn, gerne en tilfældig passphrase frem for et mønster), og din konto er klar.

Trin 8: Installer Bitwarden-klienterne og peg dem mod din server

Vaultwarden fungerer med de officielle Bitwarden-klienter uændret. Installer den nyeste version af browser-udvidelsen, desktop-appen eller mobilappen fra Bitwardens officielle kanaler, og skift derefter server-URL, før du logger ind:

  • Browser-udvidelse: klik på tandhjulsikonet på login-skærmen → “Self-hosted” → indtast din server-URL
  • Desktop-app: Settings → indstil “Self-hosted” og server-URL
  • Mobilapp (iOS/Android): tryk på “…” på login-skærmen → “Self-hosted environment” → indtast URL

Brug altid den nyeste udgave af klienterne fra Bitwardens officielle hjælpecenter eller app store, da klienterne løbende opdateres til at understøtte nyere API-funktioner i Vaultwarden. Undgå at hente klienter fra tredjeparts app-stores eller uofficielle spejle, da det er en oplagt vej for angribere til at distribuere manipulerede versioner, der stjæler din masterpassword, før den overhovedet når din server.

Trin 9: Aktivér totrinsbekræftelse (2FA)

Dette trin er ikke valgfrit, hvis du tager sikkerhed alvorligt. Gå til Settings → Security → Two-step Login i din klient og aktivér enten en TOTP-app (Aegis, Bitwarden Authenticator eller lignende) eller en fysisk sikkerhedsnøgle via WebAuthn/FIDO2, hvis din Vaultwarden-version understøtter det.

# Kontrollér, at WebAuthn er aktiveret i din Vaultwarden-instans
docker exec vaultwarden env | grep -i webauthn

Gem dine 2FA-recovery-koder et sikkert sted, gerne udskrevet og opbevaret fysisk adskilt fra computeren. Mister du både masterpassword og 2FA-adgang samtidig, er der ingen “glemt adgangskode”-genvej på en selvhostet instans, i modsætning til en cloud-tjeneste, hvor en supportmedarbejder i det mindste kan starte en identitetsbekræftelsesproces. Som administrator kan du dog nulstille en brugers 2FA via admin-panelet, hvis du selv har mistet adgangen til din autenticator-app, men stadig kan logge ind som admin, hvilket er endnu en grund til at holde admin-adgangskoden adskilt fra din vault-masterpassword.

Trin 10: Sæt automatisk backup op

Al data ligger i mappen ~/vaultwarden/data, herunder SQLite-databasen, vedhæftede filer og RSA-nøglerne til serveren. Et simpelt cron-job, der laver et krypteret, komprimeret backup-arkiv hver nat, er tilstrækkeligt for de fleste:

#!/bin/bash
# backup-vaultwarden.sh
DATE=$(date +%Y-%m-%d)
BACKUP_DIR=/home/backup/vaultwarden
mkdir -p $BACKUP_DIR
tar -czf - -C ~/vaultwarden data | \
  gpg --symmetric --cipher-algo AES256 -o $BACKUP_DIR/vw_backup_$DATE.tar.gz.gpg
find $BACKUP_DIR -name "*.gpg" -mtime +30 -delete

Læg scriptet i crontab, så det kører automatisk hver nat, og flyt kopier off-site, fx til en separat S3-kompatibel bucket eller en NAS på et andet fysisk sted:

chmod +x backup-vaultwarden.sh
crontab -e
# Tilføj linjen:
0 3 * * * /home/dinbruger/backup-vaultwarden.sh

Trin 11: Hold Vaultwarden opdateret

Opdatering af en containeriseret Vaultwarden-instans er én kommando, men den er kritisk at gennemføre regelmæssigt. Se afsnittet om CVE-historik nedenfor for at forstå, hvorfor.

cd ~/vaultwarden
docker compose pull
docker compose up -d
docker image prune -f

Tag altid en backup, før du opgraderer på tværs af større versionsnumre (fx fra 1.34 til 1.37), da databaseskemaet nogle gange ændres mellem major-releases.

Trin 12: Overvåg og test opsætningen

Før du erklærer opsætningen for produktionsklar, bør du tjekke følgende:

  • Kør et SSL-test via en ekstern scanner for at bekræfte, at TLS-konfigurationen ikke har svage cifre
  • Test password-reset-flowet ved at sende en reset-mail til dig selv
  • Bekræft, at WebSocket-forbindelsen virker (den bruges til live-synkronisering mellem enheder), ved at ændre en post på én enhed og se den dukke op på en anden uden manuel opdatering
  • Simulér et serverudfald ved at genstarte containeren og bekræfte, at data overlever: docker compose restart vaultwarden

Overvej også at sætte simpel uptime-overvågning op, fx et gratis eksternt tjenesteovervågningsværktøj, der pinger din vault-URL hvert femte minut og advarer dig via e-mail eller SMS, hvis serveren holder op med at svare. En password manager, der er utilgængelig, når du har mest brug for den, fx midt i et login på en ny enhed, er en dårlig oplevelse, som god overvågning let forhindrer.

Hærd serveren yderligere med firewall og SSH-lockdown

Vaultwarden-containeren kan være perfekt konfigureret og stadig være sårbar, hvis selve serveren omkring den er åben. Før du regner opsætningen for færdig, bør du lukke alle porte undtagen dem, du faktisk bruger, og fjerne password-baseret SSH-login til fordel for nøgler.

# Aktivér UFW og tillad kun SSH, HTTP og HTTPS
sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw allow OpenSSH
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw enable
sudo ufw status verbose

Deaktivér derefter password-login i SSH helt, så kun nøglebaseret autentificering er mulig. Rediger /etc/ssh/sshd_config og sæt PasswordAuthentication no, genstart så SSH-tjenesten med sudo systemctl restart sshd. Test altid, at du kan logge ind med din nøgle i en ny terminal, før du lukker den nuværende session, så du ikke risikerer at låse dig selv ude.

Migrering fra Bitwarden Cloud eller andre managers

Skifter du fra den officielle Bitwarden-cloud, 1Password, LastPass eller en anden password manager, behøver du ikke genindtaste alle dine logins manuelt. De fleste managers, inklusive Bitwarden selv, understøtter eksport til et standardiseret CSV- eller JSON-format under kontoindstillingerne.

Log ind på din nye Vaultwarden-konto via en af klienterne, gå til Tools → Import Data, vælg det format, der matcher din tidligere tjeneste, og upload filen. Importfunktionen mapper automatisk felter som brugernavn, adgangskode, URL og noter til de tilsvarende felter i din nye vault. Slet altid eksportfilen umiddelbart efter import, da den ligger som ukrypteret klartekst på din disk, indtil du sletter den, hvilket i sig selv er en sikkerhedsrisiko, hvis nogen får fysisk eller fjernadgang til maskinen i mellemtiden.

Efter en import bør du bruge lidt tid på at rydde op. De fleste password managers akkumulerer over årene dubletter, forældede logins til lukkede tjenester og adgangskoder, der aldrig er blevet skiftet siden oprettelsen. Brug lejligheden til at gennemgå listen, slette det, du ikke længere bruger, og skifte de svageste eller ældste adgangskoder, mens du alligevel er i gang. Bitwarden-klienterne har en indbygget “Password Health”-rapport, der markerer svage, genbrugte og eksponerede adgangskoder ud fra kendte databrud, hvilket er et godt startpunkt for oprydningen.

Sikkerhedshistorik: hvorfor versionsnummeret betyder noget

Vaultwarden har, som al aktivt vedligeholdt software, haft en række sårbarheder rettet gennem 2025 og 2026. At holde styr på denne historik er ikke akademisk, det er direkte afgørende for, om din instans er sikker.

CVEBeskrivelseRammer versionerRettet i
CVE-2025-24364 / CVE-2025-24365Remote code execution og rettighedseskalering via admin-paneletAlle versioner til og med 1.32.71.33.0
CVE-2026-278012FA-bypass ved beskyttede handlinger (adgang til API-nøgle, sletning af vault)≤ 1.34.31.35.0
CVE-2026-26012Fuld cipher-enumerering på tværs af collection-tilladelser< 1.35.31.35.3
CVE-2026-27803 / CVE-2026-27898Manglende autorisationstjek for Manager-rolle og uautoriseret cipher-opdatering< 1.35.41.35.4
CVE-2026-47159SSO-discovery lækker organisationsdata og tillader misbrug af pre-validation-flow< 1.36.01.36.0

Konklusionen er enkel: kør aldrig en version ældre end 1.36.0, og gå efter den aktuelle 1.37.1, hvis du sætter en ny instans op i dag. Sæt gerne Vaultwardens release-side på GitHub på din watch-liste, så du får besked, næste gang der kommer en sikkerhedsrettelse. Du kan også følge de enkelte sårbarheder direkte via NVD, fx CVE-2026-47159 og CVE-2026-27801, hvis du vil læse den fulde tekniske beskrivelse af, hvordan hver enkelt fejl kunne udnyttes.

5 almindelige faldgruber, når du sætter Vaultwarden op

De fleste problemer med selvhostede Vaultwarden-instanser stammer fra de samme fem fejl, gang på gang.

  1. At glemme SIGNUPS_ALLOWED=false. Uden denne variabel kan enhver, der finder din URL, oprette en konto. Det er den mest almindelige og mest alvorlige fejl.
  2. At eksponere admin-panelet uden ekstra beskyttelse. Overvej at begrænse /admin-stien til bestemte IP-adresser i din Caddyfile eller kræve en VPN-forbindelse for adgang.
  3. At springe SMTP-opsætning over. Uden fungerende e-mail kan du hverken invitere brugere eller sende password-reset-links, hvilket låser dig selv ude, hvis du glemmer din masterpassword.
  4. At bruge selvsignerede certifikater i stedet for Let’s Encrypt. Bitwarden-klienterne, især mobilapps, afviser ofte forbindelser med certifikater, de ikke stoler på, hvilket giver kryptiske fejl uden klar årsag.
  5. At glemme backup af RSA-nøglefilerne. Mister du filerne i data/-mappen uden backup, mister du adgangen til alt indhold permanent, uanset hvor stærk din masterpassword er.

Sikkerhedstjekliste før du går i produktion

Inden du begynder at bruge din nye vault til rigtige adgangskoder, er det værd at gennemgå denne korte tjekliste én sidste gang. Den samler de vigtigste punkter fra guidens tolv trin, så du hurtigt kan verificere, at intet er glemt.

  • SIGNUPS_ALLOWED er sat til false i docker-compose.yml
  • Admin-token er en Argon2-hashet streng, ikke klartekst
  • .env-filen har rettigheder 600 og er ikke tilgængelig for andre brugere på systemet
  • TLS-certifikatet er gyldigt og udstedt af Let’s Encrypt, ikke selvsigneret
  • 2FA er aktiveret på din brugerkonto, og recovery-koder er gemt sikkert offline
  • Backup-scriptet kører automatisk hver nat og er testet mindst én gang med en faktisk gendannelse
  • Firewall tillader kun port 22, 80 og 443, alt andet er lukket
  • SSH accepterer kun nøglebaseret login, ikke adgangskoder

Fejlfinding: 8 problemer og deres løsninger

Selv med en omhyggelig opsætning støder de fleste ind i mindst ét af følgende problemer undervejs. Her er de fejl, du oftest støder på, og hvordan du løser dem hurtigt, uden at skulle grave dig igennem lange GitHub-issues.

  1. “502 Bad Gateway” fra Caddy. Vaultwarden-containeren er sandsynligvis ikke klar endnu, eller portnavnet i Caddyfile matcher ikke servicenavnet i docker-compose.yml. Tjek med docker compose ps.
  2. Certifikat udstedes ikke. Bekræft, at port 80 og 443 er åbne i din firewall, og at DNS’en for domænet peger korrekt mod serverens IP, før Caddy forsøger ACME-udfordringen.
  3. WebSocket-synkronisering virker ikke. Sørg for, at din reverse proxy videresender WebSocket-headers korrekt; Caddy gør dette automatisk med reverse_proxy, men nginx kræver eksplicitte Upgrade– og Connection-headers.
  4. E-mails sendes ikke. Test SMTP-legitimationsoplysningerne isoleret med et værktøj som swaks, før du fejlsøger inde i containeren.
  5. “Invalid admin token”. Husk, at admin-token skal være den hashede Argon2-streng i .env, ikke klartekstadgangskoden du brugte til at generere den.
  6. Container genstarter i loop. Kør docker compose logs vaultwarden og kig efter fejl i miljøvariablerne; en manglende eller forkert formateret variabel er den hyppigste årsag.
  7. Mobilappen kan ikke oprette forbindelse. Bekræft, at certifikatkæden er komplet (ikke kun leaf-certifikatet), hvilket Caddy som udgangspunkt sørger for automatisk.
  8. Database er låst (“database is locked”). Dette sker typisk ved høj samtidighed på SQLite, fordi filbaserede databaser kun tillader én skriveoperation ad gangen. Overvej at migrere til PostgreSQL eller MySQL, hvis du har mange samtidige brugere, da begge understøtter parallelle skrivninger uden denne begrænsning.

Løser ingen af disse punkter dit problem, er Vaultwardens eget GitHub-issue-spor og community-wiki gode steder at søge videre, da langt de fleste fejl allerede er dokumenteret af andre, der har ramt samme forhindring.

Avancerede tips til drift i produktion

Når grundopsætningen kører stabilt, er der en række forbedringer, der løfter sikkerheden og driftssikkerheden yderligere.

Skift til PostgreSQL for flere brugere. SQLite, som er standard, fungerer fint for enkeltpersoner og små husstande, men hvis du kører Vaultwarden for et team, giver PostgreSQL bedre samtidighed og færre databasefejl under belastning.

Begræns admin-panelet til VPN eller specifikke IP’er. Tilføj en @admin_only-matcher i din Caddyfile, der kun tillader adgang til /admin-stien fra din egen VPN-tunnel eller et fast sæt IP-adresser.

Aktivér fail2ban mod brute force. Vaultwarden logger mislykkede login-forsøg, som fail2ban kan overvåge og automatisk blokere gentagne angreb fra samme IP.

Automatisér opdateringstjek uden auto-opgradering. Brug et værktøj som Watchtower i “notify only”-tilstand frem for automatisk opgradering, så du selv kan validere en ny version, før den rulles ud på produktionsdata.

Aktivér organisationer for familiedeling. Vaultwarden understøtter Bitwardens organisationsfunktion, som lader dig dele udvalgte logins med familiemedlemmer eller kolleger uden at afsløre hele din vault.

Overvåg diskforbrug og logfiler løbende. En vault med mange vedhæftede filer kan vokse over tid. Sæt et simpelt overvågningsscript op, der advarer dig, hvis diskforbruget nærmer sig grænsen, så du undgår, at serveren stopper med at skrive data midt i en synkronisering.

Test din backup regelmæssigt, ikke kun opsætningen af den. En backup, du aldrig har prøvet at gendanne, er ikke en garanti for noget. Sæt en fast kalenderpåmindelse hvert kvartal til at gendanne en testkopi i et isoleret miljø og bekræfte, at data rent faktisk er intakte og læsbare.

Fuldt fungerende docker-compose-projekt

Her er hele opsætningen samlet i én mappe, klar til at klone og tilpasse. Gem hver blok i den angivne fil i mappen ~/vaultwarden.

# Filstruktur
~/vaultwarden/
├── .env
├── docker-compose.yml
├── Caddyfile
├── backup-vaultwarden.sh
├── data/
├── caddy_data/
└── caddy_config/

Med denne struktur på plads starter du hele stakken med én kommando, og du har både TLS, backup og admin-adgang klar fra dag ét:

cd ~/vaultwarden && docker compose up -d && docker compose ps

Forventet output efter en vellykket opstart:

NAME         IMAGE                       STATUS
vaultwarden  vaultwarden/server:1.37.1   Up 12 seconds
vw_caddy     caddy:2.11.4                Up 12 seconds

Vaultwarden vs. andre løsninger

Er selvhosting overhovedet den rigtige løsning for dig? Det afhænger af, hvor meget tid du vil bruge på drift, og hvor meget kontrol du kræver. Nedenstående tabel opsummerer de vigtigste forskelle mellem de mest almindelige alternativer, du sandsynligvis overvejer, hvis du læser denne guide.

LøsningHostingPrisVedligeholdelseBedst til
Vaultwarden (selvhostet)Egen serverKun serveromkostningerSelv ansvarligTeknisk kyndige brugere, virksomheder med databeskyttelseskrav
Bitwarden Cloud (officiel)Bitwardens skyGratis / betalt abonnementIngenBrugere, der vil have Bitwardens funktioner uden drift
1Password1Passwords skyBetalt abonnementIngenBrugere, der prioriterer UX frem for selvkontrol
KeePass/KeePassXCLokal filGratisManuel synkroniseringOffline-first-brugere uden behov for cloud-sync

Hvis du allerede sammenligner cloud-udbydere, kan vores gennemgang af 1Password mod LastPass være et godt supplement, hvis selvhosting alligevel ikke er noget for dig.

GDPR og Datatilsynet: hvad du skal huske som dansk bruger

Kører du Vaultwarden for andre end dig selv, fx en forening eller et lille firma, behandler du personoplysninger i juridisk forstand, og GDPR gælder. Artikel 32 i forordningen kræver “passende tekniske og organisatoriske foranstaltninger” for at sikre databehandlingen, hvilket i praksis betyder kryptering, adgangskontrol, logning og en plan for hændelseshåndtering, alt sammen ting, denne guide allerede dækker med TLS, 2FA og backup.

Fordelen ved selvhosting frem for en amerikansk cloud-tjeneste er, at du selv bestemmer, hvor dataene fysisk ligger, hvilket forenkler dokumentation af, at data forbliver inden for EU/EØS. Er du i tvivl om dine specifikke forpligtelser, bør du konsultere Datatilsynets vejledninger direkte, da kravene varierer efter, om du er dataansvarlig eller databehandler.

Husk også, at GDPR ikke kun handler om, hvor data ligger, men om hvordan du reagerer, hvis noget går galt. Har du en dokumenteret procedure for, hvordan du opdager og reagerer på et databrud inden for de 72 timer, forordningen kræver til anmeldelse til Datatilsynet? For en selvhostet løsning betyder det konkret, at du skal have logning aktiveret, så du kan se, om der har været uautoriserede login-forsøg, og en plan for, hvordan du underretter berørte brugere, hvis serveren mod forventning bliver kompromitteret.

Er selvhosting besværet værd

Efter at have gennemgået alle tolv trin er svaret nuanceret. Rent teknisk er opsætningen ikke svær, den kan gennemføres på under en time, når du har prøvet det én gang. Den reelle udfordring er vedligeholdelsen over tid: CVE-tabellen tidligere i artiklen viser, at Vaultwarden har haft flere sikkerhedsrettelser gennem 2025 og 2026, og hver af dem kræver, at du selv opdaterer, i modsætning til en cloud-tjeneste, hvor det sker automatisk i baggrunden.

Til gengæld får du noget, ingen cloud-tjeneste kan tilbyde: fuld kontrol over, hvor dine mest følsomme data fysisk befinder sig, ingen afhængighed af en tredjeparts forretningsmodel, og et projekt, der lærer dig grundlæggende sysadmin-færdigheder, du kan genbruge til andre selvhostede tjenester. For den rette bruger, en der er villig til at sætte 20-30 minutter af hver måned til opdateringer og backup-tjek, er det et fornuftigt bytte.

Ordliste: begreber du støder på undervejs

Har du aldrig arbejdet med Docker eller reverse proxies før, er her en kort forklaring af de vigtigste begreber, der dukker op flere gange i denne guide.

  • Reverse proxy: en tjeneste, der modtager al indgående webtrafik og videresender den til den rigtige interne tjeneste, i dette tilfælde Caddy, der videresender til Vaultwarden-containeren.
  • Zero-knowledge: en arkitektur, hvor serveren aldrig har adgang til de ukrypterede data, kun til krypterede blokke den ikke selv kan læse.
  • TOTP: Time-based One-Time Password, den type 6-cifrede koder, autenticator-apps genererer hvert 30. sekund som en del af totrinsbekræftelse.
  • WebAuthn/FIDO2: en standard for hardwarebaseret 2FA, fx via en fysisk sikkerhedsnøgle, der er mere modstandsdygtig over for phishing end TOTP-koder.
  • ACME: den protokol, Let’s Encrypt bruger til automatisk at udstede og forny TLS-certifikater uden manuel indgriben.
  • Container: en isoleret proces med sine egne afhængigheder, der kører oven på værtsmaskinens operativsystem uden en fuld virtuel maskine, hvilket gør Docker langt lettere end traditionel virtualisering.

Ofte stillede spørgsmål

Er Vaultwarden lige så sikkert som officiel Bitwarden?

Kryptografisk bruger de samme algoritmer, da Vaultwarden implementerer Bitwardens åbne API-protokol, herunder samme klient-side kryptering med AES-256 og nøgleafledning via PBKDF2 eller Argon2id. Forskellen ligger i, hvem der er ansvarlig for serverens sikkerhed: hos officiel Bitwarden er det Bitwarden selv, med et helt sikkerhedsteam bag, hos Vaultwarden er det dig. Det er derfor patching og korrekt konfiguration er så vigtigt, og hvorfor CVE-tabellen tidligere i artiklen er værd at holde øje med løbende.

Kan jeg køre Vaultwarden uden domænenavn?

Teknisk ja, med et selvsigneret certifikat eller en tjeneste som Tailscale til privat netværksadgang, men mobilapps og browsere klager ofte over ikke-betroede certifikater. Et gratis domænenavn kombineret med Let’s Encrypt er den mest problemfri løsning.

Hvor meget koster det at drive en Vaultwarden-instans?

Selve softwaren er gratis. Du betaler kun for hosting, typisk en lille VPS, der kan koste alt fra få dollars om måneden til lidt mere, afhængigt af udbyder og region.

Kan jeg migrere fra 1Password eller LastPass til Vaultwarden?

Ja. Eksportér din vault som CSV eller JSON fra den nuværende tjeneste, og importér den derefter via Bitwarden-klientens indbyggede importfunktion, som understøtter de fleste populære formater.

Hvad sker der, hvis min server går ned?

Bitwarden-klienterne cacher din vault lokalt og krypteret, så du fortsat har adgang til dine gemte logins offline, selv når serveren er utilgængelig. Nye opdateringer synkroniseres, så snart forbindelsen genoprettes. Det er netop derfor, denne guide lægger så meget vægt på backup: cachen redder dig fra kortere udfald, men kun en fungerende backup redder dig, hvis serverens disk fejler permanent.

Skal jeg bruge SQLite eller PostgreSQL?

SQLite er standard og fungerer fint for enkeltpersoner og husstande. Overvej PostgreSQL, hvis flere end en håndfuld brugere tilgår instansen samtidig, da det håndterer samtidighed bedre.

Er admin-panelet sikkert at eksponere offentligt?

Det anbefales ikke uden ekstra beskyttelseslag. Begræns adgangen via IP-filtrering i din reverse proxy eller kræv en VPN-forbindelse, selv med en stærk admin-token på plads.

Kan jeg bruge Vaultwarden på en Raspberry Pi?

Ja, Vaultwardens lave ressourceforbrug gør det til et populært valg til hjemmeservere og Raspberry Pi-opsætninger, forudsat at du har en stabil internetforbindelse og opsætter dynamisk DNS, hvis din IP-adresse ikke er statisk.