SSD Nodes Learn
Panduan Matt ConnorOleh Matt Connor · Diperbarui 2026-07-24

cara install vaultwarden di vps docker

Panduan instalasi Vaultwarden di VPS menggunakan Docker. Pelajari cara setup HTTPS, admin token, Fail2ban, dan strategi backup data agar aman.

Apa yang Anda bangun

Manajer kata sandi yang sepenuhnya Anda kendalikan: Vaultwarden yang berjalan dalam satu kontainer kecil di belakang reverse proxy yang melakukan terminasi HTTPS, dengan aplikasi Bitwarden resmi pada ponsel, laptop, dan browser yang diarahkan ke sana. Vaultwarden mengimplementasikan ulang API server Bitwarden dalam bahasa Rust dan menggunakan protokol yang sama dengan bitwarden.com, sehingga setiap klien resmi dapat berfungsi tanpa perubahan — namun hanya membutuhkan sekitar 100 MB RAM, berbeda dengan tumpukan resmi yang menggunakan banyak kontainer.

Proses instalasi hanya memerlukan belasan baris Compose. Tiga hal utama yang sangat penting — dan sering menjadi penyebab kegagalan — adalah: TLS harus sudah tersedia sebelum Anda memuat web vault, pendaftaran publik harus segera ditutup setelah akun Anda dibuat, dan volume data harus dicadangkan serta diuji pemulihannya, karena direktori tersebut menyimpan semua kata sandi Anda.

Prasyarat dan kendala yang nyata

  • VPS dengan Docker Engine dan plugin Compose, pada sistem Ubuntu 24.04 KVM baru dengan akses root atau sudo. RAM 512 MB sudah cukup; 1 GB lebih nyaman. Ini adalah salah satu layanan teringan yang bisa Anda jalankan — termasuk dalam daftar teratas layanan yang layak untuk self-hosting.
  • Domain dengan A record (dan AAAA jika Anda menggunakan IPv6) yang mengarah ke vault.example.com pada VPS. Sertifikat TLS diterbitkan untuk nama ini, jadi DNS harus sudah terkonfigurasi sebelum Anda memulai.
  • Port 80 dan 443 terbuka untuk internet, diarahkan melalui reverse proxy Anda — jangan pernah langsung ke Vaultwarden. Port 80 hanya digunakan untuk tantangan sertifikat ACME dan pengalihan HTTP-ke-HTTPS.
  • Kendala utama di awal: klien Bitwarden menolak terhubung ke server yang tidak menggunakan HTTPS. Tidak ada opsi "uji coba melalui http terlebih dahulu" — metode tersebut tidak berfungsi karena alasan spesifik yang dijelaskan berikutnya.

Mengapa Vaultwarden, bukan stack resmi Bitwarden

Klien yang sama, penggunaan sumber daya jauh lebih ringan. Bitwarden resmi yang di-self-host hadir sebagai kumpulan container (MSSQL, Nginx, Identity, Api, Admin, dan lainnya) dan membutuhkan sekitar 2 GB RAM. Vaultwarden adalah single binary yang menyimpan semua data dalam database SQLite secara default dan hanya menggunakan beberapa puluh megabyte saat idle. Untuk satu orang, keluarga, atau tim kecil, ini adalah pilihan yang jelas. Karena Vaultwarden mengimplementasikan Bitwarden API secara akurat, data Anda tetap portabel antara Vaultwarden dan bitwarden.com.

Anda akan kehilangan sebagian besar fitur enterprise: tidak ada provisioning SCIM (meskipun OpenID Connect SSO eksperimental telah hadir di versi 1.35.0), dan Anda adalah operatornya, sehingga patching, HTTPS, dan backup adalah tanggung jawab Anda. Panduan ini membahas ketiga tugas tersebut.

Mengapa HTTPS tidak bersifat opsional

Bitwarden web vault dan ekstensi browser menurunkan kunci enkripsi Anda di browser menggunakan Web Crypto API (window.crypto.subtle). Browser hanya menyediakan crypto.subtle dalam secure context — yaitu HTTPS, atau kasus khusus http://localhost. Melalui http://vault.example.com biasa, hal ini undefined, sehingga saat aplikasi menurunkan kunci, proses akan gagal dan konsol akan menampilkan:

Uncaught (in promise) TypeError: Cannot read properties of undefined (reading 'importKey')

