SSD Nodes Learn Hosting plans →
Rehberler Matt ConnorYazan Matt Connor · Güncellendi 2026-08-27

VPS üzerinde Vaultwarden ile parola yönetimi kurulumu

Docker ve Vaultwarden kullanarak kendi parola yöneticinizi kurun. HTTPS yapılandırması, admin token kullanımı, Fail2ban ve veri yedekleme adımlarıyla güvenli kurulumu öğrenin.

Ne inşa ediyorsunuz

Tamamen size ait bir parola yöneticisi: HTTPS sonlandırması yapan bir reverse proxy arkasında, küçük bir container içinde çalışan Vaultwarden; telefonunuzda, dizüstü bilgisayarınızda ve tarayıcınızda bu sunucuya işaret eden resmi Bitwarden uygulamaları. Vaultwarden, Bitwarden sunucu API'sini Rust diliyle yeniden uygular ve bitwarden.com ile aynı protokolü kullanır. Bu sayede tüm resmi istemciler hiçbir değişiklik yapılmadan çalışır, ancak resmi çoklu container yığını yerine yaklaşık 100 MB RAM ile çalışabilir.

Kurulumun kendisi bir düzine satırlık Compose dosyasından ibarettir. Asıl önemli olan ve hata yapılması muhtemel üç nokta şunlardır: Web kasasını yüklemeden önce TLS yapılandırılmış olmalıdır, kendi hesabınızı oluşturduğunuz anda genel kayıtlar kapatılmalıdır ve veri dizini yedeklenip geri yükleme testi yapılmalıdır; çünkü bu dizin sahip olduğunuz tüm parolaları barındırır.

Prerequisites and the honest gotchas

  • A VPS with Docker Engine and the Compose plugin, on a fresh Ubuntu 24.04 KVM box with root or sudo. 512 MB of RAM is genuinely enough; 1 GB is comfortable. This is one of the lightest things you can run, it sits near the top of the shortlist of services worth self-hosting. Size the box for whatever else shares it, though: putting a self-hosted photo library like PhotoPrism or Immich on the same VPS pushes your RAM floor into the gigabytes, while Vaultwarden barely moves it. The same arithmetic applies to media front ends you bolt on later, since dressing a Jellyfin library up as a walkable 90s rental store means another always-on container plus transcoding headroom on the same budget.
  • A domain with an A record (and AAAA if you have IPv6) pointing vault.example.com at the VPS. The TLS certificate is issued for this exact name, so DNS must resolve before you start.
  • Ports 80 and 443 open to the internet, terminated by your reverse proxy, never by Vaultwarden directly. Port 80 is used only for the ACME certificate challenge and an HTTP-to-HTTPS redirect.
  • The biggest gotcha up front: the Bitwarden clients refuse to talk to a server that is not HTTPS. There is no "test it over http first", that path does not work, for a concrete reason covered next.

Neden resmi Bitwarden yığını değil de Vaultwarden

Aynı istemciler, çok daha düşük kaynak kullanımı. Resmi self-hosted Bitwarden, bir dizi container (MSSQL, Nginx, Identity, Api, Admin ve daha fazlası) 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 sadece birkaç on megabayt bellek tüketir. Tek bir kullanıcı, bir aile veya küçük bir ekip için en mantıklı seçenek budur. Bitwarden API'sini tam olarak uyguladığı için verileriniz, Vaultwarden ile bitwarden.com arasında taşınabilir durumdadır.

Vazgeçtiğiniz özellikler ise kurumsal odaklı olanların çoğudur: SCIM desteği yoktur (1.35.0 sürümüyle deneysel OpenID Connect SSO eklenmiş olsa da) ve operatör siz olduğunuz için yamalama, HTTPS ve yedekleme süreçlerinden siz sorumlusunuz. Bu rehber, bu üç görevi kapsamaktadır.

HTTPS neden isteğe bağlı değildir

Bitwarden web kasası ve tarayıcı eklentileri, şifreleme anahtarlarınızı tarayıcı içerisinde Web Crypto API (window.crypto.subtle) kullanarak türetir. Tarayıcılar, crypto.subtle özelliğini yalnızca güvenli bağlamlarda (HTTPS veya http://localhost özel durumu) kullanıma sunar. Düz http://vault.example.com üzerinden bu özellik undefined durumundadır; bu nedenle uygulama bir anahtar türettiği anda hata verir ve konsolda şu mesaj görünür:

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

Sayfa yanıt vermez veya genel bir kripto hatası gösterir; giriş yapılamaz. Masaüstü, mobil ve tarayıcı istemcileri, self-hosted URL'nize karşı kendi kontrollerini çalıştırır. http (veya ulaşılamayan) bir uç noktaya karşı şu hata ile reddederler:

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

Her ikisinin de nedeni aynıdır: geçerli bir HTTPS bağlantısının olmaması. Bu nedenle, önce TLS kurulumunu yapmalı ve kasayı, hızlı bir kontrol için bile olsa, asla http üzerinden açmamalısınız.

Adım 1, DNS ve reverse proxy (önce TLS)

Kayıtları VPS adresinize yönlendirin ve doğru IP adresine çözümlendiğini doğrulayın:

dig +short vault.example.com

Çıktıdaki satır VPS IP adresiniz olmalıdır. Eğer boşsa veya yanlışsa, DNS ayarlarını düzeltin ve TTL süresinin dolmasını bekleyin; çözümleme yapılamayan bir alan adı için sertifika oluşturma işlemi başarısız olur.

HTTPS ön ucu için bu rehber, 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 kurulum, Vaultwarden servisinin bağlanacağı harici bir Docker ağı (proxy aşağıda) ve bir ACME çözümleyici (letsencrypt) oluşturur. Manuel olarak oluşturulmuş sertifikaya sahip standart bir nginx, Vaultwarden tarafında aynı şekilde çalışır.

Traefik yerine nginx ve Certbot mu tercih ediyorsunuz? Vaultwarden'ı 127.0.0.1:8080 üzerine yerleştirin (servise ports: ["127.0.0.1:8080:80"] ekleyin ve Traefik etiketlerini kaldırın), ardından bir sertifika oluşturun ve proxy yönlendirmesini yapın. Sertifika kısmı Certbot ve nginx ile Let's Encrypt sertifikası oluşturma rehberinde ele alınmıştır. Kritik ek nokta, 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; Fail2ban'in daha sonra 127.0.0.1 yerine gerçek saldırganı görmesini sağlayan budur. Bu rehberdeki diğer tüm işlemler, ön tarafta Traefik veya nginx bulunmasından bağımsız olarak aynıdır.

Adım 2, Compose dosyası

Önce proje dizinini oluşturun. Bu kılavuz, Compose proje adını ve dolayısıyla veri birimini vaultwarden_vw-data olarak tahmin edilebilir kılan /opt/vaultwarden kullanır; aşağıdaki Fail2ban ve yedekleme adımları bu tam isme bağlıdır.

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

Bu dizinde yönetici parolası ve Compose dosyası için bir .env oluşturun.

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

Bu belirteci openssl rand -base64 48 ile oluşturun ve içine yapıştırın. (Daha güçlü bir özetlenmiş biçim bir sonraki adımda ele alınacaktır; başlangıç için uzun ve rastgele bir dizi 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: true

Bu dosya ile ilgili iki husus tüm tasarımı belirler. Herhangi bir ports: eşlemesi yoktur, bu nedenle Vaultwarden'a yalnızca Traefik ve onun TLS'i üzerinden erişilebilir; portu ana makinede yayınlamak, insanların kasayı yanlışlıkla http üzerinden sunmasına neden olur. Ayrıca DOMAIN tam genel HTTPS URL'si olmalıdır: bu değer ek bağlantılarına, WebAuthn 2FA'ya ve bildirim uç noktasına işlenir; bu nedenle yanlış veya http bir değer, site yüklense bile bu işlevleri bozar. latest etiketi, genellikle uygulanan asla-latest kuralının bilinçli bir istisnasıdır; Vaultwarden kararlı sürümlerini tek bir rolling imaj olarak sunar, :testing ise ayrı bir ön sürüm kanalıdır, bu nedenle güncellemeleri bilinçli yapın ve çekmeden önce sürüm notlarına göz atın. Ancak bu istisna sınırlıdır: uzun ömürlü container'ların çoğu, aynı VPS üzerinde kendi kendine barındırılan her zaman açık bir aracı yeniden başlatmalar ve güncellemeler arasında tahmin edilebilir kılan belirli bir etikete sabitlenmelidir.

Servisi ayağa kaldırın ve günlük kayıtlarını izleyin:

docker compose up -d
docker compose logs -f vaultwarden

Doğru bir başlatma işlemi Rocket has launched from http://0.0.0.0:80 gibi bir satırla biter. Traefik'in sertifikayı alması için birkaç saniye bekleyin, ardından https://vault.example.com adresini yükleyin; geçerli bir kilit simgesiyle ve sertifika uyarısı olmadan Bitwarden web kasasını görmelisiniz.

Adım 3, güçlü bir ADMIN_TOKEN ve $$ tuzağı

ADMIN_TOKEN, örneğinizdeki her kullanıcıyı ve ayarı okuyabilen panel olan /admin'i korur, bu nedenle ona bir root parolası gibi davranın. İki biçim çalışır.

Basit biçim, openssl rand -base64 48 ile zaten oluşturduğunuz rastgele dizidir. base64 hiçbir zaman $ içermediğinden, herhangi bir kaçış karakterine gerek kalmadan doğrudan .env içine yerleştirilir.

Güçlendirilmiş biçim bir Argon2 PHC özetidir (hash), bu sayede düz metin halindeki token hiçbir zaman diskte saklanmaz. Aynı imajı kullanarak bir tane oluşturun:

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

İki kez parola ister ve $argon2id$v=19$... ile başlayan bir dizi yazdırır. İşte insanların bir saatini kaybettiren tuzak: Docker Compose, $ işaretini değişken yerleştirme olarak değerlendirir, bu nedenle özeti Compose dosyasına yapıştırırken her $ işaretini $$ olacak şekilde ikiye katlamanız gerekir. Bunu .env üzerinden değil, 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+dWRWJTmaaJObG

Eğer tek $ işaretlerini bırakırsanız, Compose The "argon2id" variable is not set uyarısını verir ve token'ı boş bırakır, ardından /admin doğru parolanızı reddeder. docker compose up -d komutunu çalıştırın ve komut isteminde yazdığınız düz metni kendi parola yöneticinizde saklayın.

Adım 4, hesabınızı kaydedin ve kapıyı kilitleyin

SIGNUPS_ALLOWED: "true" ile https://vault.example.com dosyasını açın, Create account seçeneğine tıklayın ve e-posta adresiniz ile güçlü bir ana parola kullanarak kaydınızı oluşturun. Bu ana parola kurtarılamaz; parola sıfırlama özelliği yoktur, bu nedenle parolayı öncelikle kalıcı bir yerde saklayın.

Şimdi kapıyı kilitleyin. Kayıtları kapatmak için Compose dosyasını düzenleyin:

      SIGNUPS_ALLOWED: "false"

docker compose up -d ile yapılandırmayı yeniden uygulayın. Bu, ertelenebilecek bir güvenlik önlemi değildir. Kayıtlar açık bırakılırsa, URL'nizi bulan herkes (botlar dahil) sunucunuzda hesap oluşturabilir. Sizin kasanızı okuyamazlar ancak kaynaklarınızı tüketerek özel örneğinizi herkese açık bir servise dönüştürürler. Kayıtları açık bıraktığınızın göstergesi şudur: /admin, sizin oluşturmadığınız hesapları listeler.

Daha sonra aile üyelerini veya ekip arkadaşlarınızı, genel kayıtları yeniden açmadan eklemek için /admin içindeki Invite User butonunu kullanın; bu yolun çalışması için SMTP yapılandırması gereklidir, böylece davet edilen kişi bağlantısını alabilir.

Adım 5, /admin dizinine erişim

https://vault.example.com/admin adresine gidin ve düz metin halindeki admin token değerini (hash halini değil, rastgele oluşturulan dizgiyi veya belirlediğiniz parolayı) girin. Bu panel üzerinden kullanıcıları listeleyebilir, ayarları yapılandırabilir, test e-postası gönderebilir ve veritabanı yedeği alabilirsiniz.

Sayfa 404 Not Found hatası döndürüyorsa, ADMIN_TOKEN değişkeni boş veya ayarlanmamış demektir; bu durum paneli tamamen devre dışı bırakır ve panele ihtiyaç duymadığınız durumlarda geçerli bir tercihtir. Sayfa yükleniyor ancak token değerini reddediyorsa, aşağıdaki hata listesinde yer alan $$ karakter kaçırma sorununu inceleyin. Token değerini unuttuysanız, bir kurtarma istemi bulunmamaktadır; .env dosyasını veya Compose dosyasını düzenleyerek yeni bir değer atayın ve docker compose up -d işlemini gerçekleştirin.

Adım 6, Bitwarden istemcilerini bağlayın

Tüm resmi istemciler self-hosted bir sunucuya yönlendirilebilir; bu nedenle Bitwarden masaüstü, mobil veya tarayıcı istemcisini standart mağazalardan yükleyin. Özel bir Vaultwarden sürümüne ihtiyacınız yoktur.

Giriş yapmadan önce giriş ekranındaki ayarlar çarkını açın (Self-hosted veya Region → Self-hosted olarak etiketlenmiştir), Server URL kısmını https://vault.example.com olarak ayarlayın ve kaydedin. Ardından kaydettiğiniz e-posta ve ana parolanızla giriş yapın; istemci hemen bağlanmalı ve kimlik bilgilerini doldurup kaydetmeyi teklif etmelidir.

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 kullanıyordur veya sertifika güvenilir değildir. Öncelikle https://vault.example.com adresinin bir tarayıcıda sorunsuz yüklendiğini tekrar kontrol edin. Diğer cihazlardaki yavaş güncellemeler WebSocket push ile ilgilidir ve aşağıda ele alınmıştır.

Adım 7, giriş uç noktası için bir Fail2ban jail yapılandırması

Vaultwarden, her başarısız giriş denemesini LOG_FILE ile belirlenen dosyaya kaydeder; bu, brute-force saldırılarına karşı koruma sağlamak için gereken tam veridir. Eğer Fail2ban halihazırda çalışmıyorsa, kurulum ve temel bilgiler Fail2ban SSH sıkılaştırma kılavuzu içerisinde mevcuttur; burada vault için bir jail ekliyoruz.

Öncelikle Fail2ban'in log dosyasını okuyabilmesi için adlandırılmış birimin (named volume) ana makinede nerede bulunduğunu bulun:

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

Bu komut /var/lib/docker/volumes/vaultwarden_vw-data/_data benzeri bir çıktı verir; log dosyası bunun içinde vaultwarden.log konumundadı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   = 3600

sudo systemctl restart fail2ban ile yeniden yükleyin ve sudo fail2ban-client status vaultwarden ile doğrulayın.

Üç Docker detayı, bu yapılandırmanın koruma sağlayıp sağlamayacağını belirler. Birincisi, log dosyası her başarısız denemede IP: 127.0.0.1 veya proxy adresinizi gösteriyorsa, Vaultwarden proxy'yi banlıyor demektir; IP_HEADER değerini proxy'nizin gerçekten gönderdiği başlığa göre ayarlayın (Traefik için X-Forwarded-For, yukarıdaki nginx bloğu için X-Real-IP, Cloudflare arkasındaysanız CF-Connecting-IP). İkincisi, doğru iptables zinciri proxy'nize bağlıdır: Traefik yayınlanan portlarla bir container olarak çalışıyorsa, trafik Docker'ın FORWARD yolundan geçer, bu nedenle ban yukarıdaki gibi DOCKER-USER içinde olmalıdır; ancak Adım 1'deki host-nginx seçeneğini tercih ettiyseniz, bağlantılar ana makinenin INPUT zincirindeki nginx üzerinde sonlanır ve DOCKER-USER banı bunları asla görmez; bu durumda chain = DOCKER-USER satırını silin, böylece Fail2ban varsayılan INPUT zincirini kullanır. Üçüncüsü, port tabanlı varsayılan yerine banaction = iptables-allports kullanın; bu jail herhangi bir port tanımlamaz ve DOCKER-USER içindeki tüm portları kapsayan bir ban, saldırganı sunucudaki tüm yayınlanan servislerden temiz bir şekilde engeller.

Adım 8, kasayı yedekleyin ve ardından geri yükleme işlemini gerçekleştirin

vw-data birimi, parola yöneticinizin ta kendisidir. Bu birim db.sqlite3 (tüm girdiler), attachments/ ve sends/ dizinlerini, oturumları imzalayan rsa_key.* dosyalarını ve yönetici panelinden gelen config.json verilerini barındırır. Bunlardan herhangi birini içermeyen bir yedekleme, ihtiyaç duyduğunuz anda başarısız olur.

Vaultwarden yazma işlemi yaparken db.sqlite3 dosyasını kopyalamak, yarım kalmış veya bozuk bir dosya oluşturmanıza neden olabilir. Bu nedenle soğuk bir snapshot alın; kesinti süresi sadece birkaç saniyedir:

#!/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

Bu işlemi cron ile her gece çalıştırın ve .tgz dosyasını sunucunun dışına kopyalayın. Yalnızca koruduğunuz sunucuda tutulan bir yedekleme, gerçek bir yedekleme değildir. Bunu aktarmanın temiz yolu başka bir sunucuya veya nesne depolama alanına her gece restic yedeklemesi yapmaktır. Bu yöntem, arşivi şifreler ve yinelenen snapshot'ları sizin için tekilleştirir. Yönetici panelindeki Backup Database butonu, yalnızca SQLite dosyasının hızlı bir snapshot'ını almak için kullanışlıdır ancak ekleri ve anahtarları içermez.

Şimdi, gerçek bir yedekleme ile umut edilen bir yedekleme arasındaki farkı belirleyen o ritüeli uygulayın: yedeklemeyi bir kez geri yükleyin 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/server

Dizüstü bilgisayarınızdan ssh -L 8888:127.0.0.1:8888 you@your-vps ile sunucuya tünel açın ve http://localhost:8888 adresini açın. localhost güvenli bir bağlam olduğu için crypto.subtle kullanılabilir durumdadır ve kasa burada, izin verilen tek yer olan düz http üzerinden şifresi çözülmüş şekilde görüntülenir. Ana parolanızla giriş yapın ve girdilerinizin orada olduğunu doğrulayın: eğer girdileriniz görünüyorsa veritabanınız, RSA anahtarlarınız ve ana parolanız sorunsuz çalışıyor demektir; böylece yeni bir VPS üzerinde dakikalar içinde sistemi yeniden kurabilirsiniz. Ctrl-C ile container'ı durdurun ve /tmp/vw-restore dosyasını silin. İnternete asla açık olmaması gereken diğer tüm yönetici arayüzleri için bu tünel yöntemini kullanmaya devam edin; 5173 numaralı porttaki self-hosted open-kritt güvenlik tarayıcısına da bu şekilde erişebilirsiniz.

Hata modları ve karşılaşacağınız dizgeler

Tarayıcı konsolunda Cannot read properties of undefined (reading 'importKey'). Kasa http üzerinden yüklendi, bu nedenle crypto.subtle tanımsız; buraya yalnızca https:// üzerinden erişin ve proxy üzerinde HTTP'den HTTPS'e yönlendirmeyi ekleyin.

İstemcide This is not a recognized Bitwarden server.... Server URL http, hatalı yazılmış veya sertifika güvenilir değil; https://vault.example.com üzerinde geçerli bir kilit simgesi göründüğünü doğrulayın, ardından istemcinin self-hosted ayarlarında URL'yi tekrar girin.

/admin doğru parolayı reddediyor. Argon2 hash'i kaçış karakterlerini kaybetti, Compose dosyasındaki her $ ifadesi $$ şeklinde olmalıdır veya temsil ettiği düz metin yerine hash'in kendisini girdiniz.

Cihazlar arası yavaş eşitleme; 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 yapar, nginx ise 1. Adımdaki iki upgrade satırına ihtiyaç duyar. Kasa çalışmaya devam eder, yalnızca açılışta eşitleme yapar. v1.31.0 sürümünden itibaren eski özel 3012 numaralı port kaldırılmıştır, bu nedenle ayrı bir WebSocket rotasına gerek yoktur.

Fail2ban bir yasaklama bildiriyor ancak saldırgan bağlanmaya devam ediyor. IP_HEADER yanlış olduğu için 127.0.0.1 adresini yasaklıyor veya yasaklama yanlış iptables zincirinde duruyor; chain = DOCKER-USER ve banaction = iptables-allports ayarlarını yapılandırın.

Yükseltmeler

Yeni imajı çekin ve yeniden oluşturun; adlandırılmış birim (named volume) ve tüm verileriniz kalıcıdır:

docker compose pull
docker compose up -d

Vaultwarden sık sık yeni sürümler yayınlar. Bazı sürümler geçiş notları içerdiğinden, belirli bir yama sürümüne sabitlenmek yerine projenin sürüm notlarını takip edin. Herhangi bir büyük sürüm yükseltmesinden önce güncel bir yedek alın; tarball dosyasını yeni bir birime geri yükleyerek eski sürüme dönebilirsiniz.

FAQ

Vaultwarden ile Bitwarden aynı şey mi?

Hayır, Vaultwarden resmi sunucu değil, onunla uyumlu bağımsız bir sunucudur. Vaultwarden, Bitwarden sunucu API'sini Rust diliyle yeniden uygular; bu sayede resmi masaüstü, mobil, tarayıcı ve CLI istemcileri, resmi yığının tükettiği kaynakların çok daha azıyla çalışabilir. Kasa formatı aynıdır, bu nedenle dışa ve içe aktarma yaparak her iki yönde de geçiş yapabilirsiniz.

Gerçekten HTTPS'e ihtiyacım var mı, yoksa yerel ağımda http üzerinden çalıştırabilir miyim?

localhost testi dışında her durum için HTTPS gereklidir. Bitwarden web kasası ve eklentileri, yalnızca güvenli bağlamlarda kullanılabilen tarayıcı Web Crypto API'sini kullanır; bu nedenle düz http üzerinden istemci Cannot read properties of undefined hatası verir ve giriş yapamaz. Çalışan tek http adresi http://localhost adresidir, 8. Adım'daki geri yükleme testinin bir SSH tüneli kullanmasının nedeni budur.

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, SMTP yapılandırması gerektiren ve davet bağlantısı gönderen /admin içindeki Invite User butonu ile ekleyin. Beklenmedik hesapların oluşmadığından emin olmak için yönetici kullanıcı listesini düzenli olarak kontrol edin.

Vaultwarden kasamı nasıl yedeklerim?

Konteyneri 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 kopyalayın; bunu tercihen gece çalışan bir cron göreviyle yapın. Sunucu çalışırken canlı SQLite dosyasını kopyalamak bozuk bir anlık görüntü alma riski taşır, bu yüzden yedekleme işlemini sunucu kapalıyken gerçekleştirin. En önemlisi, yedeği geçici bir konteynere geri yükleyip giriş yaparak test edin; böylece ona güvenmeden önce yedeğin sağlam olduğundan emin olursunuz.

Parolalarımı kendi sunucumda barındırmak gerçekten güvenli mi?

Evet, bu kılavuzda ele alınan üç şeyi yaptığınızda güvenlidir: gerçek HTTPS, kapatılmış kayıtlar ile güçlü bir yönetici token'ı ve test edilmiş yedekler. Kasanız ana parolanızla istemci tarafında şifrelenir, bu nedenle sunucu bile parolalarınızı açık metin olarak görmez; çalınan bir db.sqlite3 dosyası ana parola olmadan işe yaramaz. Bunun karşılığında yama yönetimi ve yedekleme sorumluluğu size geçer; Fail2ban ve geri yükleme ritüelinin burada isteğe bağlı olmamasının nedeni budur. Bunlar yerli yerine oturduğunda, kendi sunucunuzda barındırdığınız bir kasanın saldırıya uğrayabileceği noktalar üzerine daha yakından bir bakış faydalı bir sonraki adımdır; çünkü girdilerin kendisi istemcide şifrelendiğinden, savunulması gereken tek şey yönetici token'ı ve yedekleme arşividir.