SSD Nodes Learn
تعلیمی Matt Connorتحریر: Matt Connor · اپ ڈیٹ شدہ 2026-07-25

VPS پر Vaultwarden: اپنے پاس ورڈز خود ہوسٹ کریں

Docker اور Vaultwarden سے Bitwarden کے مطابق پاس ورڈ مینیجر VPS پر سیٹ اپ کریں۔ HTTPS، admin token، Fail2ban اور ٹیسٹ شدہ بیک اپ شامل ہیں۔ تقریباً 100 MB RAM میں چلتا ہے۔

آپ کیا بنا رہے ہیں

ایک پاس ورڈ مینیجر جس پر آپ کی مکمل ملکیت ہے: Vaultwarden ایک چھوٹے کنٹینر میں چل رہا ہے جو کسی ریورس پراکسی کے پیچھے ہے جو HTTPS کو ختم کرتا ہے، اور آپ کے فون، لیپ ٹاپ اور براؤزر میں سرکاری Bitwarden ایپس اس کی طرف اشارہ کر رہی ہیں۔ Vaultwarden، Rust میں Bitwarden سرور API کو دوبارہ نافذ کرتا ہے اور bitwarden.com جیسا ہی پروٹوکول بولتا ہے۔ لہٰذا ہر سرکاری کلائنٹ بغیر کسی تبدیلی کے اس کے ساتھ کام کرتا ہے — لیکن یہ کثیر کنٹینر والے سرکاری اسٹیک کے برعکس، تقریباً 100 MB RAM میں فٹ بیٹھتا ہے۔

تنصیب بذاتِ خود Compose کے درجن بھر سطور پر مشتمل ہے۔ تین چیزیں جو واقعی اہم ہیں — اور جو ٹوٹ سکتی ہیں — یہ ہیں: آپ کے ویب والٹ کو لوڈ کرنے سے پہلے TLS موجود ہونا چاہیے، عوامی سائن اپ اسی لمحے بند ہو جانے چاہئیں جب آپ کا اپنا اکاؤنٹ بن جائے، اور ڈیٹا والیوم کا بیک اپ لیا جائے اور اسے ٹیسٹ ری اسٹور کیا جائے، کیونکہ وہ واحد ڈائریکٹری آپ کے تمام پاس ورڈز پر مشتمل ہے۔

ضروریات اور اہم نکات

  • ایک VPS جس پر Docker Engine اور Compose plugin موجود ہو، ایک بالکل نئے Ubuntu 24.04 KVM ماحین پر، جس میں root یا sudo دستیاب ہو۔ 512 MB RAM بھی کافی ہے؛ 1 GB آرام دہ ہے۔ یہ آپ کے چلانے کے قابل سب سے ہلکے سافٹ ویئر میں سے ایک ہے — یہ خود ہوسٹ کرنے کے قابل سروسز کی مختصر فہرست کے بالکل اوپر موجود ہے۔
  • ایک ڈومین جس کا A ریکارڈ (اور اگر آپ کے پاس IPv6 ہو تو AAAA) vault.example.com کو VPS کی طرف اشارہ کر رہا ہو۔ TLS سرٹیفکیٹ اسی نام کے لیے جاری کیا جاتا ہے، اس لیے شروع کرنے سے پہلے DNS ریزولو ہونا چاہیے۔
  • پورٹ 80 اور 443 انٹرنیٹ پر کھلے ہوں، جنہیں آپ کا ریورس پراکسی ٹرمینٹ کرے — کبھی بھی براہ راست Vaultwarden نہیں۔ پورٹ 80 صرف ACME سرٹیفکیٹ چیلنج اور HTTP سے HTTPS تک ریڈائریکٹ کے لیے استعمال ہوتا ہے۔
  • شروع میں سب سے بڑا مسئلہ یہ ہے: Bitwarden کلائنٹس ایسے سرور سے بات کرنے سے انکار کر دیتے ہیں جو HTTPS نہ ہو۔ "اسے پہلے http پر آزمائیں" جیسی کوئی چیز نہیں ہے — یہ راستہ کام نہیں کرتا، جس کی ایک ٹھوس وجہ اگلے حصے میں بیان کی گئی ہے۔

