প্রকল্প সম্পর্কে

একটি ব্যক্তিগত হোমল্যাব রিপোজিটরি যা পুরো ক্লাস্টারটিকে ইনফ্রাস্ট্রাকচার-অ্যাজ-কোড হিসেবে বিবেচনা করে। এই স্ট্যাকটি k3s-এ চলে, যেখানে Ansible প্লেবুক, রোল এবং ইনভেন্টরি হলো সম্পাদনাযোগ্য সোর্স অফ ট্রুথ; একটি রেন্ডারড Docker Compose ডিরেক্টরি শুধুমাত্র Raspberry Pi হোস্টের উপর বিদ্যমান। রিপোজিটরিটিতে নথিভুক্ত করা হয়েছে যে ২০২৬-০৮-১৪ তারিখে Docker Compose থেকে k3s-এ মাইগ্রেশন সম্পন্ন হয়েছে, যখন মূল সার্ভার নোড থেকে Docker আনইনস্টল করা হয়েছিল, এবং এর পর্যায়ক্রমিক রেকর্ড ইতিহাস হিসেবে একটি আর্কাইভ ফোল্ডারে রাখা হয়েছে। তিনটি হোস্টের বর্ণনা দেওয়া হয়েছে। daniel-box হলো k3s কন্ট্রোল প্লেন এবং এটি Traefik এজ, Authelia SSO এবং OIDC ইস্যুয়্যার, Pi-hole DNS, Longhorn স্টোরেজ, CrowdSec এবং একটি পাবলিক WireGuard এন্ডপয়েন্টসহ প্রায় প্রতিটি ওয়ার্কলোড পরিচালনা করে; এতে Ansible চলে। daniel-server হলো একটি k3s এজেন্ট নোড যাতে Jellyfin/Tdarr ট্রান্সকোডিংয়ের জন্য Intel iGPU, LVM স্টোরেজ এবং UPS/NUT শাটডাউন হ্যান্ডলিং ব্যবহৃত হয়। daniel-pi হলো একমাত্র অবশিষ্ট Docker হোস্ট, যা শুধুমাত্র LAN-এর জন্য রাখা হয়েছে এবং এতে একটি দ্বিতীয় WireGuard ইনস্ট্যান্সের সাথে একটি ছোট ইউটিলিটি স্ট্যাক চলে। ইনগ্রেস Traefik-এ কেন্দ্রীভূত, যা IngressRoute CRD-এর মাধ্যমে রাউটিং করে, যেখানে Authelia forward-auth মিডলওয়্যারের মাধ্যমে সুরক্ষিত রুটগুলো নিয়ন্ত্রণ করে এবং যেসব অ্যাপ সমর্থন করে তাদের জন্য OIDC টোকেন ইস্যু করে। Cloudflare পাবলিক হোস্টনেমগুলোকে প্রক্সি করে, আর লোকাল নামগুলো LAN-এ Pi-hole দ্বারা রেজলভ করা হয়। README-তে উল্লেখ করা হয়েছে যে নেটওয়ার্ক সেগমেন্টেশন সামগ্রিকভাবে কার্যকর করা হয়নি: শুধুমাত্র কয়েকটি রোল NetworkPolicies সংজ্ঞায়িত করে, এবং যেখানে পলিসি বিদ্যমান সেখানে ক্লাস্টার CNI দ্বারা শুধুমাত্র ইনগ্রেস রুলগুলো কার্যকর করা হয়। ডিপ্লয়মেন্ট একটি Docker প্লে এবং একটি k8s প্লে-তে বিভক্ত, যার উভয়ই প্রতিটি হোস্টের containers_list দ্বারা পরিচালিত হয়। Docker প্লে কাস্টম toposort ফিল্টার এবং প্রতি-রোল meta/deps.yml আপস্ট্রিম ডিক্লারেশনের মাধ্যমে একটি ডিপেন্ডেন্সি গ্রাফ রেজলভ করে, যাতে ডিপেন্ডেন্সিগুলো আগে চালু হয় এবং ট্যাগড রানগুলো অপূর্ণ ডিপেন্ডেন্সিগুলোকে টেনে আনে। k8s প্লে রোলগুলোকে toposort করে এবং রোল টেমপ্লেটগুলো থেকে Traefik (CRD ইনস্টলেশনের জন্য) এবং Authelia-র (মিডলওয়্যারের জন্য) এজগুলো বের করে, যেখানে টেমপ্লেটে নেই এমন এজগুলোর জন্য একটি স্পষ্ট depends_on থাকে। ফিল্টারগুলো একটি প্রি-কমিট হুকের মাধ্যমে pytest দ্বারা ইউনিট-টেস্ট করা হয়। একটি একক পরিষেবা, ড্রাই রান, সবকিছু অথবা Pi টার্গেট ডিপ্লয় করার কমান্ডগুলো নথিভুক্ত করা হয়েছে, সাথে আলাদা bring-up এবং বুটস্ট্র্যাপ প্লেবুক রয়েছে। ক্রস-কাটিং বিষয়গুলোর মধ্যে রয়েছে রানটাইমে ডিক্রিপ্ট করা SOPS/age-এনক্রিপ্টেড সিক্রেট, প্রি-কমিটে gitleaks এবং একটি আউট-অফ-ব্যান্ড কী ব্যাকআপ; ড্যাশবোর্ড প্রোভিশনড-অ্যাজ-কোড সহ Prometheus, Grafana, Loki এবং Tempo অবজারভেবিলিটি; নথিভুক্ত ভলিউম টিয়ারিং এবং ডিজাস্টার-রিকভারি পদ্ধতি সহ Backblaze B2-তে Longhorn শিডিউলড ব্যাকআপ; পিন করা ইমেজ ভার্সন এবং হুক রিভিশনের জন্য Renovate-চালিত পুল রিকোয়েস্ট; এবং Authelia TOTP/OIDC, প্রতি-নোড এজেন্ট সহ CrowdSec, fail2ban এবং UFW ডিফল্ট-ডিনাই ইনবাউন্ড সহ সিকিউরিটি টুলিং। কোয়ালিটি গেটগুলো একটি প্রি-কমিট টুলের মাধ্যমে চলে যা YAML/JSON লিন্ট, ansible-lint, gitleaks, রেন্ডারড-টেমপ্লেট ভ্যালিডেশন, সিক্রেট-রোটেশন রেজিস্ট্রি সিঙ্ক, ruff এবং pytest কভার করে। নতুন পরিষেবা যোগ করার নির্দেশিকা অন্তর্ভুক্ত করা হয়েছে, তা Deployment/Service/IngressRoute/PVC ম্যানিফেস্ট রেন্ডার করার k8s রোল হিসেবে হোক বা Pi-এর জন্য Docker রোল হিসেবে হোক।