মূল কনটেন্টে যান
The homelab console's overview

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

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

KubernetesTraefikCloudflareGoReact.jsTypeScriptSQLiteVictoriaMetricsGrafanaPostgreSQLMongoDBzotVerdacciosystemdLinuxGitHub Actions
Md Moniruzzaman Image

Md Moniruzzaman

পুরো গল্পটা

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

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

যে স্টুডিও ক্লায়েন্টদের জন্য প্রোডাক্ট বানায়, সে নিজের জন্যও অবাক করার মতো অনেক কিছু চালায়। Webanion তার সব ভাষায় ওয়েবসাইট চালায়, তার পেছনের CMS, পাবলিক ও প্রাইভেট MCP সার্ভার, যা দিয়ে AI অ্যাসিস্ট্যান্ট সেই কনটেন্ট পড়তে ও সামলাতে পারে, আর ক্লায়েন্টদের জন্য বানানো ও দেখাশোনা করা প্ল্যাটফর্মগুলো, যার মধ্যে আছে একটি ফিন্যান্স প্ল্যাটফর্ম, একটি বুকিং প্ল্যাটফর্ম, একটি লেজার অ্যাপ আর একটি গবেষণা দলের সাইট। প্রতিটির দরকার চলার একটি জায়গা, ব্যাকআপ রাখা একটি ডেটাবেস, সময়মতো নবায়ন হওয়া একটি সার্টিফিকেট, আর এমন কেউ যে কিছু ভাঙলে টের পায়। প্রতিটি অংশ আলাদা ভেন্ডরের কাছ থেকে ভাড়া নেওয়া মানে প্রতি ভেন্ডরে একটি বিল, একটি ড্যাশবোর্ড আর একটি অন্ধ কোণ, আর এমন কোনো একক জায়গা নেই যা একটি কাজের দিন ঠিক করে দেওয়া তিনটি প্রশ্নের উত্তর দেয়: কী চলছে, সব ঠিক আছে কি না, আর আজ কীসে মনোযোগ দরকার।

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

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

সকালে সবার আগে খোলা হয় এই কনসোল, আর মার্জের সময় এটিই খোলা থাকে। এর ওভারভিউ একসঙ্গে ক্লাস্টার, GitHub, রেজিস্ট্রি আর হোস্টগুলো পড়ে: কয়টি নোড প্রস্তুত, ওয়ার্কলোড ও পড সুস্থ কি না, কোন পুল রিকোয়েস্ট অপেক্ষায় আর কোনগুলো মার্জ হয়েছে, সাম্প্রতিক রানের কত অংশ পাস করেছে, GitHub রিকোয়েস্টের বাজেট কতটা বাকি, প্রতিটি হোস্টের লোড, মেমরি, ডিস্ক, তাপমাত্রা আর বিল্ড ক্যাশ, সর্বশেষ নেওয়া পদক্ষেপ, আর আজ কীসে হাত লাগাতে হবে তার একটি ছোট তালিকা, সবচেয়ে গুরুতরটি আগে।

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

Brand colour backdrop
The console's overview: six summary cards for nodes ready, workloads, pods healthy, pull requests, runs passing and GitHub requests left, each host's load, memory, disk, temperature and build cache, the latest actions and the list of what needs attention
The same overview on a phone: nodes ready, workloads, pods healthy, pull requests and runs passing as stacked cards

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

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

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

Brand colour backdrop
The delivery board: two pending pull requests, nothing running and thirteen done, each done card with the image tag it deployed, above the table of what merging does per repository
A pending pull request card: checks not fetched, mergeable clean, merging deploys live, and the Merge button

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

