Cara Self-Host Vaultwarden di VPS dengan Docker
Panduan lengkap memasang Vaultwarden pada VPS menggunakan Docker. Ketahui cara mengurus token admin, konfigurasi HTTPS, Fail2ban, serta langkah sandaran data yang selamat.
Apa yang anda bina
Pengurus kata laluan yang anda miliki sepenuhnya: Vaultwarden yang berjalan dalam satu kontena kecil di sebalik reverse proxy yang menamatkan HTTPS, dengan aplikasi rasmi Bitwarden pada telefon, komputer riba dan pelayar web anda yang dihalakan kepadanya. Vaultwarden melaksanakan semula API pelayan Bitwarden dalam Rust dan menggunakan protokol yang sama seperti bitwarden.com, jadi setiap klien rasmi berfungsi dengannya tanpa sebarang perubahan, namun ia hanya menggunakan kira-kira 100 MB RAM berbanding tindanan (stack) rasmi yang memerlukan berbilang kontena.
Pemasangan itu sendiri terdiri daripada sedozen baris kod Compose. Tiga perkara yang benar-benar penting, dan sering menyebabkan kegagalan, adalah seperti berikut: TLS mesti wujud sebelum anda memuatkan web vault, pendaftaran awam mesti ditutup sebaik sahaja akaun anda sendiri diwujudkan, dan volum data mesti disandarkan serta diuji pemulihannya, kerana direktori tersebut menyimpan setiap kata laluan yang anda miliki.
Prasyarat dan perkara penting yang perlu diketahui
- Sebuah VPS dengan Docker Engine dan pemalam Compose, pada sistem Ubuntu 24.04 KVM yang baharu dengan akses root atau sudo. RAM sebanyak 512 MB sudah memadai; 1 GB adalah lebih selesa. Ini merupakan salah satu perkhidmatan paling ringan yang boleh anda jalankan, dan ia berada di kedudukan teratas dalam senarai perkhidmatan yang berbaloi untuk dihoskan sendiri. Walau bagaimanapun, sesuaikan saiz pelayan mengikut aplikasi lain yang turut dijalankan: meletakkan pustaka foto yang dihoskan sendiri seperti PhotoPrism atau Immich pada VPS yang sama akan meningkatkan keperluan RAM anda kepada beberapa gigabait, manakala Vaultwarden hampir tidak memberikan kesan. Pengiraan yang sama terpakai untuk antaramuka media yang anda tambah kemudian, memandangkan mengubah pustaka Jellyfin menjadi seperti kedai sewa filem era 90-an bermakna satu lagi kontena yang sentiasa berjalan serta ruang tambahan untuk transkod dalam bajet yang sama.
- Sebuah domain dengan rekod A (dan AAAA jika anda mempunyai IPv6) yang menghala
vault.example.comke VPS tersebut. Sijil TLS dikeluarkan untuk nama domain yang tepat ini, jadi DNS mesti diselesaikan sebelum anda bermula. - Port 80 dan 443 dibuka kepada internet, ditamatkan oleh reverse proxy anda, bukan oleh Vaultwarden secara terus. Port 80 hanya digunakan untuk cabaran sijil ACME dan pengalihan HTTP ke HTTPS.
- Perkara paling penting untuk diketahui awal: klien Bitwarden enggan berhubung dengan pelayan yang tidak menggunakan HTTPS. Tiada pilihan "uji melalui http dahulu", laluan tersebut tidak berfungsi, atas sebab konkrit yang akan dibincangkan seterusnya.
Mengapa memilih Vaultwarden, bukan stack rasmi Bitwarden
Menggunakan klien yang sama, tetapi dengan penggunaan sumber yang jauh lebih ringan. Stack rasmi Bitwarden untuk self-hosting diedarkan sebagai himpunan kontena (MSSQL, Nginx, Identity, Api, Admin dan lain-lain) yang memerlukan kira-kira 2 GB RAM. Vaultwarden pula merupakan satu binari tunggal yang menyimpan segala data dalam pangkalan data SQLite secara lalai, serta hanya menggunakan beberapa puluh megabait RAM semasa melahu. Bagi kegunaan individu, keluarga atau pasukan kecil, ia merupakan pilihan yang jelas. Memandangkan ia melaksanakan API Bitwarden dengan tepat, data anda kekal mudah alih antara pelayan ini dan bitwarden.com.
Perkara yang anda korbankan adalah sebahagian besar fungsi peringkat perusahaan: tiada penyediaan SCIM (walaupun OpenID Connect SSO eksperimental telah diperkenalkan dalam versi 1.35.0), dan anda sendiri yang bertindak sebagai pengendali. Oleh itu, tugas menampal (patching), mengurus HTTPS dan melakukan sandaran (backups) adalah tanggungjawab anda. Panduan ini merangkumi ketiga-tiga tugas tersebut.
Mengapa HTTPS bukan pilihan
Bitwarden web vault dan pelanjutan pelayar menerbitkan kunci penyulitan anda dalam pelayar menggunakan Web Crypto API (window.crypto.subtle). Pelayar hanya mendedahkan crypto.subtle dalam konteks selamat, HTTPS, atau kes khas http://localhost. Melalui http://vault.example.com biasa, ia adalah undefined, jadi sebaik sahaja aplikasi menerbitkan kunci, ia akan terhenti dan konsol akan memaparkan:
Uncaught (in promise) TypeError: Cannot read properties of undefined (reading 'importKey')Halaman tersebut tergantung atau memaparkan ralat kripto generik, dan tiada apa-apa yang log masuk. Pelanggan desktop, mudah alih dan pelayar menjalankan semakan mereka sendiri terhadap URL yang dihoskan sendiri, dan terhadap titik akhir http (atau yang tidak boleh dicapai), ia menolak dengan:
This is not a recognized Bitwarden server. You may need to check with your provider or update your server.Kedua-duanya mempunyai punca yang sama: tiada HTTPS yang sah. Oleh itu, kita sediakan TLS terlebih dahulu dan jangan sekali-kali membuka vault melalui http, walaupun sekali untuk melihat dengan pantas.
Langkah 1, DNS dan reverse proxy (TLS dahulu)
Halakan rekod tersebut ke VPS anda dan sahkan bahawa ia diselesaikan kepada alamat yang betul:
dig +short vault.example.comBaris yang dicetak mestilah IP VPS anda. Jika ia kosong atau salah, betulkan DNS dan tunggu sehingga TTL tamat, kerana pengeluaran sijil akan gagal jika nama domain tidak dapat diselesaikan.
Untuk bahagian hadapan HTTPS, panduan ini menggunakan Traefik, yang mengeluarkan dan memperbaharui sijil Let's Encrypt secara automatik serta disepadukan terus ke dalam Compose. Jika anda belum menjalankannya, ikuti persediaan reverse proxy Traefik dan TLS automatik terlebih dahulu; ia mencipta rangkaian Docker luaran (proxy di bawah) dan penyelesai ACME (letsencrypt) yang akan disambungkan oleh servis Vaultwarden. Penggunaan nginx biasa dengan sijil yang dikeluarkan secara manual berfungsi dengan cara yang sama dari sisi Vaultwarden.
Lebih gemar menggunakan nginx dan Certbot berbanding Traefik? Letakkan Vaultwarden pada 127.0.0.1:8080 (tambahkan ports: ["127.0.0.1:8080:80"] pada servis tersebut dan buang label Traefik), kemudian keluarkan sijil dan lakukan proksi kepadanya. Bahagian sijil telah diterangkan dalam pengeluaran sijil Let's Encrypt dengan Certbot dan nginx. Perkara tambahan yang kritikal ialah naik taraf WebSocket pada laluan pemberitahuan:
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, ia membolehkan Fail2ban melihat penyerang sebenar kemudiannya dan bukannya 127.0.0.1. Segala perkara lain dalam panduan ini adalah sama tidak kira sama ada Traefik atau nginx yang berada di hadapan.
Langkah 2, fail Compose
Cipta direktori projek terlebih dahulu. Panduan ini menggunakan /opt/vaultwarden, yang menjadikan nama projek Compose, dan seterusnya volum data, vaultwarden_vw-data, boleh diramal; langkah Fail2ban dan sandaran di bawah bergantung pada nama yang tepat itu.
sudo mkdir -p /opt/vaultwarden
cd /opt/vaultwardenCipta .env untuk rahsia pentadbir dan fail Compose dalam direktori tersebut.
# .env
ADMIN_TOKEN=paste-a-strong-token-hereJana token tersebut dengan openssl rand -base64 48 dan tampalkannya di dalam. (Bentuk hash yang lebih kuat akan dibincangkan seterusnya; rentetan rawak yang panjang sudah memadai untuk permulaan.)
# 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: trueDua perkara mengenai fail ini membawa keseluruhan reka bentuk. Tiada pemetaan ports:, jadi Vaultwarden hanya boleh dicapai melalui Traefik dan TLS-nya; menerbitkan portnya pada hos adalah punca orang ramai menyajikan vault melalui http secara tidak sengaja. Dan DOMAIN mestilah URL HTTPS awam yang penuh: ia disepadukan ke dalam pautan lampiran, WebAuthn 2FA dan titik akhir pemberitahuan, jadi nilai yang salah atau http akan merosakkan fungsi tersebut walaupun laman web dimuatkan. Tag latest adalah pengecualian sengaja kepada peraturan biasa jangan-latest, Vaultwarden mengeluarkan release stabilnya sebagai satu imej rolling, dengan :testing sebagai saluran pra-keluaran yang berasingan, jadi kemas kini dengan tujuan dan baca nota keluaran sebelum anda melakukan pull. Walau bagaimanapun, pengecualian itu terhad: kebanyakan kontena yang berjalan lama adalah lebih baik jika dipinkan pada tag yang tepat, itulah yang memastikan ejen yang sentiasa aktif dan dihoskan sendiri pada VPS yang sama boleh diramal merentas but semula dan pull.
Hidupkan ia dan perhatikan log:
docker compose up -d
docker compose logs -f vaultwardenPermulaan yang betul berakhir dengan baris seperti Rocket has launched from http://0.0.0.0:80. Berikan Traefik beberapa saat untuk mendapatkan sijil, kemudian muatkan https://vault.example.com, anda sepatutnya mendapat vault web Bitwarden dengan ikon mangga yang sah dan tiada amaran sijil.
Langkah 3, ADMIN_TOKEN yang kukuh, dan perangkap $$
ADMIN_TOKEN melindungi /admin, panel yang boleh membaca setiap pengguna dan tetapan pada instans anda, jadi layan ia seperti kata laluan root. Dua bentuk boleh digunakan.
Bentuk ringkas ialah rentetan rawak yang telah anda jana dengan openssl rand -base64 48. Oleh kerana base64 tidak pernah mengandungi $, ia boleh dimasukkan terus ke dalam .env tanpa perlu melarikan aksara (escaping).
Bentuk yang diperkukuh ialah hash Argon2 PHC, jadi token teks biasa tidak pernah disimpan pada cakera. Jana satu menggunakan imej yang sama:
docker run --rm -it vaultwarden/server /vaultwarden hash --preset owaspIa akan meminta input dua kali dan mencetak rentetan yang bermula dengan $argon2id$v=19$.... Berikut adalah perangkap yang membuang masa selama sejam: Docker Compose menganggap $ sebagai interpolasi pemboleh ubah, jadi anda mesti menggandakan setiap $ kepada $$ apabila anda menampal hash tersebut ke dalam fail Compose. Letakkannya terus di bawah environment:, bukan melalui .env, dan jangan bungkusnya dengan tanda petikan:
environment:
ADMIN_TOKEN: $$argon2id$$v=19$$m=19456,t=2,p=1$$c29tZXNhbHQ$$RdescudvJCsgt3ub+b+dWRWJTmaaJObGJika anda membiarkan tanda $ tunggal, Compose akan memberi amaran The "argon2id" variable is not set dan mengosongkan token tersebut, kemudian /admin akan menolak kata laluan anda yang betul. Jalankan docker compose up -d, dan simpan teks biasa yang anda taip pada gesaan tersebut di dalam stor kata laluan anda sendiri.
Langkah 4, daftar akaun anda, kemudian kunci pintu
Dengan SIGNUPS_ALLOWED: "true", buka https://vault.example.com, klik Create account, dan daftar menggunakan e-mel serta kata laluan induk yang kuat. Kata laluan induk ini tidak boleh dipulihkan, tiada fungsi set semula, jadi simpan ia di tempat yang tahan lama terlebih dahulu.
Sekarang tutup pintu. Sunting fail Compose supaya pendaftaran dimatikan:
SIGNUPS_ALLOWED: "false"Gunakan semula dengan docker compose up -d. Ini bukan pengukuhan yang boleh ditangguhkan. Jika dibiarkan terbuka, sesiapa sahaja yang menemui URL tersebut, termasuk perangkak (crawlers), boleh mencipta akaun pada pelayan anda. Mereka tidak boleh membaca peti simpanan anda, tetapi mereka akan menggunakan sumber pelayan dan menukarkan instans peribadi anda menjadi servis terbuka. Petanda bahawa anda membiarkannya terbuka: /admin menyenaraikan akaun yang tidak pernah anda cipta.
Untuk menambah ahli keluarga atau rakan sepasukan kemudian tanpa membuka semula pendaftaran awam, gunakan butang Invite User dalam /admin; laluan tersebut memerlukan SMTP dikonfigurasikan supaya penerima jemputan menerima pautan mereka.
Langkah 5, mencapai /admin
Layari https://vault.example.com/admin dan masukkan token admin teks biasa (rentetan rawak, atau kata laluan yang anda hash, bukan hash itu sendiri). Di dalam, anda boleh menyenaraikan pengguna, melaraskan tetapan, menghantar e-mel ujian dan mengambil snapshot pangkalan data.
Jika halaman memaparkan 404 Not Found, ADMIN_TOKEN adalah kosong atau tidak ditetapkan, yang melumpuhkan panel sepenuhnya, satu pilihan yang sah jika anda tidak memerlukannya. Jika ia dimuatkan tetapi menolak token anda, lihat perangkap escaping $$ dalam senarai kegagalan di bawah. Terlupa token? Tiada gesaan pemulihan; edit .env atau fail Compose, tetapkan yang baharu, dan docker compose up -d.
Langkah 6, sambungkan klien Bitwarden
Setiap klien rasmi boleh dihalakan ke pelayan yang dihoskan sendiri (self-hosted). Pasang klien desktop, mudah alih atau pelayar Bitwarden daripada gedung aplikasi biasa; anda tidak memerlukan binaan Vaultwarden yang khusus.
Sebelum log masuk, buka ikon tetapan (gear) pada skrin log masuk (dilabelkan sebagai Self-hosted atau Region → Self-hosted), tetapkan Server URL kepada https://vault.example.com, kemudian simpan. Seterusnya, log masuk menggunakan e-mel dan kata laluan induk yang telah anda daftarkan; klien sepatutnya bersambung serta-merta dan menawarkan fungsi untuk mengisi serta menyimpan kelayakan.
Jika klien memaparkan This is not a recognized Bitwarden server. You may need to check with your provider or update your server., bermakna URL tersebut salah, menggunakan http, atau sijil tidak dipercayai. Semak semula sama ada https://vault.example.com dimuatkan dengan sempurna dalam pelayar terlebih dahulu. Kemas kini yang perlahan pada peranti lain adalah disebabkan oleh WebSocket push, yang akan dibincangkan di bawah.
Langkah 7, jail Fail2ban untuk endpoint log masuk
Vaultwarden merekodkan setiap percubaan log masuk yang gagal ke dalam fail yang ditetapkan oleh LOG_FILE, iaitu maklumat yang diperlukan oleh pelindung serangan brute-force. Jika anda belum menjalankan Fail2ban, pemasangan dan asasnya ada dalam panduan pengukuhan SSH Fail2ban; di sini kita akan menambah satu jail untuk vault tersebut.
Pertama, cari lokasi named volume pada hos supaya Fail2ban boleh membaca log tersebut:
docker volume inspect vaultwarden_vw-data --format '{{ .Mountpoint }}'Perintah itu akan memaparkan sesuatu seperti /var/lib/docker/volumes/vaultwarden_vw-data/_data; log tersebut berada di vaultwarden.log di dalamnya. Cipta penapis (filter):
# /etc/fail2ban/filter.d/vaultwarden.conf
[Definition]
failregex = ^.*Username or password is incorrect\. Try again\. IP: <ADDR>\. Username:.*$
ignoreregex =Dan jail tersebut:
# /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 = 3600Muat semula dengan sudo systemctl restart fail2ban dan sahkan dengan sudo fail2ban-client status vaultwarden.
Tiga perincian Docker menentukan sama ada ini memberikan perlindungan atau tidak. Pertama, jika log menunjukkan IP: 127.0.0.1 atau alamat proksi anda pada setiap percubaan yang gagal, Vaultwarden sebenarnya mengharamkan (ban) proksi tersebut. Tetapkan IP_HEADER kepada header yang sebenarnya dihantar oleh proksi anda (X-Forwarded-For untuk Traefik, X-Real-IP untuk blok nginx di atas, CF-Connecting-IP jika di belakang Cloudflare). Kedua, chain iptables yang betul bergantung pada proksi anda: dengan Traefik yang berjalan sebagai kontena dengan port yang diterbitkan, trafik melalui laluan FORWARD Docker, jadi ban tersebut mestilah berada dalam DOCKER-USER seperti di atas; namun jika anda memilih opsyen host-nginx daripada Langkah 1, sambungan ditamatkan pada chain INPUT hos di nginx dan ban DOCKER-USER tidak akan mengesan sambungan tersebut. Dalam kes itu, padamkan baris chain = DOCKER-USER supaya Fail2ban menggunakan chain INPUT lalai. Ketiga, gunakan banaction = iptables-allports dan bukannya lalai berasaskan port. Jail ini tidak mentakrifkan sebarang port, dan ban semua-port dalam DOCKER-USER akan menyekat penyerang daripada setiap servis yang diterbitkan pada mesin tersebut dengan berkesan.
Langkah 8, sandarkan vault, kemudian lakukan pemulihan
Volum vw-data adalah pengurus kata laluan anda. Ia menyimpan db.sqlite3 (setiap entri), direktori attachments/ dan sends/, fail rsa_key.* yang menandatangani sesi log masuk, serta config.json daripada panel admin. Sandaran yang tertinggal mana-mana bahagian ini akan gagal apabila anda memerlukannya.
Menyalin db.sqlite3 semasa Vaultwarden sedang menulis boleh menyebabkan fail yang disalin menjadi separa lengkap atau rosak, jadi lakukan snapshot sejuk (cold snapshot); waktu henti hanya mengambil masa beberapa saat:
#!/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 vaultwardenJalankan arahan ini melalui cron setiap malam dan salin .tgz keluar daripada pelayan tersebut; sandaran yang hanya disimpan pada pelayan yang anda lindungi bukanlah sandaran yang sebenar. Cara yang kemas untuk menghantarnya adalah melalui sandaran restic setiap malam ke pelayan lain atau storan objek, yang menyulitkan arkib dan melakukan penyahduplikasian snapshot berulang untuk anda. Butang Backup Database pada panel admin ialah snapshot panas (hot snapshot) yang mudah untuk fail SQLite sahaja, tetapi ia tidak menyertakan lampiran dan kunci.
Sekarang, lakukan prosedur yang membezakan sandaran sebenar daripada sandaran harapan: pulihkan ia sekali dan buktikan bahawa ia berfungsi:
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/serverDaripada komputer riba anda, buat terowong ke pelayan tersebut dengan ssh -L 8888:127.0.0.1:8888 you@your-vps dan buka http://localhost:8888. Oleh kerana localhost ialah konteks selamat, crypto.subtle tersedia dan vault dinyahsulit melalui http biasa di sini, satu-satunya tempat yang dibenarkan. Log masuk dengan kata laluan induk anda dan sahkan entri anda ada: jika ada, pangkalan data, kunci RSA, dan kata laluan induk anda semuanya berfungsi dengan baik, dan anda boleh membina semula pada VPS baharu dalam beberapa minit. Hentikan kontena dengan Ctrl-C dan padam /tmp/vw-restore. Kekalkan tabiat menggunakan terowong untuk mana-mana UI admin lain pada pelayan yang tidak sepatutnya terdedah kepada internet; ini juga cara anda mengakses pengimbas keselamatan open-kritt yang dihoskan sendiri pada port 5173.
Mod kegagalan, berserta rentetan yang akan anda lihat
Cannot read properties of undefined (reading 'importKey') dalam konsol pelayar. Vault dimuatkan melalui http, jadi crypto.subtle tidak ditakrifkan; capai ia hanya melalui https:// dan tambah ubah hala HTTP-ke-HTTPS pada proksi.
This is not a recognized Bitwarden server... dalam klien. URL Pelayan adalah http, tersalah taip, atau sijil tidak dipercayai; sahkan https://vault.example.com memaparkan ikon mangga yang sah, kemudian masukkan semula dalam tetapan self-hosted klien.
/admin menolak kata laluan yang betul. Hash Argon2 kehilangan escaping-nya, setiap $ mestilah $$ dalam Compose, atau anda memasukkan hash tersebut dan bukannya teks biasa yang diwakilinya.
Penyelarasan rentas peranti perlahan; konsol menunjukkan WebSocket connection to 'wss://vault.example.com/notifications/hub' failed. Proksi tidak memajukan pengepala Upgrade/Connection; Traefik melakukan ini secara automatik, nginx memerlukan dua baris upgrade daripada Langkah 1. Vault masih berfungsi, cuma penyelarasan berlaku semasa dibuka. Port khusus 3012 yang lama telah tiada sejak v1.31.0, jadi tiada laluan WebSocket berasingan diperlukan.
Fail2ban melaporkan sekatan tetapi penyerang terus menyambung. Ia menyekat 127.0.0.1 kerana IP_HEADER salah, atau sekatan berada dalam rantaian iptables yang salah, tetapkan chain = DOCKER-USER dan banaction = iptables-allports.
Naik Taraf
Tarik imej baharu dan cipta semula; volum bernama dan semua data anda akan kekal:
docker compose pull
docker compose up -dVaultwarden kerap mengeluarkan versi baharu. Pantau nota keluaran projek dan jangan tetapkan versi patch secara statik, kerana sesetengah keluaran mengandungi nota migrasi. Lakukan sandaran terkini sebelum sebarang peningkatan versi utama; anda boleh membuat rollback dengan memulihkan fail tarball ke dalam volum baharu.
FAQ
Adakah Vaultwarden sama dengan Bitwarden?
Ia merupakan pelayan bebas yang serasi, bukan pelayan rasmi. Vaultwarden melaksanakan semula API pelayan Bitwarden menggunakan Rust, jadi semua klien rasmi desktop, mudah alih, pelayar dan CLI boleh berfungsi dengannya, dengan penggunaan sumber yang jauh lebih rendah berbanding tindanan rasmi. Format peti simpanan (vault) adalah sama, jadi anda boleh berhijrah ke mana-mana arah dengan melakukan eksport dan import.
Adakah saya benar-benar perlukan HTTPS, atau bolehkah saya menjalankannya melalui http pada LAN saya?
Anda memerlukan HTTPS untuk semua perkara kecuali ujian localhost. Web vault dan sambungan Bitwarden menggunakan Web Crypto API pelayar, yang hanya tersedia dalam konteks selamat. Oleh itu, melalui http biasa, klien akan mengeluarkan ralat Cannot read properties of undefined dan tidak akan membenarkan log masuk. Satu-satunya alamat http yang berfungsi ialah http://localhost, itulah sebabnya ujian pemulihan dalam Langkah 8 menggunakan terowong SSH.
Bagaimanakah cara untuk menghalang orang asing daripada mendaftar pada pelayan saya?
Tetapkan SIGNUPS_ALLOWED: "false" dalam fail Compose dan jalankan docker compose up -d, serta-merta selepas mencipta akaun anda sendiri. Selepas itu, tambah pengguna baharu melalui butang Invite User dalam /admin, yang memerlukan SMTP dikonfigurasikan supaya mereka menerima pautan jemputan. Semak senarai pengguna pentadbir dari semasa ke semasa untuk memastikan tiada akaun yang tidak dijangka muncul.
Bagaimanakah cara untuk membuat sandaran peti simpanan Vaultwarden saya?
Hentikan kontena seketika dan arkibkan keseluruhan volum vw-data, db.sqlite3, attachments/, sends/, config.json serta fail rsa_key.*, kemudian salin arkib tersebut keluar dari pelayan, sebaik-baiknya menggunakan cron setiap malam. Menyalin fail SQLite secara langsung semasa pelayan berjalan berisiko menyebabkan snapshot yang rosak, jadi lakukan semasa ia tidak aktif. Paling penting, pulihkan sandaran tersebut sekali ke dalam kontena percubaan dan cuba log masuk, supaya anda tahu sandaran itu sah sebelum anda bergantung kepadanya.
Adakah selamat untuk mengehos sendiri kata laluan saya?
Ya, jika anda melakukan tiga perkara yang diliputi dalam panduan ini: HTTPS yang sebenar, pendaftaran ditutup berserta token pentadbir yang kuat, dan sandaran yang telah diuji. Peti simpanan anda disulitkan di bahagian klien dengan kata laluan induk anda, jadi pelayan pun tidak akan melihat kata laluan anda dalam bentuk teks biasa; db.sqlite3 yang dicuri tidak berguna tanpanya. Pertukarannya ialah penampalan (patching) dan sandaran kini menjadi tanggungjawab anda, itulah sebabnya Fail2ban dan ritual pemulihan bukanlah pilihan di sini. Setelah perkara tersebut disediakan, tinjauan lebih mendalam tentang bahagian mana peti simpanan yang dihoskan sendiri boleh diserang adalah langkah seterusnya yang berguna, kerana dengan entri itu sendiri disulitkan di dalam klien, perkara yang perlu dipertahankan hanyalah token pentadbir dan arkib sandaran.