لماذا الانتقال إلى Vaultwarden باستضافة ذاتية
رفعت Bitwarden أسعارها بنحو 98% مطلع عام 2026 على الخطط الفردية والعائلية. جعل هذا الارتفاع تساؤل التكلفة ملموساً لأداة كانت مقبولة حتى وقت قريب. لكن التكلفة ليست السبب الوحيد للانتقال.
Vaultwarden هو إعادة كتابة بلغة Rust لخادم Bitwarden. يكشف الواجهة البرمجية ذاتها للخدمة الرسمية، مما يعني أن جميع عملاء Bitwarden — إضافة المتصفح، تطبيق الجوال، CLI — تعمل دون أي تعديل، بمجرد توجيهها نحو نطاقك الخاص. الخزائن الجماعية والمؤسسات والمجموعات وTOTP والمصادقة الثنائية متاحة على النسخة المستضافة ذاتياً، بينما تستلزم خططاً مدفوعة على الخدمة السحابية الرسمية.
تحقق من ذلك على github.com/dani-garcia/vaultwarden: يمتلك المشروع أكثر من 40,000 نجمة ومجتمعاً نشطاً مع مناقشات هجرة منتظمة.
ما يوفره Vaultwarden مقارنةً بـ Bitwarden السحابي
- تكلفة شهرية ثابتة: سعر VPS فحسب، لا اشتراك لكل مستخدم أو ميزة.
- خزائن المؤسسات والمجموعات بلا تكلفة إضافية: متاحة من لحظة التثبيت.
- TOTP مدمج: رموز المصادقة الثنائية مخزنة في Vaultwarden دون الحاجة لخطة Bitwarden Premium.
- البيانات على بنيتك التحتية: لا يمكن لأي طرف ثالث الوصول إلى خزانتك المشفرة أو سجلات الاتصال.
- توافق تام مع عملاء Bitwarden الرسميين: لا تغيير في العادات لمستخدميك.
- استهلاك منخفض جداً: أقل من 50 ميغابايت من RAM في وضع الراحة.
المتطلبات الأساسية قبل البدء
Vaultwarden مثبَّت مسبقاً. يغطي هذا الدليل ترحيل البيانات فقط. إذا لم يكن نظامك جاهزاً، ابدأ بـ نشر Vaultwarden على VPS.
Bitwarden CLI مثبَّت بإصدار حديث. يُنصح بالإصدار 2024.x أو أحدث. تحقق بـ bw --version.
SMTP مهيأ على Vaultwarden. دعوات المؤسسة تستلزم خادم SMTP يعمل. المتغيرات البيئية التي يجب التحقق منها:
SMTP_HOST=smtp.example.com
[email protected]
SMTP_PORT=587
SMTP_SECURITY=starttls
[email protected]
SMTP_PASSWORD=yourpasswordحساب مسؤول نشط على Vaultwarden. ستحتاجه لإنشاء المؤسسات يدوياً بعد الاستيراد.
تقدير الوقت. خصص 30 إلى 60 دقيقة حسب حجم البيانات وعدد المؤسسات.
الانتقال من Bitwarden السحابي إلى Vaultwarden: الإجراء الكامل
المصادقة على Bitwarden السحابي بالـ CLI
افتح طرفية وسجّل الدخول إلى حسابك السحابي في Bitwarden. الـ CLI يتصل بالخادم الرسمي افتراضياً — لا تغيّر هدف
serverبعد، يجب أن يستهدف هذا الأمر Bitwarden السحابي:bw loginأدخل بريدك الإلكتروني وكلمة المرور الرئيسية. بعد المصادقة، افتح الخزانة وصدِّر مفتاح الجلسة:
export BW_SESSION=$(bw unlock --raw)الخيار
--rawضروري: بدونه يعرضbw unlockرسالة متعددة الأسطر بدلاً من المفتاح الخام، وستفشل الأوامر التالية.تحقق من صلاحية الجلسة:
bw statusيجب أن تُظهر الاستجابة
"status": "unlocked".تصدير خزانتك الشخصية بصيغة Bitwarden JSON
التصدير بصيغة JSON الأصلية لـ Bitwarden (
bitwardenjson) يحتفظ بجميع البيانات الوصفية: أنواع الإدخالات، الحقول المخصصة، URIs، الملاحظات، TOTP. لا تستخدم صيغة CSV التي تفقد هذه المعلومات.bw export --format bitwardenjson --output ./bitwarden-personal.jsonAttention : هذا الملف لا يتضمن مرفقاتك. الفجوة الأكبر في التصدير القياسي. يجب تنزيل المرفقات بشكل منفصل (الخطوة 4).
ملف JSON مشفر من طرف العميل — يحتوي بياناتك في نص واضح. خزّنه في مجلد خاص واحذفه بعد الاستيراد.
تصدير كل مؤسسة بشكل منفصل
بيانات المؤسسة غير مدرجة في تصدير الخزانة الشخصية. يجب تصدير كل مؤسسة بمعرِّفها الخاص.
اعرض قائمة مؤسساتك أولاً:
bw list organizationsلكل مؤسسة معروضة، دوّن
idوصدِّرها:bw export --organizationid <id-المؤسسة> --format bitwardenjson --output ./bitwarden-org-<اسم>.jsonكرّر هذا الأمر لكل مؤسسة. في حال ظهور خطأ صلاحيات، تحقق من أنك مالك أو مسؤول المؤسسة.
تنزيل المرفقات
هذه الخطوة التي تتجاهلها معظم الأدلة. يسرد تصدير JSON الإدخالات لكن لا يتضمن الملفات المرفقة.
لكل إدخال يمتلك مرفقاً، استخدم الأمر
bw get attachment:bw list items | jq '.[] | select(.attachments != null) | {id, name, attachments}'لتنزيل كل مرفق:
bw get attachment <اسم-الملف> --itemid <id-الإدخال> --output ./attachments/إذا كانت لديك مرفقات كثيرة، يمكن لهذا السكريبت أتمتة التنزيل:
mkdir -p ./attachments bw list items | jq -c '.[] | select(.attachments != null)' | while read item; do ITEM_ID=$(echo $item | jq -r '.id') ITEM_NAME=$(echo $item | jq -r '.name') echo $item | jq -c '.attachments[]' | while read att; do ATT_ID=$(echo $att | jq -r '.id') ATT_NAME=$(echo $att | jq -r '.fileName') bw get attachment "$ATT_NAME" --itemid "$ITEM_ID" --output "./attachments/${ITEM_ID}_${ATT_NAME}" done doneالاستيراد إلى Vaultwarden
أولاً، وجِّه الـ CLI نحو نسخة Vaultwarden الخاصة بك:
bw config server https://vault.yourdomain.comسجّل الدخول إلى Vaultwarden:
bw logout bw login export BW_SESSION=$(bw unlock --raw)استورد الخزانة الشخصية:
bw import bitwardenjson ./bitwarden-personal.jsonللمؤسسات، يجب أولاً إنشاء المؤسسة في واجهة Vaultwarden الويب، ثم استرجاع معرفها:
bw list organizationsثم استورد كل ملف مؤسسة بالمعرف الجديد:
bw import bitwardenjson ./bitwarden-org-<اسم>.json --organizationid <معرف-جديد>أعِد إرفاق المرفقات يدوياً عبر واجهة Vaultwarden الويب.
التحقق من الاستيراد وتحديث العملاء
قبل اعتبار الانتقال مكتملاً، نفِّذ هذه الفحوصات:
في واجهة Vaultwarden الويب:
- عدد الإدخالات يطابق ما كان على Bitwarden السحابي;
- الحقول المخصصة موجودة على إدخالات مرجعية;
- رموز TOTP تعمل;
- المؤسسات ومجموعاتها مرئية.على عملاء Bitwarden (إضافة المتصفح، تطبيق الجوال):
- سجّل الخروج من حساب Bitwarden السحابي;
- في إعدادات العميل، غيّر URL الخادم إلىhttps://vault.yourdomain.com;
- أعد تسجيل الدخول بنفس بيانات الاعتماد.انتظر المزامنة الكاملة قبل حذف أي شيء من الحساب القديم.
الإعداد بعد الانتقال
النسخ الاحتياطي التلقائي. خلافاً للخدمة السحابية، النسخ الاحتياطي لنسختك المستضافة ذاتياً هو مسؤوليتك. ملف بيانات Vaultwarden هو data/db.sqlite3. مهمة cron يومية كافية:
0 3 * * * tar -czf /backup/vaultwarden-$(date +%Y%m%d).tar.gz /opt/vaultwarden/data/ 2>/dev/nullدعوات المؤسسة. إذا كنت تدير مؤسسات بأعضاء متعددين، يجب إعادة دعوة كل عضو من واجهة إدارة Vaultwarden. تُرسل الدعوة بالبريد الإلكتروني.
المصادقة الثنائية. هيّئ 2FA على حسابك في Vaultwarden عند أول تسجيل دخول. يدعم Vaultwarden TOTP وDuo وWebAuthn والبريد الإلكتروني.
شفِّر ملف التصدير قبل تخزينه
يحتوي ملف JSON لـ Bitwarden على كلمات مرورك بنص واضح. إذا احتجت للاحتفاظ بهذا الملف مؤقتاً، شفِّره بـ GPG:
gpg --symmetric --cipher-algo AES256 bitwarden-personal.json
rm bitwarden-personal.jsonاحذف الملف غير المشفر فوراً. ملف JSON لـ Bitwarden منسي في مجلد مؤقت يمثّل ثغرة أمنية مباشرة.
استكشاف الأخطاء: الأخطاء الشائعة
انتهاء صلاحية الجلسة أثناء التصدير. العَرَض: Not logged in أو Session key is invalid. الحل:
export BW_SESSION=$(bw unlock --raw)--raw مفقود من bw unlock. بدون --raw، يعرض bw unlock رسالة منسقة بدلاً من المفتاح الخام مما يُفشل الأوامر التالية.
bw export --organizationid يُرجع You do not have permission. لست مالك المؤسسة أو مسؤولها. تحقق من دورك في واجهة Bitwarden الويب.
الاستيراد يفشل بـ already exists. احذف الخزانة من واجهة Vaultwarden (الإعدادات ← منطقة الخطر ← حذف الخزانة) قبل إعادة الاستيراد.
رموز TOTP لا تعمل بعد الاستيراد. تأكد من استخدام صيغة bitwardenjson لا csv التي لا تدعم TOTP.
المرفقات غائبة بعد الاستيراد. التصدير القياسي لا يتضمن المرفقات. يجب تنزيلها عبر bw get attachment (الخطوة 4) وإعادة إرفاقها يدوياً.
خزانتك المستضافة ذاتياً جاهزة للعمل
الانتقال من Bitwarden السحابي إلى Vaultwarden يتلخص في ست خطوات إذا أعددت نسختك وSMTP مسبقاً: التصدير الشخصي، تصدير كل مؤسسة، تنزيل المرفقات، إعادة تهيئة CLI، الاستيراد، التحقق.
نقطتان لا يجب إهمالهما: صيغة bitwardenjson لا csv، وخطوة المرفقات التي لا تشملها أي عملية تصدير تلقائية.
لتعزيز أمان VPS الذي يستضيف Vaultwarden، راجع قائمة تدقيق تصليب Linux ودليل التحديثات الأمنية التلقائية.