Ghid · 30 de minute · Debian · Ubuntu
Manager de parole propriu, cu Vaultwarden
Vaultwarden este o reimplementare în Rust a serverului Bitwarden. Aplicațiile și extensiile oficiale Bitwarden se conectează la el fără modificări, dar consumă câteva zeci de MB de memorie în loc de câțiva GB, fiindcă nu are nevoie de MSSQL și de restul serviciilor din varianta oficială.
Ai nevoie de
- Un VPS securizat, cu porturile 80 și 443 deschise
- Un domeniu cu înregistrare A către IP-ul serverului
- Docker și Docker Compose instalate
- 01
Înțelege ce ai de protejat
Serverul ăsta va ține toate parolele tale. Două lucruri nu sunt opționale și nu se amână: HTTPS valid și backup extern. Fără primul, clienții refuză să se conecteze. Fără al doilea, o singură ștergere greșită îți pierde arhiva de parole.
Restul ghidului presupune că ai citit fraza de mai sus.
AtențieNu porni Vaultwarden pe HTTP „doar ca să testez". Clienții Bitwarden refuză conexiunile necriptate, iar dacă ocolești asta pentru test, riști să rămână așa.
- 02
Generează token-ul de administrare
Panoul de administrare se protejează cu un token. Vaultwarden acceptă și un token în clar, dar forma corectă e un hash Argon2: chiar dacă cineva citește fișierul de configurare, nu obține token-ul.
Comanda de mai jos îți cere token-ul și îți dă hash-ul. Salvează token-ul în clar în managerul tău de parole actual, iar hash-ul îl pui în configurație.
docker run --rm -it vaultwarden/server /vaultwarden hash - 03
Scrie configurația
SIGNUPS_ALLOWED=false închide înregistrările publice. Fără el, oricine îți găsește domeniul își face cont pe serverul tău.
Îți creezi propriul cont înainte de a închide înregistrările, sau folosești invitații din panoul de administrare.
.env DOMENIU=parole.domeniul-tau.ro ADMIN_TOKEN='$argon2id$v=19$...' # hash-ul de la pasul anterior, între apostrofuri SIGNUPS_ALLOWED=false INVITATIONS_ALLOWED=trueAtențiePune hash-ul între apostrofuri simple. Conține caractere $ pe care shell-ul le-ar interpreta ca variabile, iar rezultatul ar fi un token gol, adică panou de administrare fără parolă.
- 04
Pornește serviciile
Vaultwarden ascultă doar pe rețeaua internă a containerelor. Caddy face reverse proxy și obține certificatul singur.
Datele stau într-un volum: baza de date SQLite, atașamentele și cheile RSA folosite pentru sesiuni.
docker-compose.yml services: vaultwarden: image: vaultwarden/server:latest restart: unless-stopped environment: DOMAIN: https://${DOMENIU} ADMIN_TOKEN: ${ADMIN_TOKEN} SIGNUPS_ALLOWED: ${SIGNUPS_ALLOWED} INVITATIONS_ALLOWED: ${INVITATIONS_ALLOWED} volumes: - vw-data:/data caddy: image: caddy:alpine restart: unless-stopped ports: ["80:80", "443:443"] volumes: - ./Caddyfile:/etc/caddy/Caddyfile:ro - caddy:/data depends_on: [vaultwarden] volumes: vw-data: caddy: - 05
Configurează reverse proxy-ul
Caddy cere certificatul la prima pornire și îl reînnoiește singur.
Caddyfile {$DOMENIU} { reverse_proxy vaultwarden:80 } - 06
Pornește, creează-ți contul, închide ușa
Ordinea contează: pornești, îți faci contul cât timp înregistrările sunt deschise, apoi le închizi.
După ce ai contul, verifică din panoul de administrare că înregistrările publice sunt oprite.
docker compose up -d docker compose logs -f caddy # urmărește emiterea certificatului # deschide https://parole.domeniul-tau.ro, creează-ți contul, apoi: sed -i 's/SIGNUPS_ALLOWED=true/SIGNUPS_ALLOWED=false/' .env docker compose up -d - 07
Pornește backup-ul înainte să pui prima parolă
Baza SQLite se copiază cu .backup, nu cu cp. O copie făcută în timp ce serverul scrie în ea poate fi coruptă exact atunci când ai nevoie de ea.
Trebuie salvate trei lucruri: baza de date, atașamentele și cheile RSA din /data. Fără chei, sesiunile existente devin invalide după restaurare.
/usr/local/bin/backup-vaultwarden.sh #!/usr/bin/env bash set -euo pipefail DEST=/var/backups/vaultwarden install -d -m 700 "$DEST" # .backup, nu cp: copie consistentă cât timp serverul scrie. docker compose exec -T vaultwarden \ sqlite3 /data/db.sqlite3 ".backup '/data/backup.sqlite3'" docker compose cp vaultwarden:/data/backup.sqlite3 "$DEST/db.sqlite3" docker compose cp vaultwarden:/data/attachments "$DEST/attachments" 2>/dev/null || true docker compose cp vaultwarden:/data/rsa_key.pem "$DEST/rsa_key.pem" docker compose exec -T vaultwarden rm -f /data/backup.sqlite3 tar czf "$DEST/../vaultwarden-$(date +%F).tar.gz" -C "$DEST" .AtențieTrimite arhiva în afara serverului și testează o restaurare acum, nu în ziua în care ai nevoie de ea. Vezi ghidul de backup cu restic.
Întrebări frecvente
+De ce Vaultwarden și nu serverul oficial Bitwarden?
Serverul oficial rulează mai multe servicii și o bază MSSQL, ceea ce înseamnă câțiva GB de memorie. Vaultwarden e o reimplementare în Rust cu același protocol: aceleași aplicații și extensii se conectează la el, dar încape confortabil pe cel mai mic plan din catalog.
+Ce VPS îmi trebuie?
Vaultwarden singur consumă zeci de MB. Planul de 2 GB acoperă serverul, reverse proxy-ul și sistemul, cu marjă. Nu ai nevoie de mai mult decât dacă pui alte servicii pe aceeași mașină.
+Aplicațiile oficiale Bitwarden funcționează cu el?
Da. În aplicație sau în extensie alegi „self-hosted" și introduci adresa serverului tău înainte de autentificare. Restul funcționează la fel.
+Ce se întâmplă dacă pierd serverul?
Aplicațiile păstrează o copie locală criptată a seifului, deci nu rămâi pe loc imediat. Dar fără backup nu poți reconstrui serverul, iar la următoarea reinstalare a aplicației pierzi accesul. De asta backup-ul se configurează înainte de prima parolă introdusă.