Vaultwarden کیوں، سرکاری Bitwarden اسٹیک نہیں

وہی کلائنٹس، وزن کا ایک چھوٹا سا حصہ۔ سرکاری self-hosted Bitwarden متعدد containers کے bundle کے طور پر آتا ہے (MSSQL, Nginx, Identity, Api, Admin اور مزید) اور اسے تقریباً 2 GB RAM درکار ہوتی ہے۔ Vaultwarden ایک واحد binary ہے جو ہر چیز کو بطور ڈیفالٹ SQLite database میں محفوظ کرتا ہے اور کچھ دسیوں میگا بائٹس پر idle رہتا ہے۔ ایک شخص، ایک خاندان یا ایک چھوٹی ٹیم کے لیے یہ واضح انتخاب ہے، اور چونکہ یہ Bitwarden API کی وفاداری سے پیروی کرتا ہے، اس لیے آپ کا ڈیٹا اس اور bitwarden.com کے درمیان portable رہتا ہے۔

جس چیز سے آپ محروم ہوتے ہیں وہ زیادہ تر enterprise سطح ہے: کوئی SCIM provisioning نہیں (اگرچہ experimental OpenID Connect SSO ورژن 1.35.0 میں آ گیا ہے)، اور آپ خود operator ہیں، لہذا patching، HTTPS اور backups آپ کی ذمہ داری ہیں۔ یہ رہنمائی ان تینوں ذمہ داریوں کے لیے ہے۔

HTTPS کیوں اختیاری نہیں ہے

Bitwarden ویب والٹ اور براؤزر ایکسٹینشنز آپ کے خفیہ کلیدوں کو Web Crypto API (window.crypto.subtle) کے ذریعے براؤزر میں تیار کرتی ہیں۔ براؤزرز crypto.subtle کو صرف ایک محفوظ سیاق و سباق میں فراہم کرتے ہیں — HTTPS، یا http://localhost کی خاص صورت۔ سادہ http://vault.example.com پر یہ undefined ہوتا ہے، اس لیے جیسے ہی ایپ کلید تیار کرتی ہے، وہ ایرر پھینکتی ہے، اور کنسول میں یہ نظر آتا ہے:

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

صفحہ جم جاتا ہے یا ایک عمومی crypto ایرر دکھاتا ہے، اور کچھ لاگ ان نہیں ہوتا۔ ڈیسک ٹاپ، موبائل اور براؤزر کلائنٹس خود میزبانی والے URL کی اپنی جانچ کرتے ہیں، اور ایک http (یا ناقابل رسائی) اینڈ پوائنٹ کے خلاف وہ انکار کرتے ہیں:

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

دونوں کی وجہ ایک ہی ہے: درست HTTPS موجود نہیں ہے۔ اس لیے ہم پہلے TLS قائم کرتے ہیں اور والٹ کو http پر کبھی نہیں کھولتے، ایک جھلک کے لیے بھی نہیں۔

مرحلہ 1 — DNS اور ریورس پراکسی (پہلے TLS)

ریکارڈ کو اپنے VPS کی طرف اشارہ کریں اور تصدیق کریں کہ وہ صحیح پتے پر حل ہوتا ہے:

dig +short vault.example.com

اس کا جو لائن پرنٹ کرے گی وہ آپ کا VPS IP ہونا چاہیے۔ اگر وہ خالی یا غلط ہے، تو DNS درست کریں اور TTL ختم ہونے کا انتظار کریں — ایسے نام پر سرٹیفکیٹ جاری نہیں ہوتا جو حل نہ ہو۔

HTTPS فرنٹ اینڈ کے لیے اس گائیڈ میں Traefik استعمال ہوتا ہے، جو Let's Encrypt سرٹیفکیٹس خودکار طریقے سے جاری اور تجدید کرتا ہے اور سیدھا Compose میں شامل ہو جاتا ہے۔ اگر آپ پہلے سے اسے نہیں چلا رہے، تو پہلے Traefik ریورس پراکسی اور خودکار TLS سیٹ اپ پر عمل کریں؛ یہ ایک external Docker network (نیچے proxy) اور ایک ACME resolver (letsencrypt) بناتا ہے جس سے Vaultwarden سروس منسلک ہوتی ہے۔ دستی جاری کردہ سرٹیفکیٹ کے ساتھ عام nginx بھی Vaultwarden کی طرف سے بالکل ایسے ہی کام کرتا ہے۔