Halaman akan berhenti merespons atau menampilkan error kriptografi umum, dan login tidak akan berhasil. Klien desktop, mobile, dan browser menjalankan pemeriksaan mandiri terhadap URL yang di-host sendiri; terhadap endpoint http (atau yang tidak dapat dijangkau), klien akan menolak dengan pesan:

This is not a recognized Bitwarden server. You may need to check with your provider or update your server.

Keduanya memiliki penyebab yang sama: tidak ada HTTPS yang valid. Oleh karena itu, Anda harus mengonfigurasi TLS terlebih dahulu dan jangan pernah membuka vault melalui http, meskipun hanya untuk melihat sekilas.

Step 1 — DNS dan reverse proxy (TLS terlebih dahulu)

Arahkan record ke VPS Anda dan pastikan resolusi mengarah ke alamat yang benar:

dig +short vault.example.com

Baris yang muncul harus berupa IP VPS Anda. Jika kosong atau salah, perbaiki DNS dan tunggu hingga TTL berakhir — penerbitan sertifikat gagal jika nama tidak dapat diresolusi.

Untuk front end HTTPS, panduan ini menggunakan Traefik, yang menerbitkan dan memperbarui sertifikat Let's Encrypt secara otomatis dan terintegrasi langsung dengan Compose. Jika Anda belum menggunakannya, ikuti pengaturan reverse proxy Traefik dan TLS otomatis terlebih dahulu; langkah tersebut membuat Docker network eksternal (proxy di bawah) dan ACME resolver (letsencrypt) yang digunakan oleh layanan Vaultwarden. Penggunaan nginx biasa dengan sertifikat manual bekerja secara identik dari sisi Vaultwarden.

Lebih memilih nginx dan Certbot daripada Traefik? Tempatkan Vaultwarden pada 127.0.0.1:8080 (tambahkan ports: ["127.0.0.1:8080:80"] ke layanan dan hapus label Traefik), lalu terbitkan sertifikat dan lakukan proxy ke sana. Bagian sertifikat dibahas dalam menerbitkan sertifikat Let's Encrypt dengan Certbot dan nginx. Hal krusial lainnya adalah WebSocket upgrade pada jalur notifikasi:

server {
    listen 443 ssl;
    server_name vault.example.com;

    client_max_body_size 525M;

    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;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
    }
}

Perhatikan baris X-Real-IP — baris ini memungkinkan Fail2ban melihat penyerang asli, bukan 127.0.0.1. Semua bagian lain dalam panduan ini tetap sama, baik menggunakan Traefik maupun nginx di bagian depan.

Step 2 — file Compose

Buat direktori proyek terlebih dahulu. Panduan ini menggunakan /opt/vaultwarden agar nama proyek Compose — dan volume data vaultwarden_vw-data — dapat diprediksi; langkah Fail2ban dan cadangan di bawah ini bergantung pada nama tersebut.

sudo mkdir -p /opt/vaultwarden
cd /opt/vaultwarden

Buat file .env untuk rahasia admin dan letakkan file Compose di direktori tersebut.

# .env
ADMIN_TOKEN=paste-a-strong-token-here

Generate token tersebut dengan openssl rand -base64 48 dan tempelkan ke dalam file. (Bentuk hash yang lebih kuat akan dibahas selanjutnya; string acak yang panjang sudah cukup untuk tahap awal.)

# docker-compose.yml
services:
  vaultwarden:
    image: vaultwarden/server:latest
    container_name: vaultwarden
    restart: unless-stopped
    environment:
      DOMAIN: "https://vault.example.com"
      SIGNUPS_ALLOWED: "true"          # closed in Step 4, keep true just to register
      ADMIN_TOKEN: "${ADMIN_TOKEN}"
      IP_HEADER: "X-Forwarded-For"     # X-Real-IP if your proxy sends that instead
      LOG_FILE: "/data/vaultwarden.log"
      LOG_LEVEL: "warn"
    volumes:
      - vw-data:/data
    networks:
      - proxy
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.vw.rule=Host(`vault.example.com`)"
      - "traefik.http.routers.vw.entrypoints=websecure"
      - "traefik.http.routers.vw.tls.certresolver=letsencrypt"
      - "traefik.http.services.vw.loadbalancer.server.port=80"

volumes:
  vw-data:

