 Autor: [Adam Nadolny](/autorzy/adam-nadolny) Ekspert DevOps i infrastruktury · Zweryfikowano Kwiecień 2026

1.  [Strona główna](/) ›
2.  [Baza wiedzy](/baza-wiedzy/) ›
3.  Vaultwarden — self-hosted menedżer haseł

# Vaultwarden — self-hosted menedżer haseł Bitwarden na VPS

Opublikowano: 10 kwietnia 2026 · Kategoria: Bezpieczeństwo

Menedżer haseł to jedno z najważniejszych narzędzi bezpieczeństwa — ale czy musisz ufać vendorowi z wszystkimi swoimi hasłami? Vaultwarden to lekka, self-hosted implementacja API Bitwarden napisana w Rust. Działa na VPS za 20 PLN/msc, zużywa zaledwie 20–50 MB RAM i obsługuje wszystkie oficjalne klienty Bitwarden. Hasła szyfrowane są lokalnie w przeglądarce — serwer nigdy nie widzi ich niezaszyfrowanej wersji. Ten artykuł pokazuje pełną instalację przez Docker, konfigurację HTTPS i zarządzanie organizacjami dla zespołów.

## Instalacja Docker

Vaultwarden wymaga HTTPS — przeglądarka odmówi połączenia przez HTTP (Web Crypto API wymaga bezpiecznego kontekstu). Potrzebujesz domeny z certyfikatem SSL przed pierwszym uruchomieniem:

\# Utwórz katalog danych
mkdir -p /opt/vaultwarden/vw-data

# docker-compose.yml
version: '3.8'
services:
  vaultwarden:
    image: vaultwarden/server:latest
    restart: unless-stopped
    environment:
      DOMAIN: "https://vault.example.com"
      ADMIN\_TOKEN: ""   # wygeneruj: openssl rand -base64 48
      SIGNUPS\_ALLOWED: "false"   # wylacz po utworzeniu kont
      INVITATIONS\_ALLOWED: "true"
      SMTP\_HOST: "smtp.example.com"
      SMTP\_PORT: "587"
      SMTP\_SECURITY: "starttls"
      SMTP\_USERNAME: "vault@example.com"
      SMTP\_PASSWORD: "smtp\_password"
      SMTP\_FROM: "vault@example.com"
      SMTP\_FROM\_NAME: "Vaultwarden"
      LOG\_FILE: "/data/vaultwarden.log"
      LOG\_LEVEL: "warn"
    volumes:
      - /opt/vaultwarden/vw-data:/data
    ports:
      - "127.0.0.1:8080:80"   # tylko localhost — Nginx proxuje

docker compose up -d
docker compose logs -f vaultwarden

## Konfiguracja Nginx i Let's Encrypt

Vaultwarden nie ma wbudowanego TLS — Nginx obsługuje HTTPS i przekazuje ruch do kontenera. Możesz też użyć Caddy — automatycznie zarządza certyfikatami Let's Encrypt:

\# Certbot - generuj certyfikat przed uruchomieniem Nginx
certbot certonly --standalone -d vault.example.com

# /etc/nginx/sites-available/vaultwarden
server {
  listen 443 ssl http2;
  server\_name vault.example.com;

  ssl\_certificate /etc/letsencrypt/live/vault.example.com/fullchain.pem;
  ssl\_certificate\_key /etc/letsencrypt/live/vault.example.com/privkey.pem;

  # Naglowki bezpieczenstwa
  add\_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
  add\_header X-Content-Type-Options nosniff;
  add\_header X-Frame-Options SAMEORIGIN;

  location / {
    proxy\_pass http://127.0.0.1:8080;
    proxy\_set\_header Host $host;
    proxy\_set\_header X-Real-IP $remote\_addr;
    proxy\_set\_header X-Forwarded-For $proxy\_add\_x\_forwarded\_for;
    proxy\_set\_header X-Forwarded-Proto $scheme;
  }

  # WebSocket dla live-sync
  location /notifications/hub {
    proxy\_pass http://127.0.0.1:8080;
    proxy\_http\_version 1.1;
    proxy\_set\_header Upgrade $http\_upgrade;
    proxy\_set\_header Connection "upgrade";
  }
}

# Alternatywa: Caddy (automatyczny TLS)
# vault.example.com {
#   reverse\_proxy 127.0.0.1:8080
# }

## Admin panel — konfiguracja i zarządzanie użytkownikami

