Vaultwarden VPS kurulumu nasıl yapılır?
Docker ile VPS üzerinde Vaultwarden kurulumu gerçekleştirin. HTTPS yapılandırması, admin token ayarları ve veri yedekleme yöntemleri hakkında teknik rehber.
İnşa edilen yapı
Tamamen size ait bir şifre yöneticisi: HTTPS bağlantısını sonlandıran bir reverse proxy arkasında çalışan bir Vaultwarden konteyneri; telefon, dizüstü bilgisayar ve tarayıcıdaki resmi Bitwarden uygulamaları bu yapıya yönlendirilir. Vaultwarden, Bitwarden sunucu API'sini Rust ile yeniden uygular ve bitwarden.com ile aynı protokolü kullanır. Bu sayede tüm resmi istemciler, herhangi bir değişiklik yapmadan bu yapı ile çalışabilir; ancak çoklu konteyner içeren resmi yığın yerine yaklaşık 100 MB RAM tüketir.
Kurulum işlemi bir düzine Compose satırından ibarettir. Asıl önemli olan ve hata oluşmasına neden olabilecek üç unsur şunlardır: Web kasası (web vault) yüklenmeden önce TLS mevcut olmalıdır, kendi hesabınız oluşturulduğu anda genel kayıtlar (public signups) kapatılmalıdır ve veri dizini (data volume) yedeklenip geri yükleme testleri yapılmalıdır; çünkü tüm şifreleriniz bu dizinde tutulur.
Ön Koşullar ve dikkat edilmesi gerekenler
- Docker Engine ve Compose eklentisi yüklü bir VPS; temiz bir Ubuntu 24.04 KVM üzerinde root veya sudo yetkisi gereklidir. 512 MB RAM yeterlidir; 1 GB konforlu bir kullanım sağlar. Bu, çalıştırılabilecek en hafif servislerden biridir; kendi sunucunuzda barındırmaya değer servisler listesinin en üst sıralarında yer alır.
vault.example.comadresine yönlendirilmiş, A kaydı (IPv6 varsa AAAA kaydı) olan bir alan adı. TLS sertifikası bu isim için düzenlenir, bu nedenle kurulumdan önce DNS çözümlemesi yapılmalıdır.- İnternete açık 80 ve 443 portları; bu portlar doğrudan Vaultwarden yerine bir reverse proxy tarafından sonlandırılmalıdır. Port 80, yalnızca ACME sertifika doğrulaması ve HTTP-to-HTTPS yönlendirmesi için kullanılır.
- En önemli sorun: Bitwarden istemcileri HTTPS olmayan bir sunucuyla bağlantı kurmayı reddeder. "Önce HTTP üzerinden test etme" seçeneği yoktur; bir sonraki bölümde açıklanan somut bir nedenden dolayı bu yöntem çalışmaz.
Neden Vaultwarden, resmi Bitwarden yığını değil
Aynı istemciler, çok daha düşük kaynak kullanımı. Resmi self-hosted Bitwarden; MSSQL, Nginx, Identity, Api, Admin ve daha fazlasından oluşan bir konteyner paketi olarak sunulur ve yaklaşık 2 GB RAM gerektirir. Vaultwarden ise varsayılan olarak her şeyi bir SQLite veritabanında saklayan tek bir binary dosyasıdır ve boşta çalışırken sadece birkaç on megabayt harcar. Tek bir kişi, bir aile veya küçük bir ekip için en mantıklı seçimdir; Bitwarden API'sini sadık bir şekilde uyguladığı için verileriniz Vaultwarden ile bitwarden.com arasında taşınabilir kalır.
Vazgeçmeniz gerekenler ise kurumsal özelliklerin çoğudur: SCIM provisioning özelliği yoktur (ancak 1.35.0 sürümüyle deneysel OpenID Connect SSO eklenmiştir) ve operatör siz olduğunuz için yamalama, HTTPS ve yedekleme işlemleri sizin sorumluluğunuzdadır. Bu kılavuz bu üç görevi kapsamaktadır.
HTTPS neden zorunludur
Bitwarden web vault ve tarayıcı eklentileri, şifreleme anahtarlarını tarayıcıda Web Crypto API (window.crypto.subtle) kullanarak türetir. Tarayıcılar, crypto.subtle özelliğini yalnızca bir secure context (güvenli bağlam) içerisinde sunar; bu da HTTPS veya http://localhost özel durumudur. Düz http://vault.example.com üzerinden bu özellik undefined olduğundan, uygulama anahtar türetmeye çalıştığı anda hata verir ve konsolda şu görünür:
Uncaught (in promise) TypeError: Cannot read properties of undefined (reading 'importKey')Sayfa donar veya genel bir crypto hatası gösterir, oturum açma işlemi gerçekleşmez. Masaüstü, mobil ve tarayıcı istemcileri, self-hosted URL'ye karşı kendi kontrollerini gerçekleştirir; http (veya ulaşılamayan) bir uç noktaya karşı ise şu hata ile işlemi reddeder:
This is not a recognized Bitwarden server. You may need to check with your provider or update your server.Her iki durumun sebebi aynıdır: geçerli bir HTTPS bağlantısının olmaması. Bu nedenle, önce TLS yapılandırılmalıdır; kasa içeriğine hızlıca bakmak için bile olsa asla http üzerinden açılmamalıdır.
Step 1 — DNS ve reverse proxy (önce TLS)
Kaydı VPS adresinize yönlendirin ve doğru adrese çözümlendiğini doğrulayın:
dig +short vault.example.comYazdırılan satır VPS IP adresiniz olmalıdır. Eğer satır boşsa veya yanlışsa, DNS ayarlarını düzeltin ve TTL süresinin dolmasını bekleyin; çözümlenemeyen bir isim üzerinden sertifika oluşturma işlemi başarısız olur.
HTTPS ön yüzü için bu kılavuz, Let's Encrypt sertifikalarını otomatik olarak oluşturan ve yenileyen, ayrıca Compose ile doğrudan entegre olan Traefik kullanmaktadır. Eğer halihazırda kullanmıyorsanız, önce Traefik reverse proxy ve otomatik TLS kurulumu adımlarını takip edin; bu işlem harici bir Docker ağı (aşağıda proxy) ve Vaultwarden servisinin bağlandığı bir ACME çözücü (letsencrypt) oluşturur. El ile oluşturulmuş bir sertifika ile kullanılan standart nginx, Vaultwarden tarafında aynı şekilde çalışır.
Traefik yerine nginx ve Certbot mu tercih ediyorsunuz? Vaultwarden'ı 127.0.0.1:8080 üzerine kurun (servise ports: ["127.0.0.1:8080:80"] ekleyin ve Traefik etiketlerini kaldırın), ardından bir sertifika oluşturun ve servise proxy yapın. Sertifika süreci Certbot ve nginx ile Let's Encrypt sertifikası oluşturma bölümünde kapsanmıştır. Kritik ek adım, bildirim yolu üzerindeki WebSocket yükseltmesidir:
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";
}
}X-Real-IP satırına dikkat edin; bu satır, Fail2ban'ın daha sonra 127.0.0.1 yerine gerçek saldırganı görmesini sağlar. Bu kılavuzdaki diğer tüm adımlar, ön yüzde Traefik veya nginx kullanılması durumunda da aynıdır.
Step 2 — Compose dosyası
Öncelikle proje dizinini oluşturun. Bu kılavuz, Compose proje adını —ve dolayısıyla veri hacmi olan vaultwarden_vw-data'u— öngörülebilir kılan /opt/vaultwarden kullanmaktadır; aşağıdaki Fail2ban ve yedekleme adımları bu isme bağlıdır.
sudo mkdir -p /opt/vaultwarden
cd /opt/vaultwardenAdmin secret ve Compose dosyası için bir .env oluşturun ve dosyayı bu dizine yerleştirin.
# .env
ADMIN_TOKEN=paste-a-strong-token-hereToken'ı openssl rand -base64 48 ile oluşturun ve dosyaya yapıştırın. (Bir sonraki adımda daha güçlü bir hash yöntemi ele alınacaktır; başlangıç için uzun ve rastgele bir dizin yeterlidir.)
# 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: trueBu dosyadaki iki unsur tüm tasarımı belirler. Herhangi bir ports: eşlemesi yoktur; bu nedenle Vaultwarden'a yalnızca Traefik ve onun TLS protokolü üzerinden erişilebilir. Host üzerinde port yayınlamak, kullanıcıların kasayı yanlışlıkla http üzerinden sunmasına neden olur. Ayrıca DOMAIN, tam kamuya açık HTTPS URL'si olmalıdır: bu değer ek dosyası bağlantılarına, WebAuthn 2FA'ya ve bildirim uç noktasına gömülüdür; yanlış veya http değeri, site yüklense bile bu özellikleri bozar. latest etiketi, alışılagelmiş never-latest kuralının bilinçli bir istisnasıdır — Vaultwarden, kararlı sürümlerini tek bir rolling image olarak sunar ve :testing ayrı bir pre-release kanalıdır — bu nedenle güncellemeleri bilinçli yapın ve pull yapmadan önce sürüm notlarını inceleyin.
Servisi başlatın ve logları izleyin:
docker compose up -d
docker compose logs -f vaultwardenBaşarılı bir başlatma işlemi Rocket has launched from http://0.0.0.0:80 gibi bir satırla sona erer. Sertifikanın alınması için Traefik'e birkaç saniye süre tanıyın, ardından https://vault.example.com yükleyin — geçerli bir kilit simgesiyle ve sertifika uyarısı olmadan Bitwarden web kasasına erişebilmeniz gerekir.
Step 3 — güçlü bir ADMIN_TOKEN ve $$ tuzağı
ADMIN_TOKEN, instance üzerindeki tüm kullanıcıları ve ayarları okuyabilen /admin panelini korur; bu nedenle bu token'a root şifresi gibi davranılmalıdır. İki yöntem mevcuttur.
Basit yöntem, openssl rand -base64 48 ile halihazırda oluşturduğunuz rastgele dizidir. base64 formatı asla $ içermediği için, kaçış karakteri (escaping) gerektirmeden doğrudan .env içine aktarılır.
Güvenli yöntem ise bir Argon2 PHC hash'idir; bu sayede düz metin token disk üzerinde asla saklanmaz. Aynı imaj kullanarak bir hash oluşturun:
docker run --rm -it vaultwarden/server /vaultwarden hash --preset owaspKomut iki kez girdi ister ve $argon2id$v=19$... ile başlayan bir dizgi yazdırır. Kullanıcıların bir saatini çalan tuzak şudur: Docker Compose, $ ifadesini değişken interpolasyonu olarak işler; bu nedenle hash değerini Compose dosyasına yapıştırırken her $ ifadesini $$ şeklinde çiftlemeniz gerekir. Değeri .env yerine doğrudan environment: altına yerleştirin ve tırnak içine almayın:
environment:
ADMIN_TOKEN: $$argon2id$$v=19$$m=19456,t=2,p=1$$c29tZXNhbHQ$$RdescudvJCsgt3ub+b+dWRWJTmaaJObGEğer tek $ işareti bırakılırsa, Compose The "argon2id" variable is not set uyarısı verir ve token değerini boş bırakır; bu durumda /admin geçerli şifrenizi reddeder. docker compose up -d komutunu çalıştırın ve komut satırında girdiğiniz düz metin şifreyi kendi şifre yöneticinizde saklayın.
Adım 4 — hesabınızı kaydedin, ardından erişimi kısıtlayın
SIGNUPS_ALLOWED: "true" kullanarak https://vault.example.com arayüzünü açın, Create account butonuna tıklayın ve e-posta adresiniz ile güçlü bir ana şifre kullanarak kaydınızı gerçekleştirin. Bu ana şifre asla geri getirilemez — sıfırlama seçeneği yoktur — bu nedenle şifreyi önce kalıcı bir yere kaydedin.
Şimdi erişimi kısıtlayın. Kayıt işlemlerini kapatmak için Compose dosyasını düzenleyin:
SIGNUPS_ALLOWED: "false"Değişiklikleri docker compose up -d ile tekrar uygulayın. Bu işlem ertelenebilir bir sıkılaştırma adımı değildir. Kayıtlar açık bırakılırsa, URL'yi bulan herkes —ve botlar bunu yapar— sunucunuzda bir hesap oluşturabilir. Sizin kasenizi okuyamazlar, ancak kaynak tüketirler ve özel örneğinizi açık bir servise dönüştürürler. Kayıtların açık kaldığının belirtisi: /admin sizin oluşturmadığınız hesapları listeler.
Daha sonra aile üyelerini veya ekip arkadaşlarını halka açık kayıtları tekrar açmadan eklemek için /admin içindeki Invite User butonunu kullanın; davet edilen kişinin bağlantıyı alabilmesi için bu yolun SMTP yapılandırmasına ihtiyacı vardır.
Adım 5 — /admin dizinine erişim
https://vault.example.com/admin adresine gidin ve düz metin admin token bilgisini girin (rastgele karakter dizisi veya hashlenmiş olan şifre — hash'in kendisi değil). Panel içerisinden kullanıcılar listelenebilir, ayarlar yapılandırılabilir, test e-postası gönderilebilir ve veritabanı snapshot'ı alınabilir.
Sayfa 404 Not Found hatası veriyorsa, ADMIN_TOKEN boş veya tanımlanmamış demektir; bu durum paneli tamamen devre dışı bırakır. Eğer panele hiç ihtiyaç duyulmuyorsa bu geçerli bir tercihtir. Sayfa yükleniyor ancak token reddediliyorsa, aşağıdaki hata listesindeki $$ kaçış karakteri (escaping) sorununu inceleyin. Token unutuldu mu? Kurtarma istemi bulunmamaktadır; .env dosyasını veya Compose dosyasını düzenleyerek yeni bir token belirleyin ve docker compose up -d.
Adım 6 — Bitwarden istemcilerini bağlayın
Tüm resmi istemciler kendi sunucunuza yönlendirilebilir. Bitwarden desktop, mobile veya browser istemcisini standart mağazalardan yükleyin; özel bir Vaultwarden sürümüne ihtiyacınız yoktur.
Giriş yapmadan önce, giriş ekranındaki ayarlar simgesini ( Self-hosted veya Region → Self-hosted olarak etiketlenmiştir) açın, Server URL kısmını https://vault.example.com olarak ayarlayın ve kaydedin. Ardından kayıt olduğunuz e-posta ve ana şifre ile giriş yapın; istemci hemen bağlanmalı ve kimlik bilgilerini doldurma ve kaydetme seçeneği sunmalıdır.
Eğer bir istemci This is not a recognized Bitwarden server. You may need to check with your provider or update your server. hatası veriyorsa, URL hatalıdır, http protokolü kullanılmaktadır veya sertifika güvenilir değildir; önce https://vault.example.com adresinin bir tarayıcıda sorunsuz yüklendiğini kontrol edin. Diğer cihazlardaki yavaş güncellemeler WebSocket push mekanizmasıyla ilgilidir ve aşağıda ele alınmıştır.
Step 7 — login endpoint için bir Fail2ban jail kurulumu
Vaultwarden, her başarısız giriş denemesini LOG_FILE tarafından belirlenen dosyaya kaydeder; bu durum brute-force koruması için gereklidir. Eğer Fail2ban henüz çalışmıyorsa, kurulum ve temel bilgiler Fail2ban SSH hardening kılavuzunda yer almaktadır; burada vault için bir jail eklenmektedir.
Fail2ban'ın log dosyasını okuyabilmesi için, isimlendirilmiş volume'un host üzerinde nerede bulunduğunu bulun:
docker volume inspect vaultwarden_vw-data --format '{{ .Mountpoint }}'Bu komut /var/lib/docker/volumes/vaultwarden_vw-data/_data gibi bir çıktı verecektir; log dosyası bunun içindeki vaultwarden.log yolundadır. Filtreyi oluşturun:
# /etc/fail2ban/filter.d/vaultwarden.conf
[Definition]
failregex = ^.*Username or password is incorrect\. Try again\. IP: <ADDR>\. Username:.*$
ignoreregex =Ve jail yapılandırmasını oluşturun:
# /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 = 3600sudo systemctl restart fail2ban ile yeniden yükleyin ve sudo fail2ban-client status vaultwarden ile onaylayın.
Üç Docker detayı, bu yapılandırmanın çalışıp çalışmayacağını belirler. Birincisi, eğer log dosyası her başarısız denemede IP: 127.0.0.1 veya proxy adresinizi gösteriyorsa, Vaultwarden proxy adresini yasaklayacaktır; IP_HEADER değerini proxy'nizin gerçekten gönderdiği header olarak ayarlayın (Traefik için X-Forwarded-For, yukarıdaki nginx bloğu için X-Real-IP, Cloudflare arkası için CF-Connecting-IP). İkincisi, doğru iptables chain'i proxy kullanımınıza bağlıdır: Traefik, yayınlanmış portlara sahip bir container olarak çalışıyorsa, trafik Docker'ın FORWARD yolunu izler; bu nedenle yasaklama işlemi yukarıdaki gibi DOCKER-USER üzerinde olmalıdır; ancak Step 1'deki host-nginx seçeneğini seçtiyseniz, bağlantılar host üzerindeki nginx'in INPUT chain'inde sonlanır ve DOCKER-USER yasaklaması bunları göremez; bu durumda Fail2ban'ın varsayılan INPUT chain'ini kullanması için chain = DOCKER-USER satırını silin. Üçüncüsü, port tabanlı varsayılan yerine banaction = iptables-allports kullanın; bu jail herhangi bir port tanımlamaz ve DOCKER-USER üzerindeki tüm portları kapsayan bir yasaklama, ihlalciyi makinedeki tüm yayınlanmış servislerden temiz bir şekilde engeller.
Step 8 — kasayı yedekleyin, ardından geri yükleme işlemini gerçekleştirin
vw-data birimi şifre yöneticinizdir. Bu birim db.sqlite3 (tüm girişler), attachments/ ve sends/ dizinlerini, oturumları imzalayan rsa_key.* dosyalarını ve admin panelinden gelen config.json verilerini içerir. Bu bileşenlerden herhangi birini atlayan bir yedekleme, ihtiyaç anında başarısız olur.
Vaultwarden veri yazarken db.sqlite3 dosyasını kopyalamak, yarım yazılmış ve bozuk bir dosya elde edilmesine neden olabilir; bu nedenle kısa süreli bir kesinti ile cold snapshot alın:
#!/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İşlemi her gece cron ile çalıştırın ve .tgz verilerini sunucudan dışarı kopyalayın; sadece korunan sunucuda duran bir yedekleme, gerçek bir yedekleme değildir. Verileri aktarmanın en temiz yolu, arşivi şifreleyen ve tekrarlanan snapshot'lar için deduplication yapan başka bir sunucuya veya object storage'a yapılan gece restic yedeği yöntemidir. Admin panelindeki Backup Database butonu, yalnızca SQLite dosyasının hızlı bir snapshot'ını alır ancak ekleri ve anahtarları dahil etmez.
Şimdi gerçek bir yedekleme ile sadece umut edilen bir yedekleme arasındaki farkı belirleyen işlemi gerçekleştirin: bir kez geri yükleme yapın ve çalıştığını kanıtlayın:
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/serverDizüstü bilgisayarınızdan, ssh -L 8888:127.0.0.1:8888 you@your-vps kullanarak sunucuya tunnel yapın ve http://localhost:8888 adresini açın. localhost güvenli bir bağlam olduğu için crypto.subtle erişilebilirdir ve kasa burada düz HTTP üzerinden şifresini çözer; bu, izin verilen tek yerdir. Ana şifrenizle giriş yapın ve girişlerin mevcut olduğunu doğrulayın: eğer mevcutlarsa, veritabanınız, RSA anahtarlarınız ve ana şifreniz başarıyla döngüyü tamamlamış demektir; bu durumda yeni bir VPS üzerinde sistemi dakikalar içinde yeniden kurabilirsiniz. Konteynırı Ctrl-C ile durdurun ve /tmp/vw-restore dosyasını silin.
Hata modları ve görülecek metinler
Tarayıcı konsolunda Cannot read properties of undefined (reading 'importKey'). Kasa http üzerinden yüklendiği için crypto.subtle tanımsızdır; kasaya yalnızca https:// üzerinden erişilebilir. Proxy üzerinde HTTP-to-HTTPS yönlendirmesi eklenmelidir.
İstemcide This is not a recognized Bitwarden server.... Server URL http olarak ayarlanmış, hatalı yazılmış veya sertifika güvenilir değildir; https://vault.example.com kısmının geçerli bir kilit simgesi gösterdiğini doğrulayın, ardından URL'yi istemcinin self-hosted ayarlarında tekrar girin.
/admin doğru şifreyi reddediyor. Argon2 hash değeri kaçış karakterlerini (escaping) kaybetti; her $ değeri Compose içerisinde $$ olmalıdır — veya düz metin yerine hash değerinin kendisi girilmiştir.
Yavaş cihazlar arası senkronizasyon; konsolda WebSocket connection to 'wss://vault.example.com/notifications/hub' failed görünüyor. Proxy, Upgrade/Connection başlıklarını iletmiyor; Traefik bunu otomatik olarak yapar, nginx için ise Adım 1'deki iki upgrade satırı gereklidir. Kasa çalışmaya devam eder, ancak senkronizasyon yalnızca kasa açıldığında gerçekleşir. v1.31.0 sürümünden itibaren eski 3012 portu kaldırılmıştır, bu nedenle ayrı bir WebSocket rotasına gerek yoktur.
Fail2ban engelleme raporluyor ancak saldırgan bağlanmaya devam ediyor. IP_HEADER hatalı olduğu için 127.0.0.1 engelleniyor veya engelleme yanlış iptables zincirinde yer alıyor — chain = DOCKER-USER ve banaction = iptables-allports ayarlarını yapın.
Upgrades
Yeni imajı çekin ve konteyneri yeniden oluşturun; isimlendirilmiş volume ve tüm verileriniz korunur:
docker compose pull
docker compose up -dVaultwarden sık aralıklarla yeni sürümler yayınlar. Bazı sürümler migrasyon notları içerdiğinden, yama sürümüne sabitlemek yerine projenin sürüm notlarını takip edin. Her büyük güncelleme öncesinde yeni bir yedek alın; tarball dosyasını yeni bir volume içine geri yükleyerek işlemi geri alabilirsiniz.
FAQ
Vaultwarden, Bitwarden ile aynı şey midir?
Vaultwarden resmi sunucu değil, uyumlu ve bağımsız bir sunucudur. Vaultwarden, Bitwarden sunucu API'sini Rust ile yeniden uygular. Bu sayede resmi masaüstü, mobil, tarayıcı ve CLI istemcileri, resmi yığna göre çok daha az kaynak tüketerek Vaultwarden ile çalışabilir. Kasa formatı aynıdır; bu nedenle dışa aktarma ve içe aktarma yöntemleriyle her iki yöne de geçiş yapılabilir.
HTTPS gerçekten gerekli mi, yoksa LAN üzerinde http üzerinden çalıştırılabilir mi?
localhost testi dışında HTTPS gereklidir. Bitwarden web kasası ve eklentileri, yalnızca güvenli bir bağlamda kullanılabilen tarayıcı Web Crypto API'sini kullanır. Bu nedenle düz http üzerinden bağlantı kurulduğunda istemci Cannot read properties of undefined hatası verir ve oturum açılmaz. Çalışan tek http adresi http://localhost adresidir; bu sebeple 8. Adımdaki geri yükleme testi bir SSH tüneli kullanır.
Sunucuma yabancıların kayıt olmasını nasıl engellerim?
Kendi hesabınızı oluşturduktan hemen sonra Compose dosyasında SIGNUPS_ALLOWED: "false" ayarını yapın ve docker compose up -d komutunu çalıştırın. Bundan sonra, yeni kişileri /admin içindeki Invite User butonuyla ekleyin. Davet bağlantısının iletilebilmesi için SMTP yapılandırması gereklidir. Beklenmedik hesapların oluşmadığını teyit etmek için yönetici kullanıcı listesini periyodik olarak kontrol edin.
Vaultwarden kasamı nasıl yedeklerim?
Kapsayıcıyı (container) kısa süreliğine durdurun ve tüm vw-data birimini — db.sqlite3, attachments/, sends/, config.json ve rsa_key.* dosyalarını — arşivleyin. Ardından arşivi sunucudan dışarıya, ideal olarak her gece çalışan bir cron işi ile kopyalayın. Sunucu çalışırken canlı SQLite dosyasını kopyalamak, bozuk bir anlık görüntü (snapshot) riskine yol açar; bu nedenle yedeklemeyi sistem kapalıyken yapın. En önemlisi, yedeklemeye güvenmeden önce doğruluğunu anlamak için yedeği geçici bir kapsayıcıya bir kez geri yükleyin ve oturum açın.
Şifrelerimi kendi sunucumda barındırmak gerçekten güvenli mi?
Evet, bu kılavuzun kapsadığı üç maddeyi uyguladığınızda güvenlidir: gerçek HTTPS, kapalı kayıtlar ile güçlü bir yönetici token'ı ve test edilmiş yedekler. Kasanız, ana şifreniz ile istemci tarafında şifrelenir; bu nedenle sunucu şifrelerinizi asla açık metin olarak görmez. Şifreniz olmadan çalınan bir db.sqlite3 dosyası işe yaramaz. Bunun karşılığında, yamalama ve yedekleme işlemleri sizin sorumluluğunuzdadır; bu yüzden Fail2ban ve geri yükleme prosedürü burada isteğe bağlı değildir.