عن المشروع
مستودع مختبر منزلي شخصي يعامل العنقود بأكمله كبنية تحتية برمجية (infrastructure-as-code). تعمل الحزمة على k3s، مع استخدام Ansible playbooks وroles وinventory كمصدر وحيد للحقيقة القابل للتعديل؛ بينما يوجد دليل Docker Compose مُصيّر فقط على مضيف Raspberry Pi. يوثق المستودع اكتمال عملية الانتقال من Docker Compose إلى k3s في 2026-08-14، عندما تم إلغاء تثبيت Docker من عقدة الخادم الرئيسية، ويتم الاحتفاظ بسجل الانتقال التدريجي في مجلد أرشيف كـتاريخ.
تم وصف ثلاثة مضيفين: daniel-box وهو لوحة تحكم k3s ويقوم بتشغيل معظم أعباء العمل، بما في ذلك Traefik edge، وAuthelia SSO ومصدر OIDC، وPi-hole DNS، وتخزين Longhorn، وCrowdSec ونقطة نهاية WireGuard عامة؛ كما يعمل Ansible عليه. أما daniel-server فهو عقدة وكيل k3s تحتوي على Intel iGPU المستخدم لعمليات تحويل الترميز في Jellyfin/Tdarr، وتخزين LVM ومعالجة إيقاف التشغيل لـ UPS/NUT. وdaniel-pi هو مضيف Docker الوحيد المتبقي، وهو مخصص للشبكة المحلية فقط، ويقوم بتشغيل نسخة ثانية من WireGuard بالإضافة إلى حزمة أدوات صغيرة.
يتم مركزية الدخول (Ingress) على Traefik، والتوجيه عبر IngressRoute CRDs، مع قيام Authelia بحماية المسارات المحمية عبر وسيط forward-auth وإصدار رموز OIDC للتطبيقات التي تدعمها. تقوم Cloudflare بتوفير بروكسي لأسماء المضيفين العامة، بينما يتم حل الأسماء المحلية بواسطة Pi-hole على الشبكة المحلية. تشير ملف README إلى أن تقسيم الشبكة ليس مفروضاً بشكل شامل: حيث تحدد أدوار قليلة فقط NetworkPolicies، وفي حال وجود سياسات، يتم فرض قواعد الدخول (ingress) فقط بواسطة cluster CNI.
ينقسم النشر إلى Docker play وk8s play، وكلاهما يتم توجيهه بواسطة containers_list الخاصة بكل مضيف. يقوم Docker play بحل مخطط التبعيات باستخدام فلاتر toposort مخصصة وإعلانات upstream في meta/deps.yml لكل دور، بحيث يتم تشغيل التبعيات أولاً وتجلب عمليات التشغيل المحددة بعلامات التبعيات غير المستوفاة. يقوم k8s play بترتيب الأدوار طوبولوجياً واشتقاق الحواف نحو Traefik (لتثبيت CRD) وAuthelia (للوسيط) من قوالب الأدوار نفسها، مع وجود depends_on صريح للحواف التي لا يحملها أي قالب. يتم اختبار الفلاتر عبر pytest في pre-commit hook. تم توثيق الأوامر لنشر خدمة واحدة، أو إجراء تشغيل تجريبي (dry run)، أو نشر كل شيء، أو استهداف Pi، بالإضافة إلى playbooks منفصلة للتشغيل الأولي والتمهيد (bootstrap).
تشمل الاهتمامات المشتركة أسراراً مشفرة بـ SOPS/age يتم فك تشفيرها عند التشغيل، مع استخدام gitleaks في pre-commit ونسخة احتياطية للمفاتيح خارج النطاق؛ ومراقبة عبر Prometheus وGrafana وLoki وTempo مع لوحات تحكم يتم توفيرها كبرمجيات؛ ونسخ احتياطية مجدولة لـ Longhorn إلى Backblaze B2 مع توثيق تقسيم المستويات لكل وحدة تخزين وإجراءات التعافي من الكوارث؛ وطلبات سحب مدفوعة بـ Renovate لإصدارات الصور المثبتة ومراجعات hook؛ وأدوات أمنية تشمل Authelia TOTP/OIDC، وCrowdSec مع وكلاء لكل عقدة، وfail2ban وUFW لمنع الدخول الافتراضي.
تعمل بوابات الجودة من خلال أداة pre-commit تغطي YAML/JSON lint وansible-lint وgitleaks والتحقق من القوالب المُصيَّرة ومزامنة سجل تدوير الأسرار وruff وpytest. يتضمن المستودع إرشادات لإضافة خدمات جديدة، سواء كأدوار k8s تقوم بتوليد بيانات Deployment/Service/IngressRoute/PVC، أو كأدوار Docker لجهاز Pi.
Comments
0 Rating appears after 10 ratings
Sign in to join the discussion.