Vaultwarden Self-Host: Password Manager Pribadi di VPS

Kenapa Vaultwarden, Bukan Sekadar File Catatan

Menyimpan password di catatan HP atau spreadsheet adalah cara tercepat kehilangan akun. Sekali HP hilang atau file bocor, semua akun ikut terancam. Password manager menyelesaikan ini dengan satu master password yang mengunci brankas terenkripsi.

Bitwarden resmi memang bisa di-self-host, tapi kebutuhan sumber dayanya besar untuk VPS kecil. Vaultwarden adalah implementasi ulang server Bitwarden yang kompatibel dengan aplikasi dan ekstensi Bitwarden resmi, tapi cukup berjalan dengan RAM ratusan MB. Praktisnya: Anda tetap memakai aplikasi Bitwarden di HP dan browser, hanya saja servernya milik Anda sendiri.

Satu hal yang wajib dipahami sejak awal: Vaultwarden menyimpan brankas terenkripsi, tapi keamanan tetap bergantung pada Anda. Master password yang lemah atau hilang berarti brankas tidak bisa dibuka siapa pun, termasuk Anda. Tidak ada tombol "lupa password" di server sendiri.

Persiapan

Yang dibutuhkan:

  • VPS Ubuntu 24.04 dengan Docker dan Docker Compose terinstal.
  • Domain atau subdomain yang mengarah ke IP VPS, misalnya vault.domainanda.com. HTTPS wajib, bukan opsional — tanpa HTTPS, data login bisa disadap di jaringan.
  • Port 80 dan 443 terbuka di firewall.

Cek dulu Docker berjalan:

docker --version
docker compose version

Kalau belum ada Docker, instal dari repositori resmi Docker untuk Ubuntu 24.04, jangan dari paket acak. Setelah itu, buat direktori kerja:

mkdir -p ~/vaultwarden
cd ~/vaultwarden

Instalasi dengan Docker Compose

Buat file docker-compose.yml:

services:
  vaultwarden:
    image: vaultwarden/server:latest
    container_name: vaultwarden
    restart: unless-stopped
    environment:
      - DOMAIN=https://vault.domainanda.com
      - SIGNUPS_ALLOWED=false
      - ADMIN_TOKEN=<token-admin-anda>
    volumes:
      - ./vw-data:/data
    ports:
      - "127.0.0.1:8080:80"

Beberapa penjelasan penting:

DOMAIN harus sama persis dengan alamat publik Anda, termasuk https://. Ini dipakai untuk membuat tautan undangan dan verifikasi email.

SIGNUPS_ALLOWED=false artinya pendaftaran akun baru dimatikan. Nyalakan sementara hanya saat membuat akun pertama, lalu matikan lagi. Server password yang terbuka untuk pendaftaran publik adalah undangan bagi penyusup.

ADMIN_TOKEN adalah token panel admin di /admin. Buat dengan perintah berikut, jangan mengetik token buatan sendiri yang mudah ditebak:

openssl rand -base64 48

Port di-bind ke 127.0.0.1:8080, bukan ke semua interface. Vaultwarden tidak diekspos langsung ke internet; reverse proxy di depannya yang menangani HTTPS.

Jalankan:

docker compose up -d
docker compose ps

Kalau status container Up, Vaultwarden sudah jalan di sisi internal. Cek log bila ada masalah:

docker compose logs -f vaultwarden

HTTPS dengan Reverse Proxy

Gunakan Nginx sebagai reverse proxy. Instal Nginx dan Certbot:

sudo apt update
sudo apt install -y nginx certbot python3-certbot-nginx

Buat konfigurasi situs di /etc/nginx/sites-available/vaultwarden:

server {
    listen 80;
    server_name vault.domainanda.com;

    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;
    }

    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";
    }
}

Aktifkan situs dan minta sertifikat:

sudo ln -s /etc/nginx/sites-available/vaultwarden /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx
sudo certbot --nginx -d vault.domainanda.com

Certbot akan mengubah konfigurasi Nginx agar HTTPS aktif dan perpanjangan sertifikat berjalan otomatis lewat systemd timer. Uji perpanjangan dengan:

sudo certbot renew --dry-run

Blok /notifications/hub dengan header WebSocket diperlukan agar sinkronisasi live antar perangkat berjalan. Tanpa itu, Vaultwarden tetap bisa dipakai, tapi perubahan di satu perangkat tidak langsung muncul di perangkat lain.

Membuat Akun Pertama

Karena pendaftaran dimatikan secara default, urutannya begini:

  1. Ubah SIGNUPS_ALLOWED menjadi true di docker-compose.yml.
  2. Jalankan docker compose up -d untuk menerapkan perubahan.
  3. Buka https://vault.domainanda.com, pilih "Create Account", isi email dan master password yang kuat dan unik.
  4. Setelah akun jadi, ubah kembali SIGNUPS_ALLOWED menjadi false dan jalankan docker compose up -d lagi.