Panel administracyjny dostępny jest pod adresem `/admin`. Wymaga tokenu ADMIN\_TOKEN ustawionego w zmiennych środowiskowych. Przez panel możesz zapraszać użytkowników, zarządzać 2FA i monitorować stan serwera:

\# Generowanie bezpiecznego ADMIN\_TOKEN
openssl rand -base64 48
# Wynik (przykład): y8Kq3PqFcJ4...Xz9 (64 znaki)
# Wklej do ADMIN\_TOKEN w docker-compose.yml

# Dostep do panelu admina
# https://vault.example.com/admin
# Wpisz ADMIN\_TOKEN w formularzu

# Konfiguracja przez panel admina (/admin/settings):
# - SMTP: weryfikacja konfiguracji emaila
# - Signups allowed: false (po utworzeniu kont)
# - Require email verification: true
# - 2FA enforcement: opcjonalne (wymus 2FA dla wszystkich)
# - Organization creation: all | only\_admin | users (lista)

# Zapraszanie uzytkownika (bez wlaczonej rejestracji):
# /admin/users → "Invite user" → wpisz email
# Uzytkownik otrzymuje email z linkiem rejestracyjnym (ważny 5 dni)

# Lista uzytkownikow i ich status
# /admin/users → tabela z email, 2FA status, last login

## Backup bazy i pliki attachmentów

Backup Vaultwarden wymaga skopiowania bazy SQLite i katalogu z załącznikami. Kluczowe jest wykonanie backupu w momencie gdy SQLite nie pisze (WAL checkpoint):

\# Skrypt backup SQLite - /opt/vaultwarden/backup.sh
#!/bin/bash
BACKUP\_DIR="/opt/vaultwarden/backups"
TIMESTAMP=$(date +%Y%m%d\_%H%M%S)
DATA\_DIR="/opt/vaultwarden/vw-data"

mkdir -p "${BACKUP\_DIR}"

# WAL checkpoint przed kopią
sqlite3 "${DATA\_DIR}/db.sqlite3" "PRAGMA wal\_checkpoint(FULL);"

# Kopia bazy
cp "${DATA\_DIR}/db.sqlite3" "${BACKUP\_DIR}/db\_${TIMESTAMP}.sqlite3"

# Kopia załączników i ikony
tar -czf "${BACKUP\_DIR}/attachments\_${TIMESTAMP}.tar.gz" \\
  "${DATA\_DIR}/attachments" \\
  "${DATA\_DIR}/icon\_cache" \\
  "${DATA\_DIR}/config.json" 2>/dev/null

# Usuń kopie starsze niż 30 dni
find "${BACKUP\_DIR}" -name "\*.sqlite3" -mtime +30 -delete
find "${BACKUP\_DIR}" -name "\*.tar.gz" -mtime +30 -delete

echo "Backup done: ${TIMESTAMP}"

# Cron - codzienny backup o 02:00
# 0 2 \* \* \* /opt/vaultwarden/backup.sh >> /var/log/vaultwarden-backup.log

## Klienty Bitwarden i konfiguracja serwera

Wszystkie oficjalne klienty Bitwarden obsługują własny serwer — wystarczy podać URL w ustawieniach. Poniżej tabela klientów i ich możliwości:

Klient

Platforma

Konfiguracja serwera

Autouzupełnianie

Web Vault