ক্লাস্টারের প্রতিটি ডেটাবেস প্রতি রাতে ডাম্প হয়, পনেরো মিনিট ব্যবধানে, যাতে দুটি একসঙ্গে শুরু না হয়, আর প্রতিটি ডাম্পের পাশে প্রতিটি টেবিলের সারির সংখ্যা লেখা থাকে, রিস্টোর প্রুফ কোনো রানকে একবার ব্যবহারের namespace-এ ফিরিয়ে আনার সময় যা মিলিয়ে দেখে। কনসোলের নিজের আর্কাইভ, একমাত্র স্টোর যা আর কিছু দিয়ে আবার বানানো যায় না, SQLite-এর অনলাইন ব্যাকআপ দিয়ে কপি হয়, আর রাখার আগে তার অখণ্ডতা ও সারির সংখ্যা যাচাই হয়। যাচাই করা রানের পর প্রতিটি জব বাড়ির বাইরের একটি ডেড ম্যান'স সুইচে সংকেত পাঠায়, ফলে কোনো জব ব্যর্থ হলে, আটকে গেলে বা শিডিউল হওয়া বন্ধ হলে তা পরদিন সকালেই ধরা পড়ে, রিস্টোরের দরকার হওয়ার দিনে নয়।

Backups ভিউ প্রতি ঘণ্টার মাপ থেকে প্রতিটি ক্লেইমের বৃদ্ধি চার্টে দেখায়। স্ক্রিনশটের দিন সেখানে দেখা যাচ্ছিল ১০টি ক্লেইম জুড়ে ৬৬৪.২ MB ব্যাকআপ ডেটা, ১০টি ব্যাকআপ জব, সবচেয়ে নতুনটি নয় ঘণ্টা আগের আর কোনোটিই ব্যর্থ নয়, আর Schedules ট্যাবে ১৪টি নির্ধারিত জবের সবগুলোর শেষ রান সফল।

Brand colour backdrop
The Backups view: 664.2 MB of backup data over ten claims, grown 373.3 MB in a week, the newest backup nine hours old across ten jobs, no failing jobs, and a growth chart for every backup claim
The Schedules tab: fourteen scheduled jobs, the nightly backups among them, each with its schedule, last run and a succeeded badge

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

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

The always-on host's readings: CPU load with its last twenty-four hours, memory, disk, temperature, and a build cache over its cap
Metrics from the cluster's own store through Grafana, framed in the console: which node answered scrapes over six hours, CPU busy and load per node, the always-on node steady all day and the build machine silent apart from two spikes

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

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

Brand colour backdrop
Drawn map of the homelab's facilities by role: Cloudflare tunnels, Access and an outage monitor at the edge, the router, the cluster's always-on server and build machine, and outside the house the backup and alert switches, GitHub and a phone

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

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

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

Brand colour backdrop
The audit trail, refusals included: twenty-four ok, one refused, none failed and none unanswered, and a band of merges, re-runs and restarts, one merge refused because its name was not typed, and two scale actions on the website's second copy
The Needs you list with its one item: a build cache over its cap that the nightly prune brings back

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

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

সৎ খরচটা হলো, কাউকে এর দায়িত্ব নিতে হয়। পুরো স্ট্যাক নিজের হলে সার্টিফিকেট, ডিস্ক আর আপগ্রেড ভেন্ডরের নয়, স্টুডিওর সমস্যা, আর যে দলে অবকাঠামো দেখাশোনার কেউ নেই, তাদের জন্য ভাড়া নেওয়াই ভালো। কিন্তু যে ফাউন্ডার বা ছোট দল চান তাদের অবকাঠামো এমন কিছু হোক যা তারা বোঝেন, একগাদা ইনভয়েস নয়, আর যে ক্লায়েন্ট প্রমাণ চান যে তারা যে প্ল্যাটফর্মের জন্য টাকা দেন তার প্রতিদিন যত্ন নেওয়া হয়, তাদের জন্য বাস্তবে এটা দেখতে এমনই। Webanion প্ল্যাটফর্ম এর ওপরেই চলে, আর এর ফলে সম্ভব হওয়া কাজগুলোর নিজস্ব গল্প আছে, যেমন কোনো অ্যাপ্লিকেশন না বদলে একটি নোডকে ক্লাস্টারে পরিণত করা, আর হোস্টেড CI থেকে বিল্ডগুলো ঘরের রানার পুল আর প্রাইভেট রেজিস্ট্রিতে সরিয়ে আনা।

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

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