networks:
  proxy:
    external: true

Dua hal pada file ini menentukan seluruh desain. Tidak ada pemetaan ports:, sehingga Vaultwarden hanya dapat diakses melalui Traefik dan TLS-nya — mempublikasikan port pada host akan menyebabkan pengguna mengakses vault via http secara tidak sengaja. Dan DOMAIN harus berupa URL HTTPS publik yang lengkap: nilai ini digunakan pada tautan lampiran, WebAuthn 2FA, dan endpoint notifikasi, sehingga nilai yang salah atau menggunakan http akan merusak fitur tersebut meskipun situs berhasil dimuat. Tag latest adalah pengecualian sengaja dari aturan umum jangan-latest — Vaultwarden merilis versi stabil sebagai satu image rolling tunggal, dengan :testing sebagai channel pre-release terpisah — jadi lakukan pembaruan secara sengaja dan baca catatan rilis sebelum melakukan pull.

Jalankan layanan dan pantau log:

docker compose up -d
docker compose logs -f vaultwarden

Startup yang berhasil diakhiri dengan baris seperti Rocket has launched from http://0.0.0.0:80. Berikan waktu beberapa detik bagi Traefik untuk mengambil sertifikat, lalu muat https://vault.example.com — Anda seharusnya mendapatkan Bitwarden web vault dengan ikon gembok valid tanpa peringatan sertifikat.

Step 3 — ADMIN_TOKEN yang kuat, dan jebakan $$

ADMIN_TOKEN melindungi /admin, panel yang dapat membaca setiap pengguna dan pengaturan pada instance Anda, jadi perlakukan token ini seperti kata sandi root. Ada dua metode yang dapat digunakan.

Metode sederhana adalah string acak yang telah Anda buat dengan openssl rand -base64 48. Karena base64 tidak pernah mengandung $, string tersebut dapat langsung dimasukkan ke dalam .env tanpa perlu escaping.

Metode yang lebih aman adalah hash Argon2 PHC, sehingga token teks biasa tidak pernah disimpan di disk. Buatlah hash menggunakan image yang sama:

docker run --rm -it vaultwarden/server /vaultwarden hash --preset owasp

Proses ini akan meminta input dua kali dan mencetak string yang dimulai dengan $argon2id$v=19$.... Berikut adalah jebakan yang sering membuang waktu pengguna selama satu jam: Docker Compose menganggap $ sebagai interpolasi variabel, jadi Anda harus menggandakan setiap $ menjadi $$ saat menempelkan hash ke dalam file Compose. Letakkan hash tersebut langsung di bawah environment:, bukan melalui .env, dan jangan gunakan tanda kutip:

    environment:
      ADMIN_TOKEN: $$argon2id$$v=19$$m=19456,t=2,p=1$$c29tZXNhbHQ$$RdescudvJCsgt3ub+b+dWRWJTmaaJObG

Jika Anda membiarkan tanda $ tunggal, Compose akan memberikan peringatan The "argon2id" variable is not set dan mengosongkan token, sehingga /admin akan menolak kata sandi Anda yang sebenarnya. Jalankan docker compose up -d, dan simpan teks biasa yang Anda ketik saat prompt di dalam password store Anda sendiri.

Langkah 4 — daftarkan akun Anda, lalu kunci aksesnya

Dengan SIGNUPS_ALLOWED: "true", buka https://vault.example.com, klik Create account, dan daftar menggunakan email serta kata sandi utama yang kuat. Kata sandi utama ini tidak dapat dipulihkan — tidak ada fitur reset — jadi simpanlah di tempat yang aman terlebih dahulu.

Sekarang tutup aksesnya. Edit file Compose agar pendaftaran pengguna dinonaktifkan:

      SIGNUPS_ALLOWED: "false"

Terapkan kembali dengan docker compose up -d. Ini bukan langkah pengamanan yang bisa ditunda. Jika dibiarkan terbuka, siapa pun yang menemukan URL tersebut — termasuk bot crawler — dapat membuat akun di server Anda. Mereka tidak dapat membaca vault Anda, tetapi mereka mengonsumsi sumber daya dan mengubah instance pribadi Anda menjadi layanan publik. Tanda jika Anda membiarkannya terbuka: /admin akan menampilkan daftar akun yang tidak pernah Anda buat.

