# স্টুডিও চালানো একটি সেলফ-হোস্টেড হোমল্যাব, প্রতিদিন রক্ষণাবেক্ষণ করা

Company: Webanion
Service: ডেভঅপস ইঞ্জিনিয়ারিং
Period: 2026-02 - present
Tech: Kubernetes, Traefik, Cloudflare, Go, React.js, TypeScript, SQLite, VictoriaMetrics, Grafana, PostgreSQL, MongoDB, zot, Verdaccio, systemd, Linux, GitHub Actions
Canonical: https://webanion.com/bn/portfolio/self-hosted-homelab-that-runs-the-studio-infrastructure

সেলফ-হোস্টেড Kubernetes ক্লাস্টারে স্টুডিওর নিজস্ব অবকাঠামো, যার পরিকল্পনা ২০২৬ সালের ফেব্রুয়ারিতে আর তখন থেকে প্রতিদিন রক্ষণাবেক্ষণ হয়: এর ওয়েবসাইট, CMS ও MCP সার্ভার আর যে ক্লায়েন্ট প্ল্যাটফর্মগুলো এটি দেখাশোনা করে, সবই Cloudflare টানেলের মাধ্যমে চলে, প্রতিটি ডেটাবেস প্রতি রাতে ডাম্প ও যাচাই হয়, মেট্রিকস আর অ্যালার্ট রুল ফোনে পৌঁছায়, বাড়ির বাইরে একটি আউটেজ মনিটর, একটি কনটেইনার রেজিস্ট্রি ও একটি npm রেজিস্ট্রি, আর একটি প্রাইভেট কনসোল যা মার্জ, রান, ইমেজ, পড আর নোডকে এক পাতায় জুড়ে দেয়।

## পুরো গল্পটা

প্রতিটি ভেন্ডরের আলাদা ড্যাশবোর্ড ভাড়া না নিয়ে পুরো স্ট্যাক নিজের হাতে রাখতে কী লাগে, আর প্রতিদিন তার দেখাশোনা করে একটি স্টুডিও কী ফিরে পায়।

### স্টুডিও যা কিছু চালু করে, সবই চলে নিজের সার্ভারে

<p>যে স্টুডিও ক্লায়েন্টদের জন্য প্রোডাক্ট বানায়, সে নিজের জন্যও অবাক করার মতো অনেক কিছু চালায়। Webanion তার সব ভাষায় ওয়েবসাইট চালায়, তার পেছনের CMS, পাবলিক ও প্রাইভেট MCP সার্ভার, যা দিয়ে AI অ্যাসিস্ট্যান্ট সেই কনটেন্ট পড়তে ও সামলাতে পারে, আর ক্লায়েন্টদের জন্য বানানো ও দেখাশোনা করা প্ল্যাটফর্মগুলো, যার মধ্যে আছে একটি ফিন্যান্স প্ল্যাটফর্ম, একটি বুকিং প্ল্যাটফর্ম, একটি লেজার অ্যাপ আর একটি গবেষণা দলের সাইট। প্রতিটির দরকার চলার একটি জায়গা, ব্যাকআপ রাখা একটি ডেটাবেস, সময়মতো নবায়ন হওয়া একটি সার্টিফিকেট, আর এমন কেউ যে কিছু ভাঙলে টের পায়। প্রতিটি অংশ আলাদা ভেন্ডরের কাছ থেকে ভাড়া নেওয়া মানে প্রতি ভেন্ডরে একটি বিল, একটি ড্যাশবোর্ড আর একটি অন্ধ কোণ, আর এমন কোনো একক জায়গা নেই যা একটি কাজের দিন ঠিক করে দেওয়া তিনটি প্রশ্নের উত্তর দেয়: কী চলছে, সব ঠিক আছে কি না, আর আজ কীসে মনোযোগ দরকার।</p><p>এখানে উত্তর হলো স্টুডিওর নিজের সার্ভারে একটি Kubernetes ক্লাস্টার, যার পরিকল্পনা ২০২৬ সালের ফেব্রুয়ারিতে, আর তখন থেকে প্রতিদিন রক্ষণাবেক্ষণ হয়। প্রতিটি সাইট ও প্ল্যাটফর্ম এখান থেকে Cloudflare টানেলের মাধ্যমে চলে, প্রতিটি ডেটাবেস প্রতি রাতে ডাম্প হয়, মেট্রিকস ও অ্যালার্ট রুল ভেতর থেকে ক্লাস্টারের ওপর নজর রাখে আর একটি আউটেজ মনিটর নজর রাখে বাড়ির বাইরে থেকে, একটি কনটেইনার রেজিস্ট্রি ও একটি npm রেজিস্ট্রি স্টুডিওর নিজের ইমেজ ও প্যাকেজ রাখে, আর সবকিছুর ওপরে আছে একটি প্রাইভেট কনসোল। স্ক্রিনশট নেওয়ার দিন, ২০২৬ সালের ৩০ সেপ্টেম্বর, কনসোলে গোনা ছিল ২টি নোড, ৫৪টি ওয়ার্কলোড আর ৯৩টি পড।</p>

### এক পাতায় বোঝা যায় কী চলছে আর কীসে মনোযোগ দরকার

<p>সকালে সবার আগে খোলা হয় এই কনসোল, আর মার্জের সময় এটিই খোলা থাকে। এর ওভারভিউ একসঙ্গে ক্লাস্টার, GitHub, রেজিস্ট্রি আর হোস্টগুলো পড়ে: কয়টি নোড প্রস্তুত, ওয়ার্কলোড ও পড সুস্থ কি না, কোন পুল রিকোয়েস্ট অপেক্ষায় আর কোনগুলো মার্জ হয়েছে, সাম্প্রতিক রানের কত অংশ পাস করেছে, GitHub রিকোয়েস্টের বাজেট কতটা বাকি, প্রতিটি হোস্টের লোড, মেমরি, ডিস্ক, তাপমাত্রা আর বিল্ড ক্যাশ, সর্বশেষ নেওয়া পদক্ষেপ, আর আজ কীসে হাত লাগাতে হবে তার একটি ছোট তালিকা, সবচেয়ে গুরুতরটি আগে।</p><p>এর আসল অবদান হলো যোগসূত্র: এই মার্জ, যে রান এটি চালু করল, সেই রান যে ইমেজ পুশ করল, যে পড সেই ইমেজ চালাচ্ছে আর পডটি যে নোডে আছে, সব পাঁচটি ট্যাবের বদলে এক পাতায়। এটি Cloudflare Access-এর পেছনে থাকে আর ফোনের মাপেও কাজ করে, কারণ যখন কিছু দেখার দরকার হয়, তখন ল্যাপটপ খোলা থাকে খুব কমই। স্ক্রিনশটের দিন এতে দেখা যাচ্ছিল ২টির মধ্যে ২টি নোড প্রস্তুত, ৫৪টির মধ্যে ৫৪টি ওয়ার্কলোড, ৯৩টির মধ্যে ৯৩টি পড সুস্থ, আর আগের দুই দিনে ১৩টি মার্জ।</p>

### প্রতিটি মার্জ হয় একটি বোর্ড থেকে

<p>স্টুডিওর GitHub অর্গানাইজেশনগুলোর পুল রিকোয়েস্ট একটি বোর্ডে থাকে, অপেক্ষমাণ, চলমান আর সম্পন্ন, আর প্রতিটি কার্ড বলে দেয় মার্জ করলে কী হবে: লাইভে ডিপ্লয়, স্টেজিংয়ে ডিপ্লয়, নাকি কিছুই না। বোর্ডের নিচে একটি টেবিল রিপোজিটরি ধরে ধরে দেখায় সেটি এখান থেকে মার্জ করা যায় কি না, না গেলে কেন নয়, তার কনকারেন্সি গ্রুপ, আর তার ওয়ার্কফ্লো হাতে চালু করা যায় কি না।</p><p>বোর্ড থেকে মার্জ চোখ বুজে বিশ্বাস করা হয় না, পাহারা দিয়ে করা হয়। বোতাম চাপার মুহূর্তে সার্ভার পুল রিকোয়েস্টটি আবার পড়ে, লাল চেক বা ড্রাফট থাকলে কখনো মার্জ করে না, সবসময় মার্জ কমিট দিয়ে মার্জ করে, আর লাইভে ডিপ্লয় হয় এমন যেকোনো কিছুর আগে রিপোজিটরির পুরো নাম টাইপ করতে বলে। যে স্টুডিও এক সপ্তাহে কয়েকটি প্রোডাক্ট ছাড়ে, তার জন্য এটাই পার্থক্য: একটি মার্জ কী করবে তা আগে জানা, নাকি পরে টের পাওয়া। স্ক্রিনশটের দিন বোর্ডে ছিল ২টি অপেক্ষমাণ পুল রিকোয়েস্ট আর ১৩টি সম্পন্ন, প্রতিটি সম্পন্ন কার্ডে তার ডিপ্লয় করা ইমেজসহ।</p>

### প্রতি রাতে নিজে থেকে খবর দেয় এমন ব্যাকআপ

<p>ক্লাস্টারের প্রতিটি ডেটাবেস প্রতি রাতে ডাম্প হয়, পনেরো মিনিট ব্যবধানে, যাতে দুটি একসঙ্গে শুরু না হয়, আর প্রতিটি ডাম্পের পাশে প্রতিটি টেবিলের সারির সংখ্যা লেখা থাকে, রিস্টোর প্রুফ কোনো রানকে একবার ব্যবহারের namespace-এ ফিরিয়ে আনার সময় যা মিলিয়ে দেখে। কনসোলের নিজের আর্কাইভ, একমাত্র স্টোর যা আর কিছু দিয়ে আবার বানানো যায় না, SQLite-এর অনলাইন ব্যাকআপ দিয়ে কপি হয়, আর রাখার আগে তার অখণ্ডতা ও সারির সংখ্যা যাচাই হয়। যাচাই করা রানের পর প্রতিটি জব বাড়ির বাইরের একটি ডেড ম্যান'স সুইচে সংকেত পাঠায়, ফলে কোনো জব ব্যর্থ হলে, আটকে গেলে বা শিডিউল হওয়া বন্ধ হলে তা পরদিন সকালেই ধরা পড়ে, রিস্টোরের দরকার হওয়ার দিনে নয়।</p><p>Backups ভিউ প্রতি ঘণ্টার মাপ থেকে প্রতিটি ক্লেইমের বৃদ্ধি চার্টে দেখায়। স্ক্রিনশটের দিন সেখানে দেখা যাচ্ছিল ১০টি ক্লেইম জুড়ে ৬৬৪.২ MB ব্যাকআপ ডেটা, ১০টি ব্যাকআপ জব, সবচেয়ে নতুনটি নয় ঘণ্টা আগের আর কোনোটিই ব্যর্থ নয়, আর Schedules ট্যাবে ১৪টি নির্ধারিত জবের সবগুলোর শেষ রান সফল।</p>

### হোস্ট, মেট্রিকস, আর বাড়ির বাইরের একটি অ্যালার্ম

<p>প্রতিটি হোস্ট প্রতি পাঁচ মিনিটে তার লোড, মেমরি, ডিস্ক, তাপমাত্রা আর বিল্ড ক্যাশের খবর দেয়, আর মেট্রিকস স্টোর পাতার ভেতরেই Grafana দিয়ে পড়া যায়। ক্লাস্টারের অ্যালার্ট রুল ফোনে পৌঁছায়, প্রতি ঘণ্টার একটি চেক এমন মার্জ হওয়া ম্যানিফেস্ট ধরে যা কেউ প্রয়োগ করেনি, আর Cloudflare-এর এজে একটি আউটেজ মনিটর প্রতি মিনিটে প্রতিটি পাবলিক সাইট দেখে, কারণ ক্লাস্টারের ভেতরের কোনো মনিটর ক্লাস্টার বন্ধ হলে তা জানাতে পারে না।</p>

### প্রতিটি সুবিধা, একটি মানচিত্রে

<p>হোমল্যাব কী কী দেয়, মেশিন ধরে নয়, ভূমিকা ধরে আঁকা: এজে টানেল আর রাউটার, ক্লাস্টার, ডেটাবেস ও তাদের ভলিউম, কনটেইনার ও npm রেজিস্ট্রি, রানার পুল, রাতের ব্যাকআপ ও তাদের সুইচ, মেট্রিকস স্টোর ও তার অ্যালার্ট, বাড়ির বাইরের আউটেজ মনিটর, আর সবকিছু পড়া কনসোল।</p>

### প্রতিটি পদক্ষেপ লেখা থাকে, প্রত্যাখ্যানও

<p>কনসোল শুধু পড়েই না। মার্জ, রি-রান, ডিসপ্যাচ, রিস্টার্ট, দ্বিতীয় কপি বাড়ানো বা কমানো আর রোলব্যাক, সবই পাতা থেকে চাপা যায়, আর প্রতিটি লেখা হয় একটি দ্বিতীয় পরিচয়ের মাধ্যমে, যার অনুমতিতে সে যে যে অবজেক্ট ছুঁতে পারে তার প্রতিটির নাম আছে, আর সেই একটি কাজের জন্য একটি টোকেন চাওয়া হয়, কাজ শেষে যা ফেলে দেওয়া হয়। কিছু ঘটার আগে কনসোল লাইভ অবস্থা আবার পড়ে আর প্রতিটি পূর্বশর্তকে পাস, সতর্কতা বা প্রত্যাখ্যান হিসেবে তালিকা করে, আর লাইভে ডিপ্লয় হয় এমন যেকোনো কিছু নিশ্চিত করতে তার নাম টাইপ করতে হয়।</p><p>প্রতিটি চাপ একটি সারি হয়ে যায়, যা শুধু যোগ হয়, কখনো বদলায় না: কখন, কোন কাজ, কোন লক্ষ্য, ফলাফল কী আর কী বলা হয়েছিল, প্রত্যাখ্যানসহ, যাতে প্রত্যাখ্যাত কাজের রেকর্ডও সম্পন্ন কাজের রেকর্ডের মতোই পূর্ণ থাকে। একই আর্কাইভ সেটাও রাখে যা GitHub মুছে ফেলে: প্রতিটি রান শেষ হলেই আর্কাইভ হয়, লগের পুরো লেখা এক বছর আর সারিগুলো চিরকাল, GitHub-এর ডিফল্ট নব্বই দিনের সংরক্ষণের বাইরে।</p>

### প্রতিদিনের রক্ষণাবেক্ষণ, আর তার মূল্য

<p>প্রতিদিনের রুটিন ছোট, কারণ বেশিরভাগ কাজ টুলগুলোই করে: সকালে কনসোলের তালিকা, কীসে হাত লাগাতে হবে, প্রতি ঘণ্টার ড্রিফট চেক যা মার্জ হওয়া কিন্তু প্রয়োগ না হওয়া ম্যানিফেস্ট ধরে, রাতে কিছু ব্যর্থ হলে ফোন, ব্যাকআপ সুইচ যা প্রতিটি জব খবর দিলে চুপ থাকে, আর সার্টিফিকেট চেক যা মেয়াদ শেষ হওয়ার কয়েক সপ্তাহ আগে সতর্ক করে। স্ক্রিনশটের দিন সেই তালিকায় ছিল একটি মাত্র বিষয়, সীমা ছাড়িয়ে যাওয়া একটি বিল্ড ক্যাশ যা রাতের পরিষ্কারে আবার ঠিক হয়ে যায়, সেই ধরনের ছোট বিচ্যুতি যা সেদিনই ঠিক করা সস্তা আর এক মাস পরে খুঁজে পাওয়া ব্যয়বহুল।</p><p>সৎ খরচটা হলো, কাউকে এর দায়িত্ব নিতে হয়। পুরো স্ট্যাক নিজের হলে সার্টিফিকেট, ডিস্ক আর আপগ্রেড ভেন্ডরের নয়, স্টুডিওর সমস্যা, আর যে দলে অবকাঠামো দেখাশোনার কেউ নেই, তাদের জন্য ভাড়া নেওয়াই ভালো। কিন্তু যে ফাউন্ডার বা ছোট দল চান তাদের অবকাঠামো এমন কিছু হোক যা তারা বোঝেন, একগাদা ইনভয়েস নয়, আর যে ক্লায়েন্ট প্রমাণ চান যে তারা যে প্ল্যাটফর্মের জন্য টাকা দেন তার প্রতিদিন যত্ন নেওয়া হয়, তাদের জন্য বাস্তবে এটা দেখতে এমনই। <a href="/portfolio/webanion-headless-cms-portfolio-platform-with-mcp-server">Webanion প্ল্যাটফর্ম</a> এর ওপরেই চলে, আর এর ফলে সম্ভব হওয়া কাজগুলোর নিজস্ব গল্প আছে, যেমন <a href="/portfolio/scaling-a-homelab-from-one-node-to-a-multi-node-cluster">কোনো অ্যাপ্লিকেশন না বদলে একটি নোডকে ক্লাস্টারে পরিণত করা</a>, আর <a href="/portfolio/replacing-hosted-ci-with-a-home-runner-pool-and-private-registries">হোস্টেড CI থেকে বিল্ডগুলো ঘরের রানার পুল আর প্রাইভেট রেজিস্ট্রিতে সরিয়ে আনা</a>।</p>

### অ্যালার্ম ফোনে পৌঁছায়, আর অ্যালার্মের ওপরও নজর থাকে

<p>সমস্যা ধরা পড়ার জন্য কাউকে ড্যাশবোর্ডের দিকে তাকিয়ে থাকতে হয় না: একটি অ্যালার্ম Telegram, Discord আর ntfy-তে ফোনে পৌঁছায়, Telegram-এ আউটেজ মনিটর আর ক্লাস্টারের নিজের অ্যালার্ট রুল থেকে, Discord আর ntfy-তে মনিটরের পাহারাদারের কাছ থেকে। মনিটরকেও আবার বাড়ির বাইরে থেকে পাহারা দেওয়া হয়, তাই ৩০ সেপ্টেম্বর যখন সেটি চার মিনিটের জন্য চুপ হয়ে গেল, সেই নীরবতাই অ্যালার্ম হয়ে এল, বন্ধ আর তারপর আবার চালু, একসঙ্গে Discord আর ntfy-তে।</p>
