لماذا تستضيف مدير كلمات المرور بنفسك؟
تفرض مديرات كلمات المرور السحابية رسومًا لكل مستخدم شهريًا، وتخزّن خزنتك المشفّرة على خوادم لا تتحكم بها، ويمكن أن تختفي أو ترفع أسعارها بين ليلة وضحاها. يقلب Vaultwarden هذا النموذج: حاوية واحدة على VPS الخاص بك، وحجم Docker واحد للنسخ الاحتياطي، وعدد غير محدود من المستخدمين بتكلفة بنية تحتية ثابتة. ولأن Vaultwarden يتحدث بروتوكول Bitwarden، فإن كل عميل Bitwarden — إضافة Chrome، وإضافة Firefox، وiOS، وAndroid، وWindows، وLinux، وCLI — يتصل بنسختك المستضافة ذاتيًا دون أي تعديل.
المزايا الرئيسية
- متوافق 100% مع جميع عملاء Bitwarden الرسميين — لا نسخ متفرّعة، ولا تطبيقات مخصّصة، ولا إعادة تعلّم
- تشفير AES-256 من طرف إلى طرف: كلمة المرور الرئيسية لا تغادر جهازك أبدًا
- أقل من 50 MB من ذاكرة RAM في وضع الخمول — يعمل بسلاسة على VPS بسعة 512 MB جنبًا إلى جنب مع خدمات أخرى
- عدد غير محدود من المستخدمين وخزائن المؤسسات مع مشاركة مشفّرة ووصول قائم على الأدوار
- مصادِق TOTP مدمج: استبدل Google Authenticator ببديل مستضاف ذاتيًا
- الوصول في حالات الطوارئ — امنح جهة اتصال موثوقة صلاحية القراءة بعد فترة انتظار قابلة للتهيئة
المتطلبات المسبقة
تحتاج إلى VPS بما لا يقل عن 1 vCPU و512 MB من ذاكرة RAM مع تثبيت Docker (يُنصح بـ Ubuntu 22.04 LTS). كما تحتاج إلى اسم نطاق يشير إلى VPS — إذ يرفض عملاء Bitwarden الخزائن غير المؤمّنة بـ HTTPS، فالـ HTTPS إلزامي. اسمح بالمنفذين 80 و443 عبر جدار الحماية: ufw allow 80 && ufw allow 443.
انشر Vaultwarden في 5 خطوات
ثبّت Docker
إذا لم يكن Docker مثبّتًا بالفعل: curl -fsSL https://get.docker.com | sh && systemctl enable --now docker. تحقّق باستخدام docker --version.
شغّل Vaultwarden
شغّل الحاوية: docker run -d --name vaultwarden --restart=always -v vaultwarden:/data -p 127.0.0.1:8000:80 -e WEBSOCKET_ENABLED=true vaultwarden/server:latest. يبدأ الخادم في أقل من ثانية ويستمع على المنفذ 8000 على localhost.
إعداد HTTPS باستخدام Caddy
ثبّت Caddy: apt install -y caddy. أنشئ /etc/caddy/Caddyfile بالمحتوى: passwords.yourdomain.com { reverse_proxy localhost:8000 }. أعد تحميل Caddy: systemctl reload caddy. يتم توفير شهادة TLS من Let's Encrypt تلقائيًا وتُجدَّد إلى الأبد — دون أي تهيئة.
أنشئ حسابك
افتح https://passwords.yourdomain.com في متصفّحك. انقر على 'Create Account'، واختر كلمة مرور رئيسية قوية (تُشفّر كل شيء محليًا قبل إرسال أي بيانات إلى الخادم)، وتصبح خزنتك جاهزة على الفور.
أغلق التسجيلات
بمجرد إنشاء جميع الحسابات، أوقف الحاوية وأعد تشغيلها بعد إضافة -e SIGNUPS_ALLOWED=false إلى أمر docker run. تصبح نسختك الآن بالدعوة فقط. لإدارة المستخدمين بشكل مستمر، فعّل لوحة الإدارة بإضافة -e ADMIN_TOKEN=$(openssl rand -base64 48).
أول تسجيل دخول
عند فتح الرابط لأول مرة، يعرض Vaultwarden خزنة Bitwarden على الويب: انقر على «إنشاء حساب» (Create account) وحدّد بنفسك بريدك الإلكتروني وكلمة المرور الرئيسية (لا يستطيع أحد استرجاعها، ولا نحن). قم بذلك فوراً: التسجيل مفتوح.
توافق العميل مع الخادم والأخطاء الصامتة
أدخل عملاء Bitwarden الحديثون تدفق مصادقة أوّلي جديد يستدعي نقطة النهاية /identity/accounts/prelogin/password. تعيد نسخ Vaultwarden الأقدم من الإصدار 1.36.0 خطأ 404 دون رسالة واضحة — ويعرض العميل مجرد رسالة فشل عامة. الفخ دقيق: الأجهزة المتصلة أصلًا قبل تحديث العميل تواصل العمل بشكل طبيعي، لأن جلستها مُنشأة مسبقًا ولا تمر بمسار المصادقة الجديد هذا. الأجهزة الجديدة وحدها تفشل. نفّذ curl https://نطاقك.com/identity/accounts/prelogin/password -X POST -d '{"email":"[email protected]"}' -H 'Content-Type: application/json' — إذا حصلت على 404 فخادمك قديم جدًا.
أعراض عدم توافق إصدار العميل مع الخادم
- تعذّر تسجيل الدخول على جهاز أو متصفح جديد، بينما تعمل الأجهزة الحالية بشكل طبيعي على نفس الحساب
- رسالة خطأ عامة دون أي دلالة على السبب الجذري ("An error has occurred" أو "Invalid username or password")
- إضافة Chrome أو Firefox المثبّتة حديثًا تفشل، لكن الإصدار ذاته على جهاز آخر يعمل
- خزنة Bitwarden على الويب المستضافة على نسختك تُعيد 404 على
/identity/accounts/prelogin/password - لا أثر للخطأ في سجلات Vaultwarden على الخادم — نقطة النهاية غير موجودة فلا يوجد ما يُسجَّل
- ظهر المشكل بعد تحديث تلقائي لعميل Bitwarden على الجهاز الجديد
تشخيص عدم التوافق وإصلاحه
تحقّق من إصدار خادمك
استعلم عن نقطة نهاية الإصدار: curl https://نطاقك.com/api/version. إذا أظهرت الاستجابة إصدارًا أقدم من 1.36.0، فخادمك لا يدعم تدفق المصادقة الجديد الذي يتطلبه العملاء الحديثون.
حدّث إلى أحدث صورة
الحل الأأمن هو استخدام vaultwarden/server:latest دائمًا والحفاظ على تحديث الصورة. للتحديث: docker pull vaultwarden/server:latest && docker stop vaultwarden && docker rm vaultwarden، ثم أعد تشغيل نفس أمر docker run المستخدم عند التثبيت. يحافظ Vaultwarden على جميع البيانات في الحجم — لا حاجة إلى أي ترحيل يدوي.
تحقّق أن التحديث أُخذ بعين الاعتبار
بعد إعادة التشغيل، استعلم مجددًا عبر curl https://نطاقك.com/api/version وتأكد أن الإصدار 1.36.0 أو أحدث. ثم اختبر تسجيل الدخول من تبويب تصفح خاص جديد.
ثبّت إصدارًا محددًا إذا كانت الاستقرارية أولوية
إذا كنت تفضّل التحكم يدويًا في التحديثات، استخدم وسمًا محددًا: vaultwarden/server:1.37.0 مثلًا. في هذه الحالة، تابع إصدارات GitHub وقم بالتحديث عند كل إصدار جديد من عميل Bitwarden — الاثنان مترابطان بشكل وثيق.
فخ SIGNUPS_ALLOWED=false: ضعه فقط بعد إنشاء حساب المدير
خطأ شائع عند التثبيت: ضبط -e SIGNUPS_ALLOWED=false قبل إنشاء حساب المسؤول. النتيجة — تمنعك نسختك الخاصة من التسجيل ولا تستطيع تسجيل الدخول إطلاقًا. الترتيب إلزامي: (1) ابدأ التشغيل بدون هذا المعامل، (2) أنشئ حساب المدير فورًا عبر واجهة الويب، (3) ثم فقط أعد تشغيل الحاوية مع SIGNUPS_ALLOWED=false. إذا أغلقت النسخة على نفسك، مخرج الطوارئ هو تفعيل لوحة الإدارة عبر -e ADMIN_TOKEN=$(openssl rand -base64 48) ودعوة مستخدم المدير من /admin.
نسخ احتياطية يومية بسطر cron واحد
أضف هذا إلى crontab الخاص بالمستخدم root (crontab -e): 0 3 * * * docker run --rm -v vaultwarden:/data -v /backup:/out busybox tar czf /out/vaultwarden-$(date +%F).tar.gz /data. شغّله يوميًا عند الساعة 3 صباحًا — تُحفَظ الخزنة بأكملها (ملف SQLite + المرفقات) في /backup كأرشيف مؤرّخ. أرسل هذا المجلد إلى S3 أو Backblaze B2 باستخدام rclone للحماية خارج الموقع.
التوثيق الرسمي
لمزيد من التهيئة المتقدمة والخيارات الخاصة بالأداة، راجع التوثيق الرسمي لـ Vaultwarden. يغطّي هذا الدليل النشر على VPS؛ ويبقى توثيق الناشر المرجع للإعدادات الدقيقة والتحديثات الكبرى وحالات الاستخدام الخاصة.