Untuk menambahkan anggota keluarga atau rekan tim di kemudian hari tanpa membuka kembali pendaftaran publik, gunakan tombol Invite User di /admin; jalur tersebut memerlukan konfigurasi SMTP agar penerima undangan menerima tautan mereka.

Step 5 — mengakses /admin

Buka https://vault.example.com/admin dan masukkan token admin dalam bentuk teks biasa (string acak, atau kata sandi yang telah Anda hash — bukan hasil hash-nya). Di dalamnya, Anda dapat melihat daftar pengguna, mengatur konfigurasi, mengirim email uji coba, dan mengambil snapshot database.

Jika halaman mengembalikan 404 Not Found, berarti ADMIN_TOKEN kosong atau tidak disetel, yang menyebabkan panel dinonaktifkan sepenuhnya — ini adalah pilihan yang valid jika Anda tidak pernah membutuhkannya. Jika halaman terbuka tetapi menolak token Anda, lihat jebakan escaping $$ pada daftar kegagalan di bawah. Lupa token? Tidak ada perintah pemulihan; edit .env atau file Compose, tetapkan token baru, dan docker compose up -d.

Langkah 6 — hubungkan klien Bitwarden

Setiap klien resmi dapat diarahkan ke server self-hosted. Instal klien Bitwarden untuk desktop, mobile, atau browser dari toko aplikasi resmi — Anda tidak memerlukan build Vaultwarden khusus.

Sebelum masuk, buka ikon pengaturan pada layar login (berlabel Self-hosted atau Region → Self-hosted), atur Server URL ke https://vault.example.com, lalu simpan. Kemudian masuk menggunakan email dan master password yang telah Anda daftarkan; klien akan langsung terhubung dan menawarkan untuk mengisi serta menyimpan kredensial.

Jika klien menampilkan This is not a recognized Bitwarden server. You may need to check with your provider or update your server., URL salah, menggunakan http, atau sertifikat tidak dipercaya — pastikan https://vault.example.com dapat dimuat dengan benar di browser terlebih dahulu. Pembaruan lambat pada perangkat lain disebabkan oleh WebSocket push, yang dibahas di bawah ini.

Step 7 — jail Fail2ban untuk endpoint login

Vaultwarden mencatat setiap kegagalan login ke file yang ditentukan oleh LOG_FILE — ini adalah kebutuhan utama untuk perlindungan brute-force. Jika Anda belum menjalankan Fail2ban, panduan instalasi dan dasar-dasarnya tersedia di panduan pengerasan SSH Fail2ban; di sini kita akan menambahkan satu jail untuk vault.

Pertama, cari lokasi volume bernama pada host agar Fail2ban dapat membaca log:

docker volume inspect vaultwarden_vw-data --format '{{ .Mountpoint }}'

Perintah tersebut akan menampilkan sesuatu seperti /var/lib/docker/volumes/vaultwarden_vw-data/_data; log berada di vaultwarden.log di dalamnya. Buat filter:

# /etc/fail2ban/filter.d/vaultwarden.conf
[Definition]
failregex = ^.*Username or password is incorrect\. Try again\. IP: <ADDR>\. Username:.*$
ignoreregex =

Dan jail:

# /etc/fail2ban/jail.d/vaultwarden.local
[vaultwarden]
enabled   = true
filter    = vaultwarden
logpath   = /var/lib/docker/volumes/vaultwarden_vw-data/_data/vaultwarden.log
banaction = iptables-allports
chain     = DOCKER-USER
maxretry  = 5
findtime  = 600
bantime   = 3600

Muat ulang dengan sudo systemctl restart fail2ban dan konfirmasi dengan sudo fail2ban-client status vaultwarden.

Tiga detail Docker menentukan apakah konfigurasi ini berfungsi. Pertama, jika log menunjukkan IP: 127.0.0.1 atau alamat proxy Anda pada setiap percobaan gagal, Vaultwarden akan memblokir proxy tersebut — atur IP_HEADER ke header yang sebenarnya dikirim oleh proxy Anda (X-Forwarded-For untuk Traefik, X-Real-IP untuk blok nginx di atas, CF-Connecting-IP jika menggunakan Cloudflare). Kedua, rantai iptables yang tepat bergantung pada proxy Anda: jika Traefik berjalan sebagai container dengan port yang dipublikasikan, lalu lintas melewati jalur FORWARD milik Docker, sehingga pemblokiran harus berada di DOCKER-USER seperti di atas; namun jika Anda memilih opsi host-nginx dari Step 1, koneksi berakhir di nginx pada rantai INPUT host dan pemblokiran DOCKER-USER tidak akan mendeteksinya — dalam hal ini, hapus baris chain = DOCKER-USER agar Fail2ban menggunakan rantai INPUT default. Ketiga, gunakan banaction = iptables-allports alih-alih default berbasis port — jail ini tidak menentukan port, dan pemblokiran semua port di DOCKER-USER akan memblokir pelaku dari setiap layanan yang dipublikasikan pada mesin tersebut secara bersih.

Step 8 — cadangkan vault, lalu lakukan pemulihan

Volume vw-data adalah pengelola kata sandi Anda. Volume ini berisi db.sqlite3 (setiap entri), direktori attachments/ dan sends/, berkas rsa_key.* untuk tanda tangan sesi login, dan config.json dari panel admin. Cadangan yang melewatkan salah satu komponen ini akan gagal saat dibutuhkan.

Menyalin db.sqlite3 saat Vaultwarden sedang menulis data dapat menghasilkan berkas korup yang tidak lengkap. Oleh karena itu, lakukan snapshot saat layanan mati (cold snapshot) — waktu henti hanya beberapa detik:

#!/usr/bin/env bash
set -euo pipefail
STAMP=$(date +%F)
DEST=/root/vw-backups
VOL=$(docker volume inspect vaultwarden_vw-data --format '{{ .Mountpoint }}')
mkdir -p "$DEST"
docker compose -f /opt/vaultwarden/docker-compose.yml stop vaultwarden
tar czf "$DEST/vw-$STAMP.tgz" -C "$VOL" .
docker compose -f /opt/vaultwarden/docker-compose.yml start vaultwarden

Jalankan perintah ini melalui cron setiap malam dan salin .tgz keluar dari server — cadangan yang hanya tersimpan di server yang sedang dilindungi bukanlah cadangan yang aman. Cara terbaik untuk mengirimnya adalah cadangan restic nightly ke server lain atau object storage, yang mengenkripsi arsip dan melakukan deduplikasi snapshot yang berulang. Tombol Backup Database pada panel admin adalah snapshot cepat untuk berkas SQLite saja, namun tidak menyertakan lampiran dan kunci.

Sekarang lakukan langkah yang membedakan cadangan asli dengan cadangan yang sekadar harapan — lakukan pemulihan satu kali untuk membuktikan keberhasilannya:

mkdir -p /tmp/vw-restore
tar xzf /root/vw-backups/vw-2026-07-15.tgz -C /tmp/vw-restore
docker run --rm -p 127.0.0.1:8888:80 -v /tmp/vw-restore:/data vaultwarden/server

Dari laptop Anda, buat tunnel ke server menggunakan ssh -L 8888:127.0.0.1:8888 you@your-vps dan buka http://localhost:8888. Karena localhost adalah konteks yang aman, crypto.subtle tersedia dan vault dapat didekripsi melalui http biasa di sini — satu-satunya tempat yang diizinkan. Login dengan kata sandi utama Anda dan pastikan semua entri tersedia: jika tersedia, berarti database, kunci RSA, dan kata sandi utama Anda telah berhasil dipulihkan, dan Anda dapat membangun ulang sistem di VPS baru dalam hitungan menit. Hentikan container dengan Ctrl-C dan hapus /tmp/vw-restore.

Mode kegagalan, dengan string yang akan Anda lihat

Cannot read properties of undefined (reading 'importKey') di konsol browser. Vault dimuat melalui http, sehingga crypto.subtle tidak terdefinisi; akses hanya melalui https:// dan tambahkan pengalihan HTTP-ke-HTTPS pada proxy.

This is not a recognized Bitwarden server... pada klien. Server URL menggunakan http, salah ketik, atau sertifikat tidak dipercaya; pastikan https://vault.example.com menampilkan ikon gembok yang valid, lalu masukkan kembali URL tersebut pada pengaturan self-hosted di klien.

/admin menolak kata sandi yang benar. Hash Argon2 kehilangan escaping — setiap $ harus berupa $$ di Compose — atau Anda memasukkan hash alih-alih teks biasa yang diwakilinya.

Sinkronisasi lintas perangkat lambat; konsol menunjukkan WebSocket connection to 'wss://vault.example.com/notifications/hub' failed. Proxy tidak meneruskan header Upgrade/Connection; Traefik melakukan ini secara otomatis, sedangkan nginx memerlukan dua baris upgrade dari Langkah 1. Vault tetap berfungsi, namun sinkronisasi hanya terjadi saat dibuka. Port khusus 3012 yang lama sudah dihapus sejak v1.31.0, sehingga tidak diperlukan rute WebSocket terpisah.

Fail2ban melaporkan pemblokiran tetapi penyerang tetap terhubung. Sistem memblokir 127.0.0.1 karena IP_HEADER salah, atau pemblokiran berada pada rantai iptables yang salah — atur chain = DOCKER-USER dan banaction = iptables-allports.

Upgrades

Tarik image baru dan buat ulang; volume bernama dan seluruh data Anda akan tetap tersimpan:

docker compose pull
docker compose up -d

Vaultwarden merilis pembaruan secara rutin. Pantau catatan rilis proyek daripada mengunci versi patch tertentu, karena beberapa rilis menyertakan catatan migrasi. Lakukan backup baru sebelum melakukan pembaruan besar; Anda dapat melakukan rollback dengan memulihkan file tarball ke volume baru.

FAQ

Apakah Vaultwarden sama dengan Bitwarden?

Vaultwarden adalah server independen yang kompatibel, bukan server resmi. Vaultwarden mengimplementasikan ulang API server Bitwarden menggunakan Rust. Oleh karena itu, semua klien resmi (desktop, mobile, browser, dan CLI) dapat berfungsi dengannya dengan penggunaan sumber daya yang jauh lebih rendah. Format vault sama, sehingga Anda dapat melakukan migrasi ke kedua arah melalui proses ekspor dan impor.

Apakah saya benar-benar butuh HTTPS, atau bisa menggunakan http di LAN saya?

Anda memerlukan HTTPS untuk segala hal kecuali pengujian localhost. Web vault dan ekstensi Bitwarden menggunakan Web Crypto API milik browser yang hanya tersedia dalam konteks aman. Jika menggunakan http biasa, klien akan memunculkan Cannot read properties of undefined dan gagal login. Satu-satunya alamat http yang berfungsi adalah http://localhost, itulah sebabnya tes pemulihan pada Langkah 8 menggunakan SSH tunnel.

Bagaimana cara mencegah orang asing mendaftar di server saya?

Atur SIGNUPS_ALLOWED: "false" pada file Compose dan jalankan docker compose up -d segera setelah Anda membuat akun sendiri. Setelah itu, tambahkan pengguna baru melalui tombol Invite User di /admin. Anda harus mengonfigurasi SMTP agar pengguna menerima tautan undangan. Periksa daftar pengguna admin secara berkala untuk memastikan tidak ada akun tak dikenal yang muncul.

Bagaimana cara mencadangkan vault Vaultwarden saya?

Hentikan kontainer sebentar dan arsipkan seluruh volume vw-data — termasuk file db.sqlite3, attachments/, sends/, config.json, dan rsa_key.* — lalu salin arsip tersebut keluar dari server, idealnya menggunakan cron harian. Menyalin file SQLite yang sedang berjalan berisiko menghasilkan snapshot yang korup, jadi lakukan saat server mati. Yang paling penting, lakukan uji coba pemulihan sekali pada kontainer sementara dan coba login, untuk memastikan cadangan tersebut valid sebelum Anda mengandalkannya.

Apakah aman untuk melakukan self-host kata sandi saya?

Ya, jika Anda melakukan tiga hal yang dibahas dalam panduan ini: HTTPS yang asli, penutupan pendaftaran ditambah token admin yang kuat, dan cadangan yang telah diuji. Vault Anda dienkripsi di sisi klien dengan kata sandi utama Anda, sehingga server tidak pernah melihat kata sandi Anda dalam bentuk teks biasa — file db.sqlite3 yang dicuri tidak akan berguna tanpanya. Konsekuensinya adalah pembaruan (patching) dan pencadangan kini menjadi tanggung jawab Anda, itulah sebabnya Fail2ban dan ritual pemulihan bersifat wajib di sini.

#vaultwarden#passwords#security#docker#self-hosting