Master password ini bukan password yang boleh sama dengan password akun lain. Simpan juga di tempat aman di luar server, misalnya ditulis di kertas yang disimpan di rumah. Kehilangan master password berarti kehilangan seluruh brankas.

Masuk ke panel admin di https://vault.domainanda.com/admin dengan token yang tadi dibuat. Dari sana Anda bisa melihat pengguna terdaftar dan mengatur undangan organisasi bila perlu.

Menghubungkan Aplikasi Bitwarden

Di HP dan browser, instal aplikasi Bitwarden resmi, lalu ubah pengaturan server self-hosted sebelum login:

  • Di aplikasi desktop dan mobile: pada layar login, pilih pengaturan server dan isi URL server dengan https://vault.domainanda.com.
  • Di ekstensi browser: menu pengaturan, kolom URL server, isi alamat yang sama.

Setelah itu login dengan email dan master password yang dibuat tadi. Brankas akan tersinkronisasi lewat server Anda sendiri.

Impor dari Bitwarden atau Password Manager Lain

Kalau sebelumnya memakai Bitwarden cloud atau password manager lain, jangan memindahkan password satu per satu. Ekspor dulu dari layanan lama dalam format CSV atau JSON, lalu di web vault Vaultwarden pilih Tools, Import Data, pilih format yang sesuai, dan unggah file ekspor.

Setelah impor selesai dan Anda memastikan semua item sudah masuk dengan benar, hapus file ekspor dari komputer. File ekspor berisi password dalam bentuk teks biasa. Menyimpannya di folder Downloads adalah kesalahan yang sering terjadi.

Untuk akun yang paling penting — email utama, rekening, dan akun server — aktifkan juga otentikasi dua faktor (2FA) di masing-masing layanan, dan simpan kode cadangan 2FA di luar Vaultwarden.

Backup Database

Semua data Vaultwarden tersimpan di volume ./vw-data, termasuk file database db.sqlite3. Backup berarti menyalin direktori itu secara berkala ke tempat lain. Jangan membackup database selagi container sedang menulis tanpa menghentikan container dulu, karena file SQLite bisa tersalin dalam keadaan tidak konsisten.

Cara paling aman untuk VPS kecil:

cd ~/vaultwarden
docker compose stop vaultwarden
tar -czf ~/backup-vaultwarden-$(date +%F).tar.gz vw-data
docker compose start vaultwarden

Simpan file backup di luar VPS, misalnya di komputer pribadi atau penyimpanan cloud terenkripsi. Uji restore sesekali di server percobaan: ekstrak backup, jalankan Vaultwarden dari data tersebut, dan pastikan login masih bisa. Backup yang belum pernah diuji restore-nya hanyalah harapan, bukan jaminan.

Jadwalkan backup otomatis dengan cron, misalnya setiap malam:

crontab -e

Tambahkan baris:

0 2 * * * cd ~/vaultwarden && docker compose stop vaultwarden && tar -czf ~/backup-vaultwarden-$(date +\%F).tar.gz vw-data && docker compose start vaultwarden

Perhatikan karakter % yang di-escape dengan backslash di crontab. Tanpa escape, cron akan memotong perintah.

Update dan Perawatan

Perbarui Vaultwarden secara berkala. Image latest tidak memperbarui container yang sudah berjalan secara otomatis, jadi jalankan:

cd ~/vaultwarden
docker compose pull
docker compose up -d
docker images -f "dangling=true" -q | xargs -r docker rmi

Lakukan update saat Anda sempat memantau, bukan sebelum tidur. Kalau update bermasalah, backup terbaru memungkinkan Anda kembali ke versi sebelumnya dengan mengembalikan direktori vw-data dan menjalankan ulang container.

Pantau juga ruang disk VPS. Database Vaultwarden kecil, tapi log Docker dan backup yang menumpuk bisa memenuhi disk. Hapus backup lama secara berkala dan sisakan beberapa salinan terbaru saja.

Checklist Penutup

  • Vaultwarden jalan lewat Docker Compose, port hanya di-bind ke localhost.
  • HTTPS aktif lewat Nginx dan Certbot, sertifikat terverifikasi bisa diperpanjang.
  • SIGNUPS_ALLOWED sudah kembali ke false setelah akun pertama dibuat.
  • ADMIN_TOKEN dibuat acak dan disimpan aman, bukan ditulis di file yang dibagikan.
  • Aplikasi Bitwarden di HP dan browser sudah diarahkan ke server sendiri dan sinkronisasi jalan.
  • Data lama sudah diimpor dan file ekspor sudah dihapus.
  • Backup vw-data otomatis setiap malam dan sudah pernah diuji restore-nya.
  • Master password kuat, unik, dan tersimpan di luar server.

Dengan checklist ini selesai, Anda punya password manager yang datanya tinggal di server sendiri, bisa diakses dari semua perangkat, dan bisa dipulihkan saat terjadi masalah. Itu peningkatan keamanan nyata dibanding menyimpan password di catatan atau memakai password yang sama di mana-mana.

Komentar