لماذا تستضيف مدير الأسرار ذاتيًا
يعني تخزين الأسرار في خزنة SaaS أن أكثر بيانات اعتمادك حساسيةً تعبر خادمًا تابعًا لطرف ثالث. أما استضافة Infisical ذاتيًا فتُبقي كل سرّ على بنيتك التحتية، تحت ضوابط وصولك وسجلّات تدقيقك الخاصة. كما تُلغي اشتراك SaaS متكرّرًا: فـInfisical مرخّص بـMIT، ومجاني للاستضافة الذاتية، وبديل مباشر عن أدوات مدفوعة مثل Doppler ($6/dev/month) أو تعقيد HashiCorp Vault. وبخادم VPS واحد واسم نطاق، يستطيع فريقك بأكمله وكل خط CI جلب الأسرار برمجيًا — دون ملفات .env تُرفع بالخطأ بعد اليوم.
ما يمنحك إياه Infisical المستضاف ذاتيًا
- خزنة مركزية لكل بيئة (dev، staging، prod) مع سياسات وصول لكل بيئة.
- حزم SDK أصيلة لـNode.js وPython وGo وJava وRuby وغيرها — احقن الأسرار وقت التشغيل، لا عبر ملفات .env.
- تكاملات مع GitHub Actions وGitLab CI وCircleCI وJenkins: تُزامَن الأسرار تلقائيًا مع خطوطك.
- تحكّم في الوصول قائم على الأدوار، ورموز خدمة، وهويّات آلية — دون بيانات اعتماد جذر مشتركة.
- سجلّ تدقيق كامل: تُسجَّل كل عملية قراءة وكتابة وتدوير مع المستخدم وعنوان IP والطابع الزمني.
- تدوير الأسرار وإدارة إصداراتها — تراجَع عن سرّ بنقرة واحدة إذا اختُرق أحد بيانات الاعتماد.
Infisical مقابل Vault مقابل Doppler مقابل Bitwarden Secrets
مرّر الجدول أفقيًا
| الأداة | النموذج | الاستضافة الذاتية | السعر التقريبي | الميزة المميزة |
|---|---|---|---|---|
| **Infisical** | مفتوح المصدر (MIT) | نعم — Docker Compose، 4 GB RAM | مجاني (self-hosted) | RBAC أصيل، تدوير تلقائي، SDK متعدد اللغات |
| HashiCorp Vault | BSL (مصدر متاح) | نعم — تشغيل معقد | مجاني (community) | محركات أسرار متقدمة، PKI، تشفير العبور |
| Doppler | SaaS مملوكة | لا | $6/dev/month | واجهة مصقولة، مزامنة CI/CD بلا خادم |
| Bitwarden Secrets | مفتوح المصدر (AGPL) | نعم — خادم Bitwarden | مجاني (self-hosted) | متكامل مع خزنة كلمات مرور Bitwarden |
المتطلبات
خادم VPS بـ2 vCPU و4 غيغابايت من RAM على الأقل يشغّل Ubuntu 22.04 — فـPostgreSQL وNode.js نهِمان للذاكرة تحت الطلبات المتزامنة؛ أقل من 4 غيغابايت يُعيد تشغيل Infisical تحت الحمل. قرص 20 غيغابايت على الأقل لسجلات التدقيق طويلة الأمد. مع Docker وDocker Compose مثبّتين (docker compose version يجب أن يُرجع v2.x). واسم نطاق يشير إلى خادم VPS الخاص بك — إذ يتطلّب Infisical رابطًا عامًا لإعادات توجيه OAuth وروابط الدعوة عبر البريد ونموذج أمان المتصفح (SITE_URL ليس اختياريًا). مع تسجيل DNS A أو CNAME منتشر قبل بدء Caddy أو nginx.
نشر Infisical باستخدام Docker Compose
توليد الأسرار
يحتاج Infisical إلى سرّين مستقلّين:
ENCRYPTION_KEY(سداسي عشري بـ16 بايت:openssl rand -hex 16) لتشفير بيانات الخزنة في حالة السكون، وAUTH_SECRET(سلسلة عشوائية:openssl rand -base64 32) لتوقيع رموز JWT. خزّن كليهما في ملف.envبجوار ملف Compose الخاص بك — ولا ترفع هذا الملف أبدًا إلى نظام التحكّم بالإصدارات.كتابة ملف Compose
تضمّ المنظومة ثلاث خدمات:
postgres:14-alpine(مخزن الأسرار)، وredis:alpine(المهام الخلفية وذاكرة الجلسات المؤقتة)، وinfisical/infisical:latest(التطبيق، المنفذ 8080). اضبطDB_CONNECTION_URIوREDIS_URLوSITE_URL(نطاقك،https://secrets.yourdomain.com) والسرّين. شغّل المنظومة عبرdocker compose up -d.لتثبيت إصدار مستقر بدلًا من
latest، راجع صفحة الإصدارات على GitHub واستخدمinfisical/infisical:v0.91.1(الإصدار الحالي في أكتوبر 2026).إعداد وكيل عكسي مع nginx أو Caddy
يتطلّب Infisical تفعيل HTTPS — فبدون شهادة TLS صالحة يحجب المتصفّح تدفقات OAuth.
Caddy (موصى به): أنشئ
/etc/caddy/Caddyfileبالمحتوىsecrets.yourdomain.com { reverse_proxy localhost:8080 }. يوفّر Caddy شهادة Let's Encrypt تلقائيًا. أعد التشغيل بـsystemctl reload caddy.nginx: أنشئ vhost بـ
proxy_pass http://127.0.0.1:8080;، ثم أصدر الشهادة عبر Certbot (certbot --nginx -d secrets.yourdomain.com). أضفproxy_set_header Host $host;وproxy_set_header X-Real-IP $remote_addr;لكي تسجّل سجلات التدقيق عنوان IP الحقيقي للعميل، لا127.0.0.1.إنشاء أول حساب مسؤول
افتح نطاقك في متصفّح وانتقل إلى
/admin/signup— فهو المعالج الذي يُستخدم مرة واحدة لإنشاء حساب Super Admin ثم مؤسستك. وأول من يصل إلى هذه الشاشة يصبح مسؤول النسخة. ثم أنشئ أول مشروع لك (فضاء أسماء منطقي للأسرار المترابطة)، وأضف البيئات (dev،staging،prod) وادعُ أعضاء فريقك.التكامل مع تطبيقاتك وCI
ثبّت واجهة سطر أوامر Infisical (
npm install -g @infisical/cli) أو حزمة SDK في مشروعك. نفّذinfisical run -- node server.jsلحقن الأسرار وقت التشغيل — يقرأ تطبيقكprocess.env.MY_SECRETكأنه من ملف .env محلي، لكن القيمة تأتي من الخزنة. أما لـGitHub Actions، فثبّت إجراء Infisical الرسمي وأضف رمز خدمة كسرّ مستودع.أول تسجيل دخول
افتحوا دون تأخير عنوان نسختكم على المسار: /admin/signup — فهو المعالج الذي يُستخدَم مرة واحدة لإنشاء حساب Super Admin ثم مؤسستكم. وأول من يصل إلى هذه الشاشة يصبح مسؤول النسخة.
الإعداد المتقدم: RBAC وسياسات الأسرار والتدوير التلقائي
بمجرد تشغيل النسخة، تعزّز ثلاث وظائف متقدمة الأمان التشغيلي.
RBAC (التحكم في الوصول القائم على الأدوار): يُميّز Infisical أربعة أدوار مدمجة — owner وadmin وdeveloper وviewer. خصّص دور viewer لخطوط CI التي تحتاج فقط إلى القراءة، وdeveloper للمطورين، وadmin لقادة المشاريع. تتيح الهويات الآلية (Machine Identities) ربط دور مباشرةً بتطبيق دون رمز خدمة طويل الأمد: تتحقق عبر AWS IAM أو Azure AD أو رمز Kubernetes.
سياسات الأسرار: في Settings → Project → Secret Protection، فعّل الموافقات قبل الكتابة فوق أسرار الإنتاج. يجب أن يتحقق مسؤول ثانٍ من كل تعديل — مفيد للفرق الخاضعة لـSOC 2 أو ISO 27001.
التدوير التلقائي: يشحن Infisical قوالب تدوير أصيلة لـPostgreSQL وMySQL وAWS IAM وGitHub. في تبويب Rotation بمشروعك، أنشئ مهمة تدوير بالتكرار المطلوب (مثلاً كل 30 يومًا لكلمة مرور قاعدة بيانات). يولّد Infisical القيمة الجديدة، ويدفعها إلى الخزنة، ويُخطر التطبيقات عبر webhook — دون تدخل يدوي.
تكامل CI/CD: GitHub Actions وGitLab CI وDocker Compose
GitHub Actions: أضف الإجراء الرسمي إلى سير عملك ومرّر رمز خدمة كسرّ مستودع (INFISICAL_TOKEN). تُحقن الأسرار كمتغيرات بيئة قبل كل مهمة.
- uses: Infisical/secrets-action@v1
with:
token: ${{ secrets.INFISICAL_TOKEN }}
project-id: "<your-project-id>"
environment: "prod"GitLab CI: استخدم CLI Infisical في before_script. أضف INFISICAL_TOKEN في متغيرات CI/CD للمستودع.
before_script:
- infisical run --env prod -- env | grep MY_SECRETDocker Compose (وقت التشغيل): تستطيع CLI Infisical توليد ملف .env فوريًا قبل تشغيل Compose، أو الحقن مباشرةً عبر infisical run -- docker compose up -d. تجنّب تخزين ملف .env المولَّد داخل صورة — فضّل الحقن وقت التشغيل لعدم تسلسل سرّ في طبقة Docker.
استكشاف الأخطاء: أبرز الأخطاء الشائعة
Error: connect ECONNREFUSED 127.0.0.1:6379 (Redis) — Redis غير مشغّل أو تبدأ خدمة infisical قبل جهوزية Redis. أضف depends_on: redis في docker-compose.yml وتحقق من حالة حاوية Redis بـdocker compose ps. إن كان Redis يعمل والخطأ مستمر، تأكد أن REDIS_URL محدّد بـredis://redis:6379 (اسم الخدمة في Compose، لا localhost).
Error: unable to verify the first certificate (TLS) — لم تُصدر شهادة Let's Encrypt بعد (انتشار DNS غير مكتمل) أو لا يستطيع Caddy/nginx الوصول إلى نقطة ACME challenge. تحقق من فتح المنفذ 80 في جدار الحماية (ufw allow 80) — يحتاجه Caddy للتحدي HTTP-01 عند الإصدار الأول.
فشل docker compose up بـBind for 0.0.0.0:8080 failed: port is already allocated — عملية أخرى تستمع على المنفذ 8080. غيّر ربط المنفذ في Compose (8081:8080) وحدّث إعداد الوكيل العكسي.
صفحة /admin/signup غير متاحة بعد أول تسجيل دخول — هذا مقصود: المعالج يظهر مرة واحدة فقط. إن أردت إعادة تشغيله (نسخة اختبار)، احذف جدول Organization وأعد تشغيل Infisical.
الأسرار لا تُحقن في GitHub Actions — تحقق أن environment الممرّر للإجراء يطابق تمامًا اسم البيئة المنشأة في Infisical (حساسية حالة الأحرف: prod ≠ Prod).
النسخ الاحتياطي والتحديثات
نسخ PostgreSQL احتياطيًا: الأسرار المشفّرة تعيش في PostgreSQL. جدوِل pg_dump يوميًا بـdocker exec infisical_postgres pg_dump -U infisical infisical > backup-$(date +%Y%m%d).sql. شفّر النسخة الاحتياطية قبل نقلها خارج الموقع — فهي تحتوي على أسرار مشفّرة في حالة السكون، لكن تسرّب قاعدة البيانات مع تسرّب ENCRYPTION_KEY يكشف الخزنة بأكملها.
تحديث Infisical: تتحدث صورة infisical/infisical:latest مع كل وسم جديد. للترقية المتحكَّم بها، ثبّت الإصدار (v0.91.1)، راجع سجل التغييرات على GitHub قبل كل تحديث (تتضمن بعض الإصدارات هجرات لقاعدة البيانات)، ثم اتبع هذا الترتيب:
1. docker compose pull لتنزيل الصورة الجديدة.
2. docker compose up -d — يُعيد Docker Compose إنشاء الحاويات التي تغيّرت صورتها فقط.
3. تحقّق من أن صفحة تسجيل الدخول تستجيب وأن السجلات لا تُبلّغ عن أخطاء هجرة.
المراقبة: اكشف نقطة نهاية /healthcheck الخاصة بـInfisical في أداة مراقبتك (Uptime Kuma، Gatus) لتتلقى تنبيهات عند الانقطاع. خزنة أسرار غير متاحة تعطّل كل عمليات النشر التي تعتمد عليها.
أحكم إغلاق نسخة Infisical لديك فور الإعداد
قبل دعوة فريقك، عطّل صفحة التسجيل العامة في Settings → Authentication → Allow signups. عندئذٍ لا يقبل Infisical سوى المستخدمين المدعوّين من مسؤول. فعّل أيضًا التحقّق عبر البريد الإلكتروني، وإذا كان فريقك يستخدم GitHub أو Google OAuth، فاضبط هذين الموفّرين في Settings → SSO — فهما أكثر أمانًا من الدخول بكلمة المرور وحدها.