ntfy push notifications on a phone: the outage monitor's watcher reports it down at 9:16 PM on 30 September, its success signal past the grace time, then up at 9:20 PM after four minutes and eleven seconds
A Discord channel on a phone with the same event: the outage monitor reported down when its success signal missed the grace time, then up again, the downtime four minutes and eleven seconds
A Telegram alert on a phone from the cluster's own rules: the drift check firing because a namespace manifest has not matched the repository for two hours

আপনার আরও ভালো লাগতে পারে

Webanion brand logo

হোস্টেড CI যখন সবচেয়ে ধীর ধাপ হয়ে উঠল, বিল্ডগুলো ঘরে ফিরল

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

Md Moniruzzaman Image

Md Moniruzzaman

সেপ্ট 24, 2026

27 Pearls App Logo

27 Pearls - মোবাইল রিলিজ এবং স্টোর সাবমিশন

একটি তৈরি 27 Pearls অ্যাপ এক সপ্তাহের এনগেজমেন্টের মধ্যেই App Store ও Google Play-তে অনুমোদিত লিস্টিং হয়ে ওঠে, কোনো দফায় প্রত্যাখ্যান ছাড়াই। সেই সপ্তাহে ছিল রিলিজ বিল্ড ও সাইনিং, শিক্ষার্থীর সুবিধা ঘিরে লেখা লিস্টিংয়ের কপি, প্রয়োজনীয় প্রতিটি ডিভাইস সাইজের স্ক্রিনশট, অ্যাপ যা সংগ্রহ করে তার সঙ্গে মিলিয়ে প্রাইভেসি ঘোষণা, আর রিভিউয়ারের জন্য কাজ করা একটি অ্যাকাউন্ট। অ্যাপটি আজও Google Play-তে আছে।

Md Moniruzzaman Image

Md Moniruzzaman

মে 05, 2023

Dr. Kris Valenza
fully booked brand logo

Fully Booked - শূন্য ডাউনটাইমে সেলফ হোস্টেড কুবারনেটিসে মাইগ্রেশন

Fully Booked চলত ম্যানেজড ক্লাউড অবকাঠামোয়, যার বিল প্রতি মাসে বাড়ত আর পুরো স্ট্যাকের মালিকানা কারও হাতে ছিল না। আমরা পুরো প্ল্যাটফর্মটি সেলফ হোস্টেড কুবারনেটিস ক্লাস্টারে সরিয়ে এনেছি, ব্যবহারকারীদের জন্য এক মিনিটও ডাউনটাইম ছাড়া। কাটওভারে ছিল DNS, ইনগ্রেস, ডেটাবেস এবং রিলিজ পাইপলাইন, এমনভাবে সাজানো যে প্রতিটি স্তর নতুন ক্লাস্টারে প্রমাণিত হওয়ার পরেই ট্রাফিক সরানো হয়েছে। সেই সপ্তাহে অ্যাপ ব্যবহারকারী কেউ টের পাননি কিছু ঘটেছে, আর সেটাই ছিল উদ্দেশ্য। মাসিক বিল হয়ে গেল নিজস্ব হার্ডওয়্যার, এবং এখন সেই ক্লাস্টারই প্ল্যাটফর্মের সাপ্তাহিক রিলিজ বহন করে।

Md Moniruzzaman Image

Md Moniruzzaman

জুন 23, 2026

+1
Dominic Dormer
Read the Md Moniruzzaman blog

ব্লগটি প্রোডাকশনের ময়দান থেকে লেখা নোট: আর্কিটেকচারের সিদ্ধান্ত, বাস্তব ব্যবহারকারীর মুখোমুখি টিকে যাওয়া AI সিস্টেম, আর নিজের খরচ নিজে তোলা অবকাঠামো। কাজ থেকে লেখা, কাজ নিয়ে গল্প নয়।