Przeglądarka (https://vault.example.com)

Automatycznie

Nie

Browser Extension

Chrome, Firefox, Safari, Edge

Settings → Server URL

Tak (auto-fill)

Desktop App

Windows, macOS, Linux

Settings → Server URL

Tak (TOTP, SSH keys)

Mobile App

iOS, Android

Settings → Server URL

Tak (biometria)

CLI

Linux, macOS, Windows

BW\_SERVER env var

Skrypty automatyzacji

## Najczęstsze pytania

Czym Vaultwarden różni się od oficjalnego serwera Bitwarden? +

Vaultwarden to nieoficjalna, lekka implementacja API Bitwarden napisana w Rust — kompatybilna ze wszystkimi oficjalnymi klientami Bitwarden (web, desktop, mobile, browser extensions). Oficjalny serwer Bitwarden (samoinstalowany) wymaga .NET Core, osobnego serwera MSSQL i minimum 4+ GB RAM. Vaultwarden działa na SQLite lub PostgreSQL i zużywa 10–50 MB RAM — idealny na małe VPS. Vaultwarden ma wszystkie funkcje Bitwarden Premium (TOTP, organizacje, sharing) za darmo.

Czy Vaultwarden jest bezpieczny? +

Vaultwarden stosuje ten sam model bezpieczeństwa co Bitwarden: hasła szyfrowane lokalnie (AES-256-CBC) przed wysłaniem na serwer — serwer nigdy nie widzi niezaszyfrowanych haseł. Nawet jeśli ktoś włamie się na serwer, bez master password nie odczyta haseł. Bezpieczeństwo zależy od: siły master password, aktualności Vaultwarden i systemu (podatności), HTTPS z ważnym certyfikatem, backup bazy. Oficjalny audyt bezpieczeństwa Bitwarden przeprowadzony przez Cure53 obejmuje też protokół szyfrowania.

Jak wykonać backup bazy Vaultwarden? +

Przy SQLite (domyślnym): skopiuj plik /vw-data/db.sqlite3. Przed kopią zrób flush WAL: sqlite3 /vw-data/db.sqlite3 "PRAGMA wal\_checkpoint(FULL)". Automatyzacja: cron "0 2 \* \* \* sqlite3 /vw-data/db.sqlite3 .dump > /backup/vw-backup-$(date +%Y%m%d).sql". Przy PostgreSQL: pg\_dump -U vaultwarden vaultwarden > backup.sql. Kopia bazy bez kluczy prywatnych jest nieużyteczna — backup wystarczy do przywrócenia. Zalecane przechowywanie kopii w zewnętrznej lokalizacji (Backblaze B2, S3).

Jak skonfigurować organizacje i sharing w Vaultwarden? +

Organizacje w Bitwarden/Vaultwarden pozwalają współdzielić hasła między użytkownikami. Konfiguracja: w admin panelu Vaultwarden upewnij się że signups\_allowed=false (tylko zaproszenia) i org\_creation\_users=all (lub podaj konkretnych użytkowników). Tworzysz organizację z poziomu webowego UI, zapraszasz członków przez email, dzielisz ich na kolekcje (grupy haseł). Szyfrowanie: klucze kolekcji szyfrowane asymetrycznie kluczem każdego członka — admin nie ma dostępu do haseł bez bycia członkiem.

Czym Vaultwarden różni się od 1Password i LastPass? +

Vaultwarden to self-hosted — Twoje dane są na Twoim serwerze, a nie u vendora. 1Password i LastPass to managed cloud services z opłatami miesięcznymi ($3–5/user/msc). Zalety Vaultwarden: zero opłat za licencje, pełna kontrola danych, funkcje Premium za darmo. Wady: musisz sam dbać o serwer, backupy i aktualizacje. LastPass miał głośne wycieki danych (2022) — self-hosted eliminuje ten ryzyk. 1Password nigdy nie był hackowany i ma lepszy UX, ale koszt dla firmy 10 osób to ~$400/rok vs VPS ~$240/rok.

## Sprawdź oferty pasujące do tego scenariusza

Poniżej masz szybkie przejścia do ofert i stron z kodami rabatowymi tam, gdzie są dostępne.

Mikr.us

Miniaturowy VPS wystarczy — Vaultwarden zużywa 20–50 MB RAM

Tani start

[Aktywuj rabat →](/out/mikrus)

#Reklama · link partnerski

[Zobacz kod rabatowy →](/kody-rabatowe/mikrus)

ProSerwer.pl

Polski VPS — hasła przechowywane w Polsce, RODO-compliant

Polski VPS

[Aktywuj rabat →](/out/proserwer-pl)

#Reklama · link partnerski

[Zobacz kod rabatowy →](/kody-rabatowe/proserwer)

Contabo

VPS z NVMe dla organizacji — szybkie odczyty bazy i backupy

Org + Teams

[Aktywuj rabat →](/out/contabo)

#Reklama · link partnerski

[Zobacz kod rabatowy →](/kody-rabatowe/contabo)

## Powiązane strony

-   [HashiCorp Vault — zarządzanie sekretami](/baza-wiedzy/vault-hashicorp-sekrety)
-   [Bezpieczeństwo VPS — checklist](/baza-wiedzy/bezpieczenstwo-vps-checklist)
-   [Nginx Security Hardening](/baza-wiedzy/nginx-security-hardening)
-   [Wszystkie artykuły](/baza-wiedzy/)