Traefik کے بجائے nginx اور Certbot کو ترجیح دیں؟ Vaultwarden کو 127.0.0.1:8080 پر رکھیں (سروس میں ports: ["127.0.0.1:8080:80"] شامل کریں اور Traefik لیبلز ہٹا دیں)، پھر ایک سرٹیفکیٹ جاری کریں اور اس کی طرف پراکسی کریں۔ سرٹیفکیٹ والا حصہ Certbot اور nginx کے ساتھ Let's Encrypt سرٹیفکیٹس جاری کرنا میں بیان ہوا ہے۔ ایک اہم اضافی چیز نوٹیفکیشنز راستے پر WebSocket اپ گریڈ ہے:

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 لائن کو نوٹ کریں — یہی Fail2ban کو بعد میں 127.0.0.1 کے بجائے اصل حملہ آور کو دیکھنے کی سہولت دیتی ہے۔ اس گائیڈ کا باقی سب کچھ یکساں ہے، چاہے آگے Traefik ہو یا nginx۔

مرحلہ 2 — Compose فائل

سب سے پہلے پروجیکٹ ڈائریکٹری بنائیں۔ یہ رہنما /opt/vaultwarden استعمال کرتا ہے، جس سے Compose پروجیکٹ کا نام — اور اسی طرح ڈیٹا والیوم، vaultwarden_vw-data — متوقع ہوتا ہے۔ نیچے Fail2ban اور بیک اپ کے مراحل اسی عین نام پر منحصر ہیں۔

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

اسی ڈائریکٹری میں ایڈمن خفیہ کلید اور Compose فائل کے لیے .env بنائیں۔

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

وہ ٹوکن openssl rand -base64 48 سے بنائیں اور اسے اندر پیسٹ کریں۔ (ایک مضبوط ہیش شدہ فارم اگلے حصے میں بیان کیا گیا ہے۔ شروعات کے لیے ایک طویل بے ترتیب اسٹرنگ کافی ہے۔)

# 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

اس فائل کی دو باتیں پوری ڈیزائن کی بنیاد ہیں۔ اس میں کوئی ports: میپنگ نہیں ہے، اس لیے Vaultwarden صرف Traefik اور اس کے TLS کے ذریعے ہی قابل رسائی ہے۔ اس کے پورٹ کو ہوسٹ پر شائع کرنا وہ طریقہ ہے جس سے لوگ غلطی سے والٹ کو http پر چلاتے ہیں۔ اور DOMAIN مکمل عوامی HTTPS URL ہونا چاہیے۔ یہ اٹیچمنٹ لنکس، WebAuthn 2FA اور اطلاعات کے اینڈ پوائنٹ میں شامل ہوتا ہے، اس لیے غلط یا http ویلیو ان کو توڑ دیتی ہے حتیٰ کہ جب سائٹ لوڈ بھی ہو رہی ہو۔ latest ٹیگ عام کبھی نہیں-latest اصول کی ایک دانستہ استثنا ہے — Vaultwarden اپنے مستحکم ریلیزز ایک واحد رولنگ امیج کے طور پر جاری کرتا ہے، جس میں :testing الگ پری ریلیز چینل ہے — اس لیے دانستہ طور پر اپڈیٹ کریں اور پل کرنے سے پہلے ریلیز نوٹس دیکھ لیں۔

اسے اٹھائیں اور لاگ دیکھیں:

docker compose up -d
docker compose logs -f vaultwarden

ایک درست آغاز Rocket has launched from http://0.0.0.0:80 جیسی ایک لائن پر ختم ہوتا ہے۔ سرٹیفکیٹ لانے کے لیے Traefik کو چند سیکنڈ دیں، پھر https://vault.example.com لوڈ کریں — آپ کو Bitwarden ویب والٹ ایک درست پیڈ لاک کے ساتھ ملنا چاہیے اور کوئی سرٹیفکیٹ وارننگ نہیں ہونی چاہیے۔

مرحلہ 3 — ایک مضبوط ADMIN_TOKEN، اور $$ کا دھوکا

