Parolalarınızı bir bulut parola yöneticisinde tutmak yerine kendi sunucunuzda saklamak istiyorsanız Vaultwarden en çok tercih edilen seçeneklerden biridir. Vaultwarden, Bitwarden istemcileriyle (tarayıcı eklentisi, masaüstü ve mobil uygulamalar, web kasası) uyumlu çalışan, Rust ile yazılmış, gayriresmî bir sunucu uygulamasıdır. Kasanız sizin VPS'inizde durur; yedeği, erişimi ve güncellemesi de sizin sorumluluğunuzdadır.
Bu rehberde Vaultwarden'ı resmî wiki'de anlatılan şekilde Docker Compose ile kuracak, yalnızca yerel adrese bağlayıp Nginx ve Let's Encrypt arkasına alacak, ilk hesabı açtıktan sonra yeni kayıtları kapatacak, admin panelini Argon2 ile hash'lenmiş bir token ile koruyacak, güncelleme ve yedekleme düzenini kuracağız. Parola kasası gibi hassas bir serviste her adımı atlamadan uygulamanızı öneririz.
Vaultwarden nedir, Bitwarden ile ilişkisi ne?

Projenin GitHub sayfası Vaultwarden'ı "Rust ile yazılmış, gayriresmî, Bitwarden uyumlu sunucu" olarak tanımlar; projenin eski adı bitwarden_rs idi. Lisansı AGPL-3.0'dır. Sayfada açıkça şu not yer alır: proje Bitwarden veya Bitwarden, Inc. ile ilişkili değildir. Bu nedenle Vaultwarden ile ilgili bir sorunu Bitwarden'ın resmî destek kanallarına taşımamalısınız; proje kendi GitHub sayfası ve wiki'si üzerinden yürür.
Kimler için uygun? Kendi kasasını kendisi barındırmak isteyen bireyler, aileler ve küçük ekipler için. Buna karşılık sunucu bakımını, güncellemeleri ve yedekleri düzenli yapamayacaksanız, kendi barındırdığınız bir parola kasası tek arıza noktası haline gelebilir. Wiki belirli bir CPU veya RAM alt sınırı vermez.
| Özellik | Değer |
|---|---|
| Tür | Bitwarden istemcileriyle uyumlu, gayriresmî sunucu |
| Lisans | AGPL-3.0 |
| Docker imajı | vaultwarden/server (docker.io, ghcr.io ve quay.io'da yayınlanır) |
| Konteyner içi port | 80 |
| Veri dizini | /data (konteyner içinde) |
| Bitwarden, Inc. ile ilişkisi | Yok |
Neden HTTPS zorunlu?
README'ye göre web kasası, Web Crypto API için HTTPS ve güvenli bir bağlam (secure context) gerektirir. Wiki'nin HTTPS sayfası da tarayıcıların bu API'leri çoğunlukla yalnızca HTTPS bağlamında sunduğunu ve HTTPS'in pratikte zorunlu olduğunu belirtir. Önerilen yöntem, Vaultwarden'ı HTTPS'i üstlenen bir ters proxy arkasına almak ve sertifikayı Let's Encrypt ile almaktır. Vaultwarden'ın kendi içindeki (Rocket) TLS desteği wiki'de önerilmez.
Hazırlık
- Ubuntu 24.04 çalışan bir VPS ve sudo yetkili bir kullanıcı.
- Docker Engine ve Compose eklentisi (resmî apt deposundan): Docker Compose başlangıç rehberi.
- Vaultwarden için bir alt alan adı, örneğin
vault.alanadiniz.com, ve sunucu IP'nize işaret eden A kaydı. - Nginx ve Certbot: Let's Encrypt SSL kurulumu.
- UFW'de yalnızca 22, 80 ve 443 portlarının açık olması: UFW rehberi.
Adım 1: Admin token'ı hash'leyin
Admin paneli (/admin) ADMIN_TOKEN ile açılır ve bu değer panelin parolası gibidir. Wiki, yapılandırma çoğu zaman düz metin saklandığı için token'ın Argon2id ile hash'lenmesini önerir. Önce uzun, rastgele bir parola üretin, sonra Vaultwarden'ın yerleşik hash komutuyla PHC biçiminde bir hash oluşturun:
openssl rand -base64 32
sudo docker run --rm -it vaultwarden/server /vaultwarden hashKomut parolayı iki kez sorar ve $argon2id$v=19$... ile başlayan bir metin üretir. Varsayılan olarak Bitwarden ayarlarını (m=64 MiB, t=3, p=4) kullanır; --preset owasp ile OWASP alt sınırları seçilebilir. Panele girerken hash'i değil, ilk ürettiğiniz parolayı yazacaksınız; bu parolayı parola yöneticinizde saklayın.
Adım 2: Docker Compose ile kurulum
sudo mkdir -p /opt/vaultwarden
cd /opt/vaultwarden
sudo nano .envWiki'ye göre hash'i compose dosyasının environment bölümüne doğrudan yazarsanız içindeki beş $ karakterini $$ olarak kaçırmanız gerekir. .env dosyasında ise kaçırma gerekmez; değeri tek tırnak içine yazmanız yeterlidir:
ADMIN_TOKEN='BURAYA_vaultwarden_hash_CIKTISINI_YAPISTIRIN'sudo chmod 600 .env
sudo nano compose.yamlservices:
vaultwarden:
image: vaultwarden/server:latest
container_name: vaultwarden
restart: unless-stopped
environment:
DOMAIN: "https://vault.alanadiniz.com"
SIGNUPS_ALLOWED: "true"
ADMIN_TOKEN: ${ADMIN_TOKEN}
volumes:
- ./vw-data/:/data/
ports:
- 127.0.0.1:8000:80DOMAIN, wiki'ye göre ters proxy kullanırken gereklidir; Vaultwarden'ın ekler gibi özelliklerin doğru çalışması için HTTPS adresini bilmesi gerekir. SIGNUPS_ALLOWED şimdilik true; ilk hesabınızı açınca kapatacağız. latest etiketi belgelerdeki etikettir; isterseniz belirli bir sürüm etiketine sabitleyin. Çıktıyı kontrol edip başlatın:
sudo docker compose config | grep ADMIN_TOKEN
sudo docker compose up -d
sudo docker compose logs -fAdım 3: Nginx ters proxy ve Let's Encrypt
Aşağıdaki yapılandırma, wiki'deki Nginx örneğinden (BlackDex) uyarlanmıştır. 1.29.0 sürümünden beri WebSocket bildirimleri ana HTTP portunda çalışır; ters proxy'nin Upgrade ve Connection başlıklarını iletmesi gerekir. Önce 80 portu için bloğu yazıyoruz; SSL kısmını Certbot ekleyecek:
sudo nano /etc/nginx/sites-available/vaultwardenupstream vaultwarden-default {
zone vaultwarden-default 64k;
server 127.0.0.1:8000;
keepalive 2;
}
map $http_upgrade $connection_upgrade {
default upgrade;
'' "";
}
server {
listen 80;
listen [::]:80;
server_name vault.alanadiniz.com;
client_max_body_size 525M;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
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 / {
proxy_pass http://vaultwarden-default;
}
}sudo ln -s /etc/nginx/sites-available/vaultwarden /etc/nginx/sites-enabled/
sudo nginx -t && sudo systemctl reload nginx
sudo certbot --nginx -d vault.alanadiniz.comCertbot 443 bloğunu ve HTTPS yönlendirmesini ekler. Wiki örneği http2 on; satırını da içerir; bu yönerge Nginx 1.25.1 ile geldiği için nginx -v ile sürümünüze bakın, daha eski bir sürümde bu satırı eklemeyin. Sunucuda başka bir sitede $connection_upgrade değişkeni zaten tanımlıysa map bloğunu ikinci kez eklemeyin. Wiki ayrıca, Cloudflare proxy kullanıyorsanız $remote_addr yerine gerçek ziyaretçi IP başlığını kullanmayı önerir; ayrıntı için Cloudflare gerçek ziyaretçi IP rehberi.
WebSocket'in çalıştığını wiki'deki gibi test edebilirsiniz: tarayıcının geliştirici araçlarında Ağ sekmesini WS ile filtreleyin, web kasasına yeniden giriş yapın ve /notifications/hub isteği için 101 yanıtı görün. Mobil uygulamalar WebSocket değil, kendi push bildirim altyapısını kullanır.
Adım 4: İlk hesap ve kayıtları kapatma

https://vault.alanadiniz.com adresinden hesabınızı oluşturun ve güçlü bir ana parola seçin. Ana parolanızı unutursanız kasanızı açmanın yolu yoktur; bunu bir kenara güvenli şekilde not etmeyi düşünün. Güçlü parola seçimi için güçlü şifre ve entropi rehberine bakabilirsiniz.
Wiki'ye göre varsayılan olarak örneğinize erişebilen herkes hesap açabilir. Hesabınızı açtıktan hemen sonra compose dosyasında SIGNUPS_ALLOWED: "false" yapın ve konteyneri yeniden oluşturun. Ortam değişkenleri konteynere bağlı olduğu için basit bir restart yetmez:
cd /opt/vaultwarden
sudo nano compose.yaml # SIGNUPS_ALLOWED: "false"
sudo docker compose up -d| Değişken | Ne yapar |
|---|---|
| SIGNUPS_ALLOWED | false olduğunda yeni kayıtları kapatır |
| SIGNUPS_DOMAINS_WHITELIST | Kaydı belirli e-posta alan adlarıyla sınırlar; ayarlanırsa SIGNUPS_ALLOWED yok sayılır |
| SIGNUPS_VERIFY | true olduğunda yeni kullanıcıların giriş için e-postasını doğrulamasını ister |
| DOMAIN | Örneğin herkese açık HTTPS adresi |
| ADMIN_TOKEN | Admin panelinin hash'lenmiş parolası |
Adım 5: Admin panelini güvenli kullanma

Admin paneli https://vault.alanadiniz.com/admin adresindedir. Wiki'nin uyarıları şunlardır:
- Paneli kullanmadan önce HTTPS'i etkinleştirin; aksi halde ortadaki adam saldırısına açık kalırsınız.
- Panelde ilk kez Save dediğinizde veri dizininde
config.jsonoluşur ve buradaki değerler ortam değişkenlerini geçersiz kılar. Wiki, yapılandırma için ortam değişkenlerini önerir; config.json yolunu bilinçli seçmediyseniz panelde ayar kaydetmekten kaçının. - "You are using a plain text ADMIN_TOKEN which is insecure" uyarısı görürseniz token düz metin, biçimi bozuk ya da config.json içindeki bir değer ortam değişkenini eziyor olabilir.
sudo docker exec vaultwarden printenv ADMIN_TOKENile kontrol edin. - Admin oturumları varsayılan olarak 20 dakika sürer (
ADMIN_SESSION_LIFETIME). - Paneli tamamen kapatmak için
ADMIN_TOKENdeğişkenini ve config.json içindekiadmin_tokenanahtarını kaldırıp konteyneri yeniden oluşturun.
Güncelleme
Wiki'deki Compose güncelleme komutları:
cd /opt/vaultwarden
sudo docker compose pull
sudo docker compose up -d
sudo docker compose logs -fGüncellemeden önce aşağıdaki yöntemle bir yedek alın ve sürüm notlarını GitHub'daki Releases sayfasından okuyun. Watchtower gibi otomatik güncelleme araçları wiki'de anılır; ancak parola kasasında değişiklikleri görmeden güncellemek yerine elle ve yedekli güncelleme daha kontrollüdür.
Yedekleme
Varsayılan SQLite kurulumunda tüm veriler vw-data klasöründedir. Wiki'nin yedekleme sayfasına göre:
| Dosya / klasör | Wiki'deki durumu |
|---|---|
| db.sqlite3 | Yedek gerekli |
| attachments | Yedek gerekli |
| config.json | Yedek önerilir |
| rsa_key* | Yedek önerilir |
| sends | İsteğe bağlı |
| icon_cache | İsteğe bağlı |
Çalışan bir SQLite veritabanını doğrudan kopyalamak yerine sqlite3 aracının .backup komutunu kullanın. Docker imajında sqlite3 ve cron bulunmadığı için bu işi ana makinede yaparsınız. Cron içinde % karakteri özel anlam taşıdığından komutları bir betiğe koymak en temiz yoldur:
sudo apt install sqlite3
sudo mkdir -p /root/vw-yedek
sudo nano /usr/local/bin/vw-yedek.sh#!/bin/bash
set -e
T=$(date '+%Y%m%d-%H%M')
cd /opt/vaultwarden
sqlite3 vw-data/db.sqlite3 ".backup '/root/vw-yedek/db-$T.sqlite3'"
tar czf /root/vw-yedek/dosyalar-$T.tar.gz -C vw-data attachments sends config.json rsa_key.pem 2>/dev/null || true
find /root/vw-yedek -type f -mtime +14 -deletesudo chmod 700 /usr/local/bin/vw-yedek.sh
sudo crontab -e
# Her gece 03:15
15 3 * * * /usr/local/bin/vw-yedek.shKurulumunuzda sends veya config.json henüz yoksa tar komutu uyarı verebilir; betikteki || true bu yüzden var, yine de arşivin içeriğini ilk çalıştırmadan sonra kontrol edin. Vaultwarden 1.32.1 ve sonrasında yerleşik bir /vaultwarden backup komutu da bulunur; ayrıntısı wiki'dedir.
Sık görülen sorunlar
| Belirti | Olası neden | Çözüm |
|---|---|---|
| Web kasası açılmıyor veya kripto hatası veriyor | Site HTTPS olmadan açılıyor | Certbot ile sertifika alın, HTTP'den HTTPS'e yönlendirin |
| Ekler yüklenmiyor veya bağlantıları bozuk | DOMAIN eksik ya da yanlış | DOMAIN değerini tam HTTPS adresi yapıp konteyneri yeniden oluşturun |
| Değişiklikler diğer tarayıcıda anında görünmüyor | WebSocket başlıkları iletilmiyor | Upgrade/Connection başlıklarını ekleyin, /notifications/hub için 101 yanıtını kontrol edin |
| Admin panelinde düz metin token uyarısı | Hash bozuk, tırnak veya $$ hatası, config.json ezmesi | printenv ile değeri ve grep admin_token vw-data/config.json ile dosyayı kontrol edin |
| SIGNUPS_ALLOWED değişti ama kayıt hâlâ açık | Konteyner yeniden oluşturulmadı veya config.json değeri geçerli | docker compose up -d ile yeniden oluşturun, admin panelindeki değeri kontrol edin |
| Büyük dosya yüklemede 413 | Nginx gövde sınırı | client_max_body_size değerini kontrol edin |
| 504 Gateway Timeout | Nginx bekleme süresi kısa | Wiki'de önerilen proxy_*_timeout değerlerini ekleyin; ayrıca 502/504 rehberi |
Sık Sorulan Sorular
Vaultwarden resmî Bitwarden sunucusu mu?
Hayır. Vaultwarden, Bitwarden istemcileriyle uyumlu, gayriresmî ve bağımsız bir projedir; GitHub sayfasına göre Bitwarden veya Bitwarden, Inc. ile ilişkili değildir.
Resmî Bitwarden uygulamalarıyla kullanabilir miyim?
Evet, proje Bitwarden istemcileriyle uyumlu olacak şekilde geliştirilir. Uygulamaların giriş ekranında kendi barındırdığınız sunucu seçeneğini seçip https://vault.alanadiniz.com adresini girersiniz. Geçerli bir HTTPS sertifikası olmadan bağlantı kurmayı denemeyin.
SQLite yeterli mi, MySQL veya PostgreSQL gerekir mi?
Varsayılan kurulum SQLite kullanır ve bu rehber de onu temel alır. Wiki, MySQL veya PostgreSQL kullanan kurulumlarda veri klasörüne ek olarak ayrı bir veritabanı dökümü alınması gerektiğini belirtir.
Sunucum çökerse parolalarıma erişebilir miyim?
Bitwarden istemcileri kasanın bir kopyasını cihazda tutabilir; ancak bu bir yedek stratejisi değildir. Sunucu dışı, şifrelenmiş ve geri yüklemesi denenmiş yedekleriniz olmalı. Ayrıca sunucunuzun çalışıp çalışmadığını ayrı bir makineden izlemek için Uptime Kuma rehberine göz atabilirsiniz.
Yazılım ve hizmet adları sahiplerine aittir. Bu yazı bağımsız bir teknik rehberdir; adı geçen projeler veya şirketlerle ortaklık ilişkisi bulunduğu anlamına gelmez.
İlgili içerikler: Portainer kurulumu · Uptime Kuma kurulumu · Nextcloud kurulumu · Gitea kurulumu · VPS güvenlik sertleştirme · Fail2ban ile SSH koruması · Reverse proxy nedir?