لماذا تستضيف مدير كلمات مرور الفريق بنفسك
يحل مدير الأسرار كخدمة SaaS مشكلة المشاركة لكنه يخلق أخرى: لا تتحكم في مكان تخزين الأسرار ولا في من يصل إليها من جانب المورد. حين يغادر موظف الوكالة، تعتمد إلغاء صلاحياته على سرعة مديرك في التصرف عبر واجهة طرف ثالث — وسجل التدقيق، إن وُجد، محجوز عادةً لخطط Enterprise.
يعكس Passbolt Community Edition هذا المنطق: يُشفَّر كل سر من جهة العميل بمفتاح GPG الخاص بالمستلم قبل أن يصل إلى الخادم. حتى مدير النظام الذي يملك صلاحية root للوصول إلى قاعدة البيانات لا يستطيع قراءة كلمة مرور بنص واضح. يسجّل سجل التدقيق كل اطلاع لكل إدخال ولكل مستخدم — ما يسميه المحاسبون أثرًا غير قابل للإنكار.
ما يقدمه Passbolt CE لوكالتك
- تشفير GPG لكل مستلم — لا يغادر السر الجهاز العميل بنص واضح؛ يخزّن الخادم بيانات مشفرة فقط، غير قابلة للقراءة بدون المفتاح الخاص للمستخدم.
- سجل تدقيق دقيق — من اطّلع أو عدّل أو شارك كل إدخال، مع طابع زمني؛ ضروري عند مغادرة أي عضو في الفريق.
- مشاركة لكل إدخال، لا لكل مجلد — شارك سر العميل أ مع الشخص أ فقط، دون الكشف عن أسرار العميل ب.
- REST API أصلية — التكامل مع خطوط CI/CD لحقن الأسرار تلقائيًا دون كتابتها في المستودع.
- امتداد متصفح رسمي — متاح على Chrome وFirefox وEdge؛ يملأ النماذج مثل أي مدير SaaS.
- مجاني ومفتوح المصدر (AGPL-3.0) — لا حد للمستخدمين في Community Edition، الكود قابل للتدقيق على GitHub.
- قابلية توسع عمودية — إذا تضاعف الفريق، رقّي الخادم؛ لا إعادة تفاوض على عقد، لا عتبة تسعيرية للعبور.
المتطلبات الأساسية للتثبيت
يعمل Passbolt CE مع PostgreSQL 16 في 2 جيجابايت من الذاكرة: خصّص نحو 1 جيجابايت لحاوية Passbolt و512 ميجابايت لـPostgreSQL، والباقي للنظام والمخازن المؤقتة. معالج واحد يكفي لفريق أقل من خمسين شخصًا.
المتطلبات: Docker وDocker Compose مثبّتان، اسم نطاق يشير إلى VPS (يرفض Passbolt الإقلاع عبر HTTP — HTTPS شرط مسبق، ليس خيارًا)، وإمكانية إرسال SMTP (المنفذ 587/STARTTLS أو 465/SSL). بدون SMTP مهيّأ، لن تقلع الحاوية: الدعوات واستعادة الحساب تمر عبر البريد الإلكتروني.
نشر Passbolt CE على VPS
تحضير الدليل وجلب الإعداد الرسمي
اتصل بـVPS عبر SSH وأنشئ دليلًا مخصصًا:
mkdir -p /opt/passbolt && cd /opt/passbolt
curl -fsSL https://raw.githubusercontent.com/passbolt/passbolt_docker/master/docker-compose/docker-compose-ce.yaml \
-o docker-compose.ymlيحدد هذا الملف خدمتين: db (صورة postgres:16) وpassbolt (صورة passbolt/passbolt:latest-ce-non-root)، مع مجلدَين مسمَّيَين للحفاظ على البيانات. في بيئة الإنتاج، ثبّت إصدارًا محددًا — استبدل latest-ce-non-root بأحدث وسم إصدار مستقر على Docker Hub الرسمي.
تهيئة متغيرات البيئة
أنشئ ملف .env في جذر الدليل. المتغيرات الأساسية المطلوبة:
APP_FULL_BASE_URL=https://passbolt.yourdomain.com
DATABASE_HOST=db
DATABASE_PORT=5432
DATABASE_NAME=passbolt
DATABASE_USERNAME=passbolt
DATABASE_PASSWORD=strong_password
POSTGRES_PASSWORD=strong_password
EMAIL_TRANSPORT_DEFAULT_HOST=smtp.yourprovider.com
EMAIL_TRANSPORT_DEFAULT_PORT=587
EMAIL_TRANSPORT_DEFAULT_TLS=true
[email protected]
EMAIL_TRANSPORT_DEFAULT_PASSWORD=smtp_password
[email protected]يجب أن يبدأ APP_FULL_BASE_URL بـhttps:// — يستخدم Passbolt هذه القيمة لبناء الروابط في رسائل الدعوة وكقاعدة لـJWT.
إضافة فحص صحة PostgreSQL وتشغيل الحزمة
عدّل docker-compose.yml لإضافة شرط صحة على خدمة db — بدونه قد يبدأ Passbolt قبل أن يكون PostgreSQL جاهزًا لقبول الاتصالات، مما يسبب حلقة إعادة تشغيل:
# في خدمة db، تحت صورة postgres:16:
healthcheck:
test: ["CMD-SHELL", "pg_isready -U passbolt"]
interval: 10s
timeout: 5s
retries: 5
# في خدمة passbolt:
depends_on:
db:
condition: service_healthyثم شغّل الحزمة:
docker compose up -d
docker compose logs -f passboltانتظر حتى تشير السجلات إلى اكتمال تهيئة GPG قبل المتابعة.
استرداد بصمة GPG وتدوينها
عند الإقلاع الأول، يولّد Passbolt زوج مفاتيح GPG من جهة الخادم. استردّ البصمة — ستحتاجها عند إعادة تهيئة البيئة:
docker compose exec passbolt su -s /bin/bash -c \
"gpg --home /var/lib/passbolt/.gnupg --list-keys" www-dataالبصمة هي السلسلة السداسية العشرية المكونة من 40 حرفًا تحت سطر pub. دوّنها: إذا لم تتطابق PASSBOLT_GPG_SERVER_KEY_FINGERPRINT مع المفتاح الموجود في حلقة مفاتيح الحاوية، سيرفض Passbolt الإقلاع بخطأ The OpenPGP server key fingerprint does not match.
تهيئة الوكيل العكسي HTTPS
يجب تقديم Passbolt حصريًا عبر HTTPS. إذا كنت تستخدم nginx كوكيل عكسي على نفس الـVPS، مثال بسيط للإعداد:
server {
listen 443 ssl;
server_name passbolt.yourdomain.com;
ssl_certificate /etc/letsencrypt/live/passbolt.yourdomain.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/passbolt.yourdomain.com/privkey.pem;
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-Proto https;
}
}احصل على شهادتك باستخدام Certbot (certbot --nginx -d passbolt.yourdomain.com) قبل تفعيل الكتلة. لن يعمل امتداد متصفح Passbolt على نطاق HTTP أو بشهادة موقّعة ذاتيًا.
إنشاء أول حساب مسؤول
بمجرد تشغيل الحاوية وإتاحة النطاق عبر HTTPS، أنشئ حساب المسؤول:
docker compose exec passbolt su -s /bin/bash www-data \
-c "/var/www/passbolt/bin/cake passbolt register_user \
-u [email protected] \
-f FirstName \
-l LastName \
-r admin"تولّد الأمر رابط دعوة للاستخدام مرة واحدة. افتحه في المتصفح حيث امتداد Passbolt مثبّت — سيرشدك الامتداد لإعداد مفتاح GPG الشخصي. بعد تهيئة المسؤول، ادعُ أعضاء الفريق من الواجهة الإلكترونية.
التصليب: التحكم في الوصول، النسخ الاحتياطية، ودوران المفاتيح
اقصر الوصول إلى منفذ قاعدة البيانات على حاوية Passbolt فقط (تتولى Docker Networks ذلك تلقائيًا بشبكات Compose الداخلية). جدوِل نسخًا احتياطيًا يوميًا لمجلد PostgreSQL باستخدام docker compose exec db pg_dump إلى مخزن خارجي — الأسرار المشفرة بـGPG لا قيمة لها بدون قاعدة البيانات التي تفهرسها.
لتدوير مفاتيح GPG الخادم، اتبع الإجراء الموثق على docs.passbolt.com: ترشد الواجهة كل مستخدم لإعادة تشفير أسراره بالمفتاح العام الجديد للخادم. لا تحاول استبدال ملفات حلقة المفاتيح يدويًا داخل المجلد — سيكتشف Passbolt تعارض البصمة ويرفض الإقلاع.
Passbolt CE مقابل Bitwarden Teams مقابل Vaultwarden
| المعيار | Passbolt CE | Bitwarden Teams / Vaultwarden |
|---|---|---|
| التكلفة الشهرية | 0 € (استضافة ذاتية) | Bitwarden Teams: 4$/مستخدم/شهر · Vaultwarden: 0 € (استضافة ذاتية) |
| التشفير | GPG لكل مستلم — الخادم لا يرى السر بنص واضح أبدًا | AES-256 من جهة الخادم (Bitwarden وVaultwarden) — الخادم يفك التشفير ليخدمك |
| سجل تدقيق لكل إدخال | نعم، أصلي في CE — من اطّلع أو عدّل أو شارك كل سر | Bitwarden Enterprise: نعم · Bitwarden Teams: لا · Vaultwarden: لا |
| مشاركة دقيقة | لكل إدخال ولكل مستخدم، مع صلاحيات قراءة/تحديث/ملكية | لكل مجلد (مجموعة) — الكل أو لا شيء |
| REST API مستقرة | نعم، موثقة وذات إصدار — قابلة للاستخدام في CI/CD | Bitwarden: API رسمية · Vaultwarden: API غير رسمية، غير مضمونة |
| LDAP / Active Directory | Passbolt Pro (مدفوع) · CE: دعوة يدوية فقط | Bitwarden Enterprise: نعم · Vaultwarden: لا |
| امتداد المتصفح | امتداد رسمي Chrome/Firefox/Edge | امتداد Bitwarden (متوافق مع Vaultwarden) Chrome/Firefox/Edge/Safari |
استكشاف الأخطاء — رسائل خطأ حقيقية
The OpenPGP server key fingerprint does not match عند الإقلاع: المتغير PASSBOLT_GPG_SERVER_KEY_FINGERPRINT في ملف .env لا يتطابق مع المفتاح في حلقة مفاتيح الحاوية. تحقق من البصمة بـgpg --list-keys داخل الحاوية ثم حدّث المتغير. يحدث هذا عادةً بعد إعادة إنشاء الحاوية دون الاحتفاظ بمجلد GPG.
Could not send email أثناء دعوة: EMAIL_TRANSPORT_DEFAULT_HOST مفقود أو غير صحيح، أو المنفذ 25 محجوب من قِبل VPS (الحال الافتراضي لدى معظم المزودين). انتقل إلى المنفذ 587 مع EMAIL_TRANSPORT_DEFAULT_TLS=true (STARTTLS) أو المنفذ 465 مع SSL الضمني حسب تهيئة خادم SMTP.
حاوية passbolt في حالة unhealthy أو في حلقة إعادة تشغيل: شغّل docker compose logs passbolt وابحث عن أخطاء الاتصال بقاعدة البيانات. السبب الأكثر شيوعًا هو عدم جاهزية PostgreSQL عند محاولة Passbolt الاتصال. أضف depends_on مع condition: service_healthy وفحص pg_isready على خدمة db (موضح في الخطوة 3).
الامتداد غير معترف به من المتصفح: يتطلب امتداد Passbolt HTTPS بشهادة صالحة. تحقق من أن APP_FULL_BASE_URL يبدأ بـhttps:// وأن الشهادة موثوقة من متصفحك. امسح ذاكرة التخزين المؤقت وملفات تعريف الارتباط للامتداد (passbolt_data في تخزين الامتداد) قبل محاولة تسجيل دخول جديد.
وكالتك تتحكم في بيانات الاعتماد، دون تبعية خارجية
يستبدل Passbolt Community Edition اشتراك SaaS بحزمة من ثلاثة مكونات — Docker وPostgreSQL ووكيل عكسي — تعمل على الـVPS الذي ربما تمتلكه بالفعل. تشفير GPG لكل مستلم وسجل التدقيق لكل إدخال ليسا خيارين مدفوعين: هما جزء من النواة مفتوحة المصدر، قابلة للتدقيق سطرًا بسطر على GitHub.
حين يغادر متعاون الوكالة، تلغي صلاحياته من الواجهة، والأسرار التي كانت بين يديه تبقى مشفرة بمفاتيح لم يعد يملكها. هذه هي الخاصية الجوهرية التي لا تستطيع الأدوات المصممة للاستخدام الشخصي — بما فيها Vaultwarden — تقديمها لك.