ADMIN_TOKEN، /admin کو محفوظ رکھتا ہے، جو وہ پینل ہے جو آپ کے انسٹنس پر ہر صارف اور ترتیب کو پڑھ سکتا ہے۔ اسے root پاس ورڈ کی طرح سمجھیں۔ دو صورتیں کام کرتی ہیں۔

سادہ صورت وہ بے ترتیب اسٹرنگ ہے جو آپ نے پہلے ہی openssl rand -base64 48 کے ساتھ تیار کی ہے۔ چونکہ base64 میں کبھی $ نہیں ہوتا، اس لیے یہ بغیر کسی escaping کے سیدھا .env میں چلا جاتا ہے۔

مضبوط صورت ایک Argon2 PHC ہیش ہے۔ اس طرح plaintext ٹوکن ڈسک پر کبھی محفوظ نہیں ہوتا۔ اسی image کے خلاف ایک تیار کریں:

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

یہ دو بار اشارہ کرتا ہے اور $argon2id$v=19$... سے شروع ہونے والی اسٹرنگ پرنٹ کرتا ہے۔ یہ وہ دھوکا ہے جو لوگوں کا ایک گھنٹہ ضائع کرتا ہے: Docker Compose $ کو variable interpolation سمجھتا ہے۔ اس لیے جب آپ ہیش کو Compose فائل میں پیسٹ کریں تو آپ کو ہر $ کو دگنا کر کے $$ کرنا چاہیے۔ اسے سیدھا environment: کے تحت رکھیں، .env کے ذریعے نہیں، اور اسے کوٹس میں نہ رکھیں:

    environment:
      ADMIN_TOKEN: $$argon2id$$v=19$$m=19456,t=2,p=1$$c29tZXNhbHQ$$RdescudvJCsgt3ub+b+dWRWJTmaaJObG

اگر آپ واحد $ نشانات چھوڑ دیں تو Compose The "argon2id" variable is not set کی وارننگ دیتا ہے اور ٹوکن کو خالی کر دیتا ہے۔ پھر /admin آپ کا درست پاس ورڈ مسترد کر دیتا ہے۔ docker compose up -d چلائیں، اور اشارے پر ٹائپ کیے گئے plaintext کو اپنے ذاتی پاس ورڈ اسٹور میں رکھیں۔

مرحلہ 4 — اپنا اکاؤنٹ رجسٹر کریں، پھر دروازہ بند کر دیں

SIGNUPS_ALLOWED: "true" کے ساتھ، https://vault.example.com کھولیں، Create account پر کلک کریں، اور اپنے ای میل اور ایک مضبوط ماسٹر پاس ورڈ کے ساتھ رجسٹر کریں۔ یہ ماسٹر پاس ورڈ کبھی بازیافت نہیں ہو سکتا — کوئی ری سیٹ نہیں ہے — اس لیے پہلے اسے کسی پائیدار جگہ محفوظ کریں۔

اب دروازہ بند کریں۔ Compose فائل میں ترمیم کریں تاکہ سائن اپ بند ہو جائیں:

      SIGNUPS_ALLOWED: "false"

docker compose up -d کے ساتھ دوبارہ اطلاق کریں۔ یہ وہ سخت بندی نہیں ہے جسے آپ ملتوی کر سکتے ہیں۔ کھلا چھوڑا گیا تو کوئی بھی شخص جو URL تلاش کر لے — اور کرالرز ایسا کرتے ہیں — آپ کے سرور پر اکاؤنٹ بنا سکتا ہے۔ وہ آپ کے والٹ کو نہیں پڑھ سکتے، لیکن وہ وسائل استعمال کرتے ہیں اور آپ کی نجی انسٹنس کو ایک کھلی سروس میں تبدیل کر دیتے ہیں۔ اس کا ثبوت کہ آپ نے اسے کھلا چھوڑا: /admin ایسے اکاؤنٹس درج کرتا ہے جو آپ نے کبھی نہیں بنائے۔

عوامی سائن اپ کو دوبارہ کھلے بغیر بعد میں خاندان یا ساتھیوں کو شامل کرنے کے لیے، /admin میں Invite User بٹن استعمال کریں؛ اس راستے کے لیے SMTP کنفیگرڈ ہونا ضروری ہے تاکہ مدعو شخص اپنا لنک وصول کر سکے۔

