Kata Sandi · tanpa KYC
Host Vaultwarden di VPS Offshore
Jalankan vault kata sandi Anda sendiri yang kompatibel dengan Bitwarden di atas hardware yang Anda kendalikan sepenuhnya, di yurisdiksi ramah privasi, dibayar pakai kripto tanpa identitas yang terhubung.
Apa itu
Vaultwarden adalah server Bitwarden tidak resmi yang ringan, ditulis dalam Rust, dan berbicara dengan API yang sama seperti Bitwarden, sehingga semua klien Bitwarden resmi (ekstensi browser, desktop, iOS/Android, CLI) bisa sinkron dengannya. Vaultwarden menyimpan vault terenkripsi untuk kata sandi, passkey, seed TOTP, kartu, dan catatan aman, lengkap dengan organisasi, lampiran, dan kontrol admin, sambil hanya memakai sebagian kecil RAM dibanding stack resmi.
Mengapa hosting di offshore
Vault kata sandi Anda adalah aset paling sensitif yang Anda miliki, jadi siapa yang memegang server dan di bawah hukum apa sama pentingnya dengan kriptografinya sendiri. VPS tanpa KYC, dibayar pakai kripto, di lokasi bertingkat privasi (NL/CH/RO/IS) berarti mesin yang menyimpan vault terenkripsi Anda tidak terikat pada identitas hukum Anda, tidak tunduk pada somasi AS/Inggris, dan tidak bisa dikunci oleh penyedia pembayaran yang men-deplatform Anda.
Proses deploy
Contoh setup referensi yang berfungsi
Salin ini ke instance ChainVPS baru. Ganti placeholder-nya, lalu jalankan.
# 1) DNS: arahkan vault.example.com -> IP ChainVPS Anda (A/AAAA record)
# 2) Buat ADMIN_TOKEN Argon2 (JANGAN gunakan string biasa):
# docker run --rm -it vaultwarden/server /vaultwarden hash
# tempel string '$argon2id$...' yang dihasilkan sebagai ADMIN_TOKEN di bawah (beri tanda kutip tunggal di .env)
# 3) Simpan sebagai docker-compose.yml, buat Caddyfile seperti contoh, lalu: docker compose up -d
services:
vaultwarden:
image: vaultwarden/server:1.32.7
container_name: vaultwarden
restart: unless-stopped
environment:
DOMAIN: "https://vault.example.com" # must match the public URL exactly
SIGNUPS_ALLOWED: "false" # create your account, then keep this false
INVITATIONS_ALLOWED: "true"
ADMIN_TOKEN: "${ADMIN_TOKEN}" # Argon2 hash from step 2, kept in .env
WEBSOCKET_ENABLED: "true" # live sync (served on the main port)
SENDS_ALLOWED: "true"
ROCKET_PORT: "80"
volumes:
- ./vw-data:/data # vaults, attachments, sqlite db, keys
networks: [vw]
# no host port published: only Caddy talks to it over the internal network
caddy:
image: caddy:2
container_name: vaultwarden-caddy
restart: unless-stopped
ports:
- "80:80"
- "443:443"
- "443:443/udp" # HTTP/3
volumes:
- ./Caddyfile:/etc/caddy/Caddyfile:ro
- ./caddy-data:/data
- ./caddy-config:/config
networks: [vw]
depends_on: [vaultwarden]
networks:
vw:
# ---- Caddyfile (di direktori yang sama) ----
# vault.example.com {
# encode gzip
# reverse_proxy vaultwarden:80
# }
# Caddy mengambil dan memperbarui sertifikat Let's Encrypt secara otomatis; HTTPS wajib
# karena klien Bitwarden menggunakan WebCrypto, yang hanya berjalan pada origin yang aman.
Firewall
Port yang perlu dibuka
| Port | Protokol | Tujuan |
|---|---|---|
| 443 | TCP | Vault HTTPS + sinkronisasi klien + WebSocket (via Caddy); satu-satunya port yang wajib publik |
| 80 | TCP | Redirect HTTP -> HTTPS dan penerbitan sertifikat ACME/Let's Encrypt |
| 443 | UDP | Opsional HTTP/3 (QUIC) untuk sinkronisasi klien yang lebih cepat |
Penyesuaian ukuran yang tepat
Paket mana yang Anda butuhkan
VPS Nano/Small (1 vCPU, 1-2 GB RAM)
Vaultwarden idle sekitar 15-30 MB RAM dengan SQLite; Nano sudah lebih dari cukup. Kebutuhan storage sangat kecil kecuali Anda menyimpan lampiran besar.
VPS Pro (2 vCPU, 4 GB RAM)
Ruang gerak untuk sinkronisasi bersamaan, lampiran, dan menjalankan Caddy plus fail2ban/backup pada mesin yang sama.
VPS Pro (tier tinggi) atau entry Dedicated
Pindah dari SQLite ke Postgres/MySQL dan taruh lampiran di paket Storage atau disk yang lebih besar; CPU dedicated menjaga latensi sinkronisasi tetap stabil di bawah beban tinggi.
Lokasi terbaik: Pilih lokasi ChainVPS bertingkat privasi untuk vault Anda: Swiss (CH) dan Islandia (IS) punya tradisi perlindungan data dan privasi yang kuat, Belanda (NL) menawarkan konektivitas sangat baik dengan hukum privasi UE, sementara Rumania (RO) atau Moldova (MD) berada di luar blok pertukaran pengawasan yang paling ketat. Pilih yang secara geografis paling dekat dengan Anda dan pengguna Anda untuk meminimalkan latensi, karena vault tetap terenkripsi di sisi klien apa pun pilihannya.
Amankan sekarang
Daftar periksa hardening
- Biarkan SIGNUPS_ALLOWED=false setelah membuat akun Anda dan gunakan INVITATIONS untuk menambahkan pengguna; endpoint signup terbuka pada vault publik adalah magnet penyalahgunaan.
- Selalu set ADMIN_TOKEN ke hash Argon2 yang dihasilkan dengan 'vaultwarden hash' (jangan pernah string plaintext), atau nonaktifkan panel /admin sepenuhnya dengan membiarkan ADMIN_TOKEN tidak diset setelah konfigurasi selesai. Pertimbangkan untuk membatasi akses /admin hanya ke IP Anda lewat firewall.
- Terapkan HTTPS saja dan biarkan Caddy mengelola sertifikat Let's Encrypt; klien Bitwarden menolak menjalankan kriptografi lewat HTTP biasa, dan sertifikat yang valid mencegah downgrade/MITM saat sinkronisasi.
- Backup direktori ./vw-data (khususnya rsa_key.pem, config.json, db.sqlite3, dan lampiran) secara terjadwal ke lokasi terpisah seperti paket ChainVPS Storage; kehilangan rsa_key.pem akan membatalkan semua sesi/token yang ada.
- Jalankan fail2ban terhadap log Vaultwarden (LOG_FILE + LOG_LEVEL) untuk memblokir percobaan brute-force login, dan wajibkan setiap pengguna mengaktifkan 2FA; buka hanya port 80/443 lewat ufw/nftables dan blokir sisanya.
Pertanyaan
Hosting Vaultwarden — FAQ
Apakah Vaultwarden sama dengan Bitwarden?
Tidak, ini adalah implementasi server API Bitwarden yang terpisah dan ringan. Vaultwarden tidak dibuat oleh Bitwarden Inc., tetapi aplikasi dan ekstensi Bitwarden resmi tetap berfungsi dengannya, dan Vaultwarden mendukung vault, organisasi, lampiran, Sends, dan passkey. Cocok untuk individu dan tim kecil yang ingin self-host tanpa beban resource stack server resmi.
Apakah data saya aman jika server disita atau host diretas?
Vault dienkripsi dan didekripsi di sisi klien dengan kunci yang diturunkan dari master password Anda, sehingga server hanya pernah menyimpan ciphertext. Hosting di mesin tanpa KYC pada yurisdiksi ramah privasi mengurangi pihak yang bisa memaksa akses, tetapi Anda tetap harus memakai master password yang kuat, mengaktifkan 2FA, dan menjaga DOMAIN tetap di HTTPS untuk melindungi alur login itu sendiri.
Apakah saya butuh HTTPS, atau bisa pakai IP polos?
Anda butuh HTTPS dengan sertifikat valid dan nama domain. Klien Bitwarden menggunakan API WebCrypto browser, yang hanya berfungsi pada origin yang aman, sehingga setup http:// biasa atau IP polos akan gagal sinkron. Layanan Caddy yang disertakan menerbitkan dan memperbarui sertifikat Let's Encrypt gratis secara otomatis.
SQLite atau MySQL/Postgres?
SQLite (default) sudah sangat memadai dan tercepat untuk penggunaan personal dan tim kecil hingga puluhan pengguna. Beralih ke MySQL atau PostgreSQL hanya untuk deployment multi-organisasi besar atau saat Anda menginginkan backup DB terpusat dan replikasi; set DATABASE_URL sesuai kebutuhan.
Bagaimana cara menambah pengguna tanpa membuka signup publik?
Biarkan SIGNUPS_ALLOWED=false dan INVITATIONS_ALLOWED=true, lalu undang pengguna dari sebuah Organization (atau lewat panel /admin). Pengguna yang diundang menerima undangan dan bisa mendaftar meskipun signup publik ditutup, sehingga endpoint tetap terlindungi dari penyalahgunaan.
Bisakah saya membayar VPS tanpa memberikan identitas?
Bisa. ChainVPS tanpa KYC dan menerima cryptocurrency, sehingga server yang menyimpan vault terenkripsi Anda tidak terikat pada identitas hukum Anda maupun prosesor kartu yang bisa membekukan akun.
Lebih banyak untuk di-self-host
Stack one-click lainnya
Jalankan Vaultwarden
dalam 60 detik ke depan.
Bandwidth unmetered · DDoS Termasuk · 21 mata uang kripto · Tanpa KYC.