مرحلہ 5 — /admin تک رسائی

https://vault.example.com/admin پر جائیں اور plain text admin token درج کریں (یعنی بے ترتیب string، یا وہ password جسے آپ نے hash کیا تھا — خود hash نہیں)۔ اندر آپ users کی فہرست دیکھ سکتے ہیں، settings کو ترتیب دے سکتے ہیں، ایک test email بھیج سکتے ہیں اور database snapshot لے سکتے ہیں۔

اگر صفحہ 404 Not Found واپس کرتا ہے، تو اس کی وجہ یہ ہے کہ ADMIN_TOKEN خالی ہے یا set نہیں کیا گیا، جو پورے پینل کو غیر فعال کر دیتا ہے — یہ خود ایک درست انتخاب ہے اگر آپ کو اس کی ضرورت نہ ہو۔ اگر صفحہ load تو ہو جائے مگر آپ کا token مسترد کر دے، تو نیچے دی گئی ناکامیوں کی فہرست میں $$ escaping کے مسئلے کو دیکھیں۔ token بھول گئے ہیں؟ کوئی recovery prompt موجود نہیں ہے؛ .env یا Compose file میں ترمیم کریں، ایک نیا token set کریں، اور docker compose up -d۔

مرحلہ 6 — Bitwarden کلائنٹس کو منسلک کریں

ہر سرکاری کلائنٹ کو ایک self-hosted سرور کی طرف اشارہ کیا جا سکتا ہے، اس لیے Bitwarden ڈیسک ٹاپ، موبائل یا براؤزر کلائنٹ کو عام اسٹورز سے انسٹال کریں — آپ کو کوئی خاص Vaultwarden بلڈ کی ضرورت نہیں ہے۔

لاگ ان کرنے سے پہلے، لاگ ان اسکرین پر سیٹنگز گیئر کھولیں (جس پر Self-hosted یا Region → Self-hosted لکھا ہے)، Server URL کو https://vault.example.com پر سیٹ کریں، اور محفوظ کریں۔ پھر اپنے رجسٹر کیے ہوئے ای میل اور ماسٹر پاس ورڈ سے لاگ ان کریں؛ کلائنٹ فوراً منسلک ہو جائے گا اور اسناد کو بھرنے اور محفوظ کرنے کی پیشکش کرے گا۔

اگر کوئی کلائنٹ This is not a recognized Bitwarden server. You may need to check with your provider or update your server. دکھاتا ہے، تو URL غلط ہے، http استعمال کر رہا ہے، یا سرٹیفکیٹ غیر قابلِ اعتماد ہے — پہلے یہ دوبارہ چیک کریں کہ https://vault.example.com ایک براؤزر میں بغیر کسی مسئلے کے لوڈ ہوتا ہے۔ دیگر آلات پر اپڈیٹس کا سست ہونا WebSocket پش کی وجہ سے ہے، جس کا ذکر نیچے کیا گیا ہے۔

مرحلہ 7 — لاگ اِن اینڈ پوائنٹ کے لیے Fail2ban جیل

Vaultwarden ہر ناکام لاگ اِن کو LOG_FILE سے طے شدہ فائل میں درج کرتا ہے — بالکل وہی چیز جو کسی brute-force محافظ کو درکار ہے۔ اگر آپ پہلے سے Fail2ban نہیں چلا رہے ہیں، تو اس کی تنصیب اور بنیادی باتیں Fail2ban SSH سخت بندی گائیڈ میں موجود ہیں؛ یہاں ہم والٹ کے لیے ایک جیل شامل کرتے ہیں۔

سب سے پہلے معلوم کریں کہ نامزد والیوم ہوسٹ پر کہاں موجود ہے، تاکہ Fail2ban لاگ پڑھ سکے:

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

یہ کچھ اس طرح /var/lib/docker/volumes/vaultwarden_vw-data/_data پرنٹ کرتا ہے؛ اس کے اندر لاگ vaultwarden.log ہے۔ فلٹر بنائیں:

# /etc/fail2ban/filter.d/vaultwarden.conf
[Definition]
failregex = ^.*Username or password is incorrect\. Try again\. IP: <ADDR>\. Username:.*$
ignoreregex =

اور جیل بنائیں:

# /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 کے ساتھ ری لوڈ کریں اور sudo fail2ban-client status vaultwarden کے ساتھ تصدیق کریں۔

تین Docker تفصیلات طے کرتی ہیں کہ یہ کچھ محفوظ کرتا ہے یا نہیں۔ پہلا، اگر لاگ ہر ناکام کوشش پر IP: 127.0.0.1 یا آپ کے پراکسی کا پتہ دکھاتا ہے، تو Vaultwarden پراکسی کو بان کر رہا ہے — IP_HEADER کو اس ہیڈر پر سیٹ کریں جو آپ کا پراکسی واقعی بھیجتا ہے (Traefik کے لیے X-Forwarded-For، اوپر والے nginx بلاک کے لیے X-Real-IP، Cloudflare کے پیچھے CF-Connecting-IP)۔ دوسرا، درست iptables چین آپ کے پراکسی پر منحصر ہے: Traefik کے ساتھ بطور کنٹینر شائع شدہ پورٹس پر چلتے ہوئے، ٹریفک Docker کے FORWARD راستے سے گزرتا ہے، لہٰذا بان اوپر کی طرح DOCKER-USER میں ہونا چاہیے؛ لیکن اگر آپ نے مرحلہ 1 سے host-nginx آپشن منتخب کیا، تو کنکشن ہوسٹ کے INPUT چین پر nginx پر ختم ہوتے ہیں اور DOCKER-USER بان انہیں کبھی نہیں دیکھتا — اس صورت میں chain = DOCKER-USER لائن حذف کریں تاکہ Fail2ban ڈیفالٹ INPUT چین استعمال کرے۔ تیسرا، پورٹ پر مبنی ڈیفالٹ کے بجائے banaction = iptables-allports استعمال کریں — یہ جیل کوئی پورٹ واضح نہیں کرتی، اور DOCKER-USER میں آل پورٹس بان مجرم کو باکس پر ہر شائع شدہ سروس تک پہنچنے سے صاف طور پر روک دیتا ہے۔

مرحلہ 8 — والٹ کا بیک اپ لیں، پھر اسے واقعی بحال کریں

vw-data والیوم دراصل آپ کا پاس ورڈ مینیجر ہے۔ اس میں db.sqlite3 (ہر اندراج)، attachments/ اور sends/ ڈائریکٹریز، rsa_key.* فائلیں جو لاگ ان سیشنز پر دستخط کرتی ہیں، اور ایڈمن پینل سے config.json شامل ہیں۔ ان میں سے کوئی بھی چھوڑ دینے والا بیک اپ اس وقت ناکام ہو جاتا ہے جب آپ کو اس کی ضرورت ہو۔

Vaultwarden کے لکھنے کے دوران db.sqlite3 کاپ کرنںے سے ایک نصف لکھی ہوئی خراب فائل مل سکتی ہے، اس لیے ایک کولڈ اسنیپ شاٹ لیں — ڈاؤن ٹائم چند سیکنڈ کا ہوتا ہے:

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

اسے راتوں رات cron سے چلائیں اور .tgz کو باکس سے باہر کاپی کریں — صرف اس سرور پر رہنے والا بیک اپ جس کی آپ حفاظت کر رہے ہیں، وہ بیک اپ نہیں ہے۔ اسے بھیجنے کا صاف طریقہ کسی دوسرے سرور یا آبجیکٹ اسٹوریج پر راتوں رات restic بیک اپ ہے، جو آرکائیو کو خفیہ کرتا ہے اور دہرائے گئے اسنیپ شاٹس کو آپ کے لیے ڈی ڈوپلیکیٹ کرتا ہے۔ ایڈمن پینل کا Backup Database بٹن صرف SQLite فائل کا ایک آسان ہاٹ اسنیپ شاٹ ہے، لیکن یہ منسلکات اور کلیدوں کو چھوڑ دیتا ہے۔

اب وہ طریقہ جو ایک حقیقی بیک اپ کو صرف امید پر مبنی بیک اپ سے الگ کرتا ہے — اسے ایک بار بحال کریں اور ثابت کریں کہ یہ کام کرتا ہے:

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

اپنے لیپ ٹاپ سے، ssh -L 8888:127.0.0.1:8888 you@your-vps کے ساتھ اس تک ٹنل بنائیں اور http://localhost:8888 کھولیں۔ چونکہ localhost ایک محفوظ سیاق و سباق ہے، crypto.subtle دستیاب ہے اور والٹ یہاں سادہ http پر ڈکرپٹ ہوتا ہے — یہ واحد جگہ ہے جہاں اس کی اجازت ہے۔ اپنے ماسٹر پاس ورڈ سے لاگ ان کریں اور تصدیق کریں کہ آپ کے اندراجات موجود ہیں: اگر وہ موجود ہیں، تو آپ کی ڈیٹا بیس، RSA کلیدیں اور ماسٹر پاس ورڈ سب گول ٹرپ کرتے ہیں، اور آپ چند منٹوں میں ایک نئے VPS پر دوبارہ تعمیر کر سکتے ہیں۔ Ctrl-C کے ساتھ کنٹینر کو روکیں اور /tmp/vw-restore کو حذف کریں۔

ناکامی کے طریقے، جن اسٹرنگز کے ساتھ آپ سامنا کریں گے

براؤزر کنسول میں Cannot read properties of undefined (reading 'importKey')۔ والٹ http پر لوڈ ہوا تھا، اس لیے crypto.subtle undefined ہے؛ اسے صرف https:// کے ذریعے تک کریں اور پراکسی پر HTTP-to-HTTPS ریڈائریکٹ شامل کریں۔

کلائنٹ میں This is not a recognized Bitwarden server...۔ Server URL ہے http، غلط ٹائپ ہوا، یا سرٹیفکیٹ غیر قابل اعتماد ہے؛ تصدیق کریں کہ https://vault.example.com درست پیڈلاک دکھاتا ہے، پھر اسے کلائنٹ کی self-hosted ترتیبات میں دوبارہ درج کریں۔

/admin درست پاس ورڈ مسترد کرتا ہے۔ Argon2 ہیش سے اسکیپنگ ضائع ہو گئی — Compose میں ہر $ کو $$ ہونا چاہیے — یا آپ نے ہیش درج کیا بجائے اس کے plaintext کے جو وہ نمائندگی کرتا ہے۔

آہستہ کراس ڈیوائس سنک؛ کنسول میں WebSocket connection to 'wss://vault.example.com/notifications/hub' failed نظر آتا ہے۔ پراکسی Upgrade/Connection ہیڈرز فارورڈ نہیں کر رہا؛ Traefik یہ خود بخود کرتا ہے، nginx کو Step 1 سے دو اپ گریڈ لائنوں کی ضرورت ہے۔ والٹ اب بھی کام کرتا ہے، بس اوپن ہونے پر سنک ہوگا۔ پرانا مخصوص پورٹ 3012 v1.31.0 کے بعد ختم ہو گیا ہے، اس لیے کوئی الگ WebSocket روٹ ضروری نہیں۔

Fail2ban پابندی کی اطلاع دیتا ہے لیکن حملہ آور کنکٹ برقرار رکھتا ہے۔ یہ 127.0.0.1 کو پابندی لگا رہا ہے کیونکہ IP_HEADER غلط ہے، یا پابندی غلط iptables چین میں ہے — chain = DOCKER-USER اور banaction = iptables-allports سیٹ کریں۔

اپ گریڈز

نیا امیج پل کریں اور دوبارہ بنائیں؛ نامزد والیوم اور آپ کا تمام ڈیٹا محفوظ رہتا ہے:

docker compose pull
docker compose up -d

Vaultwarden اکثر ریلیز جاری کرتا ہے۔ کسی پیچ ورژن کو مقفل کرنے کے بجائے پروجیکٹ کے ریلیز نوٹس دیکھیں، کیونکہ بعض ریلیز میں مائیگریشن نوٹس ہوتے ہیں۔ کسی بڑی اپ گریڈ سے پہلے نیا بیک اپ لیں؛ آپ نئے والیوم میں tarball بحال کر کے واپس جا سکتے ہیں۔

FAQ

کیا Vaultwarden اور Bitwarden ایک ہی چیز ہیں؟

یہ ایک ہم مطابق، آزاد سرور ہے، سرکاری سرور نہیں۔ Vaultwarden Bitwarden سرور API کو Rust میں دوبارہ نافذ کرتا ہے۔ اس لیے سرکاری ڈیسک ٹاپ، موبائل، براؤزر اور CLI کلائنٹس سب اس پر کام کرتے ہیں، اور وہ بھی سروری اسٹیک کے وسائل کے ایک چھوٹے حصے پر۔ والٹ فارمیٹ ایک جیسی ہے۔ اس لیے آپ ایکسپورٹ اور امپورٹ کے ذریعے کسی بھی طرف منتقل ہو سکتے ہیں۔

کیا مجھے واقعی HTTPS کی ضرورت ہے، یا میں اسے اپنے LAN پر http پر چلا سکتا ہوں؟

localhost ٹیسٹ کے علاوہ ہر چیز کے لیے HTTPS درکار ہے۔ Bitwarden ویب والٹ اور ایکسٹینشنز براؤزر کے Web Crypto API استعمال کرتی ہیں، جو کہ صرف محفوظ سیاق و سباق میں دستیاب ہوتا ہے۔ اس لیے سادہ http پر کلائنٹ Cannot read properties of undefined پھینک دیتا ہے اور کبھی لاگ ان نہیں ہوتا۔ واحد http پتہ جو کام کرتا ہے وہ http://localhost ہے، اسی لیے Step 8 میں ریسٹور ٹیسٹ ایک SSH ٹنل استعمال کرتا ہے۔

میں اجنبیوں کو اپنے سرور پر رجسٹر ہونے سے کیسے روکوں؟

اپنا اکاؤنٹ بنانے کے فوراً بعد Compose فائل میں SIGNUPS_ALLOWED: "false" سیٹ کریں اور docker compose up -d چلائیں۔ اس کے بعد سے، نئے افراد کو /admin میں Invite User بٹن کے ذریعے شامل کریں۔ اس کے لیے SMTP کنفیگرڈ ہونا ضروری ہے تاکہ انہیں دعوت کا لنک موصل ہو۔ کبھی کبھار ایڈمن یوزر لسٹ چیک کریں تاکہ یقین ہو جائے کہ کوئی غیر متوقع اکاؤنٹ نہیں بن گیا۔

میں اپنا Vaultwarden والٹ کیسے بیک اپ کروں؟

کنٹینر کو مختصراً روکیں اور پورے vw-data والیوم کو آرکائیو کریں — db.sqlite3، attachments/، sends/، config.json اور rsa_key.* فائلیں — پھر آرکائیو کو سرور سے باہر کاپی کریں، بہتر ہے کہ راتانہ cron پر۔ سرور چلتے ہوئے لائیو SQLite فائل کاپی کرنے سے خراب اسنیپ شاٹ کا خطرہ ہوتا ہے، اس لیے اسے بند حالت میں لیں۔ سب سے اہم بات، اسے ایک بار ایک ضائع ہو جانے والے کنٹینر پر ریسٹور کریں اور لاگ ان ہوں، تاکہ آپ کو معلوم ہو کہ بیک اپ حقیقی ہے، اس پر انحصار کرنے سے پہلے۔

کیا اپنے پاس ورڈز کو سیلف ہوسٹ کرنا واقعی محفوظ ہے؟

ہاں، جب آپ وہ تین چیزیں کریں جو اس گائیڈ میں بیان کی گئی ہیں: حقیقی HTTPS، بند سائن اپس کے ساتھ مضبوط ایڈمن ٹوکن، اور ٹیسٹ شدہ بیک اپس۔ آپ کا والٹ کلائنٹ سائڈ پر آپ کے ماسٹر پاس ورڈ سے انکرپٹ ہوتا ہے۔ اس لیے سرور بھی آپ کے پاس ورڈز کو صاف شکل میں کبھی نہیں دیکھتا — چوری شدہ db.sqlite3 اس کے بغیر بے کار ہے۔ سودا یہ ہے کہ پیچنگ اور بیک اپز اب آپ کی ذمہ داری ہیں، اسی لیے یہاں Fail2ban اور ریسٹور رسم اختیاری نہیں ہیں۔

#vaultwarden#passwords#security#docker#self-hosting