Docker، Kubernetes، اور Ansible کے ساتھ مقامی DevOps HomeLab کیسے بنایا جائے۔

جب میں نے پہلی بار DevOps ٹیوٹوریل کی پیروی کرنے کی کوشش کی تو مجھے AWS کے لیے سائن اپ کرنے کا اشارہ کیا گیا۔

میں نے کیا۔ میں نے ایک EC2 مثال تیار کی، اس پر ایک گھنٹے تک کام کیا، اور پھر اسے بند کرنا بھول گیا۔ ایک ہفتہ بعد مجھے ایک مشین کا $34 بل موصول ہوا جس نے کچھ نہیں کیا۔

یہ آخری بار تھا جب میں نے کسی اور کے بنیادی ڈھانچے پر مشق کی۔

اس گائیڈ میں موجود ہر چیز آپ کے لیپ ٹاپ پر چلتی ہے۔ کوئی کلاؤڈ اکاؤنٹس نہیں، کوئی کریڈٹ کارڈ نہیں، مہینے کے آخر کے بل نہیں۔ آخر کار، آپ شروع سے ہی ملٹی سرور ماحول کو گھماؤ، جواب دینے والے کا استعمال کرتے ہوئے اسے خود بخود ترتیب دینے، آپ کی لکھی ہوئی سائٹوں کو پیش کرنے، اور جان بوجھ کر کسی چیز کے تباہ ہونے پر کیا ٹوٹ جاتا ہے اس کی تشخیص کر سکیں گے۔

آخری حصہ وہ ہے جہاں حقیقی تعلیم ہوتی ہے۔

شرطیں

شروع کرنے سے پہلے، درج ذیل کو چیک کریں:

  • کم از کم 8 جی بی ریم والا لیپ ٹاپ (16 جی بی بہتر ہے)

  • کم از کم 20 GB مفت ڈسک کی جگہ

  • ونڈوز، میک او ایس، یا لینکس آپریٹنگ سسٹم

  • آپ کے کمپیوٹر تک ایڈمنسٹریٹر کی رسائی

  • ورچوئلائزیشن BIOS/UEFI سیٹنگز میں فعال ہے۔

  • ابتدائی ڈاؤن لوڈ کے لیے مستحکم انٹرنیٹ کنیکشن

علم اور آرام کی سطح:

  • آپ کو ٹرمینل کے استعمال سے واقف ہونا چاہئے (کمانڈز چلانا، ڈائریکٹریز کو تبدیل کرنا، اور اپنے پسندیدہ ایڈیٹر کا استعمال کرتے ہوئے چھوٹی ٹیکسٹ فائلوں میں ترمیم کرنا)۔

  • Docker، Kubernetes، Vagrant، یا Ansible کے ساتھ کسی پیشگی تجربے کی ضرورت نہیں ہے، حالانکہ "سرور”، "SSH”، اور "پورٹ” جیسے تصورات کا بنیادی علم مددگار ہے۔ یہ گائیڈ ان کا تعارف کراتی ہے جیسا کہ یہ چلتا ہے۔

اگر آپ گھبرائے بغیر قدم بہ قدم ہدایات پر عمل کر سکتے ہیں اور خرابی کا آؤٹ پٹ پڑھ سکتے ہیں، تو آپ تیار ہیں۔

انڈیکس

  1. DevOps کیا ہے؟

  2. میں ایک مقامی لیب کیوں بناؤں؟

  3. ڈوکر کو کیسے ترتیب دیا جائے۔

  4. کبرنیٹس کو کیسے ترتیب دیا جائے۔

  5. kubectl کو انسٹال کرنے کا طریقہ

  6. آوارہ گردی کو کیسے ترتیب دیا جائے۔

  7. جوابی انسٹال کرنے کا طریقہ

  8. اپنا پہلا DevOps پروجیکٹ کیسے بنائیں

  9. جان بوجھ کر لیب میں خلل ڈالنے کا طریقہ

  10. اب آپ کیا کر سکتے ہیں۔

DevOps کیا ہے؟

DevOps سافٹ ویئر ڈویلپمنٹ ٹیموں اور IT آپریشنز ٹیموں کے درمیان دیواروں کو توڑنے کا عمل ہے۔

عام طور پر، ڈویلپرز کوڈ لکھتے ہیں اور اسے تعیناتی اور دیکھ بھال کے لیے آپریشن ٹیم کے حوالے کرتے ہیں۔ یہ ہینڈ آف تاخیر، غلط فہمیوں اور رکاوٹوں کا سبب بنتے ہیں۔ DevOps ہوتا ہے جب دو ٹیمیں شروع سے مل کر کام کرتی ہیں۔

اس گائیڈ میں ہم جو ٹولز انسٹال کریں گے ان میں سے ہر ایک اس عمل کے ایک مخصوص حصے کو ایڈریس کرتا ہے۔

  • ڈاکر اپنی درخواست اور اس کی ضرورت کی ہر چیز کو ایک پورٹیبل کنٹینر میں پیک کریں جو تمام سسٹمز پر اسی طرح چلتا ہے۔

  • کوبرنیٹس پیمانے پر متعدد کنٹینرز کا نظم کریں اور خود بخود دوبارہ شروع، نیٹ ورکنگ، اور لوڈ بیلنسنگ کو ہینڈل کریں۔

  • آوارہ ورچوئل مشین ماحول بنائیں اور ان کا نظم کریں تاکہ آپ کی پوری ٹیم ہمیشہ ایک جیسی ترتیبات کے ساتھ کام کرے۔

  • جوابدہ ہر ایک سرور کے لیے اسکرپٹ لکھے بغیر متعدد سرورز پر بار بار کنفیگریشن کے کاموں کو خودکار بنائیں۔

میں ایک مقامی لیب کیوں بناؤں؟

مقامی لیبز بغیر کسی لاگت یا خطرے کے عمل کو توڑنے، ٹھیک کرنے اور سیکھنے کے لیے ایک محفوظ جگہ فراہم کرتی ہیں۔

مجھے اپنے مقامی سیٹ اپ کے ساتھ کیا ملتا ہے:

  • اس کی قیمت بالکل بھی نہیں ہے۔ کوئی کلاؤڈ بل، سرپرائز چارجز، اور کسی کریڈٹ کارڈ کی ضرورت نہیں۔

  • آف لائن کام کرتا ہے۔ ابتدائی سیٹ اپ کے بعد، انٹرنیٹ کے بغیر کہیں بھی مشق کریں۔

  • جملہ حقوق محفوظ ہیں۔ OS سے لے کر ایپلیکیشنز تک تمام پرتوں کا نظم کرتا ہے۔

  • محفوظ تجربہ۔ چیزوں کو توڑنے کے لئے آزاد محسوس کریں۔ یہاں ایسی کوئی چیز نہیں ہے جو پیداوار کو متاثر کرتی ہو۔

  • تیز رائے۔ اپنے کلاؤڈ وسائل کے آن لائن آنے کا انتظار نہ کریں۔ سب کچھ آپ کے کمپیوٹر پر چلتا ہے۔

منفی پہلو وسائل کی حدود ہیں۔ آپ کے لیپ ٹاپ کا CPU اور RAM سب سے اوپر ہے۔ بڑے پیمانے پر تعیناتیوں کو نقل نہیں کیا جا سکتا، اور کچھ کلاؤڈ مقامی خدمات، جیسے AWS Lambda یا S3، کے براہ راست مقامی ہم منصب نہیں ہوتے ہیں۔ لیکن جب بنیادی DevOps ورک فلو سیکھنے کی بات آتی ہے تو اس میں سے کوئی بھی فرق نہیں پڑتا ہے۔

ڈوکر کو کیسے ترتیب دیا جائے۔

ڈوکر اس لیب کی بنیاد ہے۔ اس گائیڈ کے دیگر تمام ٹولز اندر چلتے ہیں یا Docker کنٹینرز کے ساتھ کام کرتے ہیں۔

ونڈوز پر ڈوکر انسٹال کرنے کا طریقہ

سب سے پہلے، BIOS میں ورچوئلائزیشن کو فعال کریں۔

  1. اپنے کمپیوٹر کو دوبارہ شروع کریں اور BIOS/UEFI سیٹنگز درج کریں۔ چابیاں عام طور پر F2، F10، Del، یا Esc بوٹ کے دوران ہوتی ہیں۔

  2. اپنی ورچوئلائزیشن کی ترتیبات تلاش کریں۔ عام طور پر Intel VT-x، AMD-V، SVM، یا ورچوئلائزیشن ٹیکنالوجی کے بطور درج کیا جاتا ہے۔

  3. چالو کریں، تبدیلیاں محفوظ کریں اور باہر نکلیں۔

پھر ڈوکر ڈیسک ٹاپ انسٹال کریں۔

  1. ڈوکر کی آفیشل ویب سائٹ سے ڈوکر ڈیسک ٹاپ ڈاؤن لوڈ کریں۔

  2. انسٹالر چلائیں اور اشارے پر عمل کریں۔

  3. درخواست پر WSL 2 (ونڈوز سب سسٹم فار لینکس) کو فعال کرتا ہے۔

  4. اپنے کمپیوٹر کو دوبارہ شروع کریں۔

  5. اسٹارٹ مینو سے ڈوکر ڈیسک ٹاپ کھولیں اور انتظار کریں جب تک کہ ٹاسک بار میں موجود وہیل آئیکن اینیمیشن بند نہ کر دے۔

ٹربل شوٹنگ: اگر ڈوکر شروع نہیں ہوتا ہے، تو چیک کریں کہ آیا پاور شیل میں بطور ایڈمنسٹریٹر درج ذیل کو چلا کر ورچوئلائزیشن فعال ہے:

systeminfo | findstr "Hyper-V Requirements"

آپ کو ہر چیز کے لیے "ہاں” دیکھنا چاہیے۔ اگر نہیں، تو BIOS کی ترتیبات پر دوبارہ جائیں۔

میک پر ڈوکر کو کیسے انسٹال کریں۔

  1. ڈوکر ویب سائٹ سے میک کے لیے ڈوکر ڈیسک ٹاپ ڈاؤن لوڈ کریں۔

  2. ڈاؤن لوڈ کی گئی فائل کو کھولیں۔ .dmg فائل ڈاؤن لوڈ کریں اور ڈوکر کو اپنے ایپلیکیشن فولڈر میں گھسیٹیں۔

  3. ایپلی کیشنز میں ڈوکر کھولیں۔

  4. اشارہ کرنے پر اپنا پاس ورڈ درج کریں۔

  5. انتظار کریں جب تک کہ مینو بار میں وہیل کا آئیکن حرکت پذیری بند نہ کر دے۔

لینکس پر ڈوکر کو کیسے انسٹال کریں۔

درج ذیل کمانڈز کو ترتیب سے چلائیں:

# Update your package lists
sudo apt-get update

# Install prerequisites
sudo apt-get install apt-transport-https ca-certificates curl software-properties-common

# Add Docker's official GPG key
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

# Add the Docker repository
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"

# Update and install Docker
sudo apt-get update
sudo apt-get install docker-ce

# Start and enable Docker
sudo systemctl start docker
sudo systemctl enable docker

# Add your user to the docker group
sudo usermod -aG docker $USER

لاگ آؤٹ کریں اور گروپ کی تبدیلیوں کو لاگو کرنے کے لیے دوبارہ لاگ ان کریں۔

ڈوکر کی جانچ کیسے کریں۔

درج ذیل کمانڈ کو چلائیں:

docker run hello-world

اگر آپ دیکھتے ہیں "ہیلو فرام ڈوکر!”، ڈوکر صحیح طریقے سے کام کر رہا ہے۔

ڈوکر قائم ہے۔ اگلا، پیمانے پر کنٹینرز کا انتظام کرنے کے لیے Kubernetes انسٹال کریں۔

کبرنیٹس کو کیسے ترتیب دیا جائے۔

Kubernetes پیمانے پر کنٹینرز کا انتظام کرتا ہے۔ مقامی لیبز کے پاس چار اختیارات ہیں: یہاں انتخاب کرنے کا طریقہ ہے:

سامان کے لیے بہترین موزوں ہے۔ رام کی ضرورت ہے۔
منی کیوب ابتدائی سب سے آسان سیٹ اپ، بلٹ ان ڈیش بورڈ 2 GB یا اس سے زیادہ
قسم تیز تر آغاز، CI پائپ لائنز کے اندر اچھی طرح کام کرتا ہے۔ 1 GB یا اس سے زیادہ
k3s چند وسائل کے ساتھ ایک مشین. ہلکا پھلکا لیکن پیداوار کی طرح 512 MB یا اس سے زیادہ
kubeadm جانیں کہ کس طرح ایک کلسٹر اصل میں پیداوار میں بوٹسٹریپ ہوتا ہے۔ 2 جی بی یا اس سے زیادہ فی نوڈ

اگر آپ ابھی شروعات کر رہے ہیں، تو Minikube استعمال کریں۔ اس میں آسان ترین سیٹ اپ اور بصری ڈیش بورڈ ہے جو آپ کو یہ سمجھنے میں مدد کرتا ہے کہ آپ کے کلسٹر کے اندر کیا ہو رہا ہے۔

اگر آپ کے لیپ ٹاپ کی ریم 8GB سے کم ہے تو k3s استعمال کریں۔ یہ Minikube کے مقابلے میں زیادہ مضبوطی سے چلتا ہے اور ایک حقیقی کلسٹر کے قریب برتاؤ کرتا ہے۔

kubeadm صرف اس صورت میں استعمال کریں جب آپ یہ سمجھنا چاہتے ہیں کہ Kubernetes نوڈس کس طرح کلسٹر میں حصہ لیتے ہیں۔ اس کے لیے مزید دستی اقدامات کی ضرورت ہے اور یہ ابتدائی طور پر دوستانہ نہیں ہے۔

Minikube آپ کی نوٹ بک پر سنگل نوڈ Kubernetes کلسٹر بناتا ہے۔

ونڈوز کے لیے:

  1. Minikube انسٹالر کو Minikube کے GitHub ریلیز صفحہ سے ڈاؤن لوڈ کریں۔

  2. پھانسی .exe انسٹالر۔

  3. ایڈمنسٹریٹر کی مراعات کے ساتھ کمانڈ پرامپٹ کھولیں اور Minikube شروع کریں۔

minikube start --driver=docker

میک کے لیے:

brew install minikube
minikube start --driver=docker

لینکس کے لیے:

curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64
chmod +x minikube-linux-amd64
sudo mv minikube-linux-amd64 /usr/local/bin/minikube
minikube start --driver=docker

اپنے کلسٹر کی جانچ کریں۔

minikube status
minikube dashboard

k3s Kubernetes کا ہلکا پھلکا ورژن ہے جو ایک منٹ سے بھی کم وقت میں انسٹال ہو جاتا ہے۔ یہ صاف طور پر چلتا ہے اور حقیقی کلسٹر کی طرح برتاؤ کرتا ہے، سادہ ڈیمو ورژن نہیں۔

لینکس (اور میک بذریعہ ملٹی پاس):

curl -sfL https://get.k3s.io | sh -

یہ واحد کمانڈ k3s انسٹال کرتی ہے اور اسے پس منظر میں خود بخود چلاتی ہے۔ یقینی بنائیں کہ یہ چل رہا ہے۔

sudo k3s kubectl get nodes

آپ اسٹیٹس کے ساتھ ایک نوڈ دیکھیں گے۔ Ready.

براہ راست آپ کے میک سے — k3s مقامی طور پر macOS پر نہیں چلتا ہے۔ ملٹی پاس کا استعمال کرتے ہوئے، پہلے ہلکا پھلکا Ubuntu VM گھمائیں اور پھر اس کے اندر انسٹال کمانڈ چلائیں۔

ونڈوز کے لیے – WSL2 (Ubuntu) استعمال کریں، پھر WSL2 ٹرمینل کے اندر انسٹال کمانڈ چلائیں۔

قسم کو کیسے انسٹال کریں (Docker میں Kubernetes)

Kind ایک Docker کنٹینر کے اندر ایک پورا Kubernetes کلسٹر چلاتا ہے۔ یہ Minikube سے زیادہ تیزی سے شروع ہوتا ہے اور اگر آپ بیک وقت متعدد کلسٹر چلانا چاہتے ہیں تو مفید ہے۔

# Mac or Linux
brew install kind

# Windows
choco install kind

ایک کلسٹر بنائیں:

kind create cluster --name my-local-lab

kubeadm انسٹال کرنے کا طریقہ (کلسٹر بوٹسٹریپنگ کو سمجھنے کے لیے)

kubeadm وہ ٹول ہے جسے Kubernetes فزیکل کلسٹر میں نوڈس کو شروع کرنے اور جوائن کرنے کے لیے استعمال کرتا ہے۔ اس خصوصیت کو استعمال کریں جب آپ روزانہ ڈرائیور نہیں ہیں اور یہ سمجھنا چاہتے ہیں کہ ہڈ کے نیچے کیا ہو رہا ہے۔

آپ کو کم از کم دو مشینوں (یا VMs) کی ضرورت ہوگی۔ سیٹ اپ اوپر کے اختیارات سے زیادہ پیچیدہ ہے۔ اپنے OS کے لیے آفیشل kubeadm انسٹالیشن گائیڈ پر عمل کریں اور پھر اپنے کلسٹر کو شروع کریں۔

sudo kubeadm init --pod-network-cidr=10.244.0.0/16

شروع کرنے کے بعد، ایک کمانڈ کا استعمال کرتے ہوئے ورکر نوڈس میں شامل ہوں جو آؤٹ پٹ کے آخر میں kubeadm پرنٹ کرتا ہے۔

kubectl کو انسٹال کرنے کا طریقہ

kubectl ایک کمانڈ لائن ٹول ہے جسے آپ اپنے Kubernetes کلسٹر کے ساتھ تعامل کرنے کے لیے استعمال کرتے ہیں۔

ونڈوز کے لیے:

ڈاؤن لوڈ کریں kubectl.exe اسے Kubernetes ویب سائٹ پر اپنے PATH میں ڈائرکٹری میں رکھیں۔ یا چاکلیٹی کا استعمال کرتے ہوئے انسٹال کریں۔

choco install kubernetes-cli

میک کے لیے:

brew install kubectl

لینکس کے لیے:

curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"
chmod +x kubectl
sudo mv kubectl /usr/local/bin/kubectl

اسے آزمائیں:

kubectl get pods --all-namespaces

نئے کلسٹر میں، آپ سسٹم پوڈز کو چلتے ہوئے دیکھیں گے۔ kube-system نام کی جگہ – کچھ اس طرح: coredns اور storage-provisioner. یہ متوقع نتیجہ ہے۔ اس کا مطلب ہے کہ کلسٹر اوپر ہے اور kubectl اس کے ساتھ بات چیت کر سکتا ہے۔

Kubernetes چل رہا ہے. اگلا ونڈرر ہے۔ لیکن اس سے پہلے، بنانے کے قابل ایک اہم فرق ہے۔

ڈوکر اور واگرنٹ – وہ ایک ہی چیز نہیں ہیں۔

ڈوکر کنٹینرز بناتا ہے، جو ہلکے وزن کے عمل ہیں جو آپریٹنگ سسٹم کے دانا کو شیئر کرتے ہیں۔ Vagrant ایک مکمل ورچوئل مشین بناتا ہے۔ دوسرے الفاظ میں، یہ ایک الگ تھلگ کمپیوٹر ہے جو لیپ ٹاپ کے اندر اپنا OS چلاتا ہے۔

کنٹینر تیز اور چھوٹے ہیں۔ VMs بھاری ہیں لیکن جسمانی سرورز کی طرح کام کرتے ہیں۔ اس لیب میں، آپ دونوں کو مختلف وجوہات کے لیے استعمال کریں گے۔

آوارہ گردی کو کیسے ترتیب دیا جائے۔

Vagrant آپ کو قابل تولید ورچوئل مشین ماحول بنانے اور ان کا نظم کرنے کی اجازت دیتا ہے۔ ایک ہی لیپ ٹاپ پر متعدد سرور سیٹ اپس کی نقل کرنے کے لیے مثالی۔

ونڈوز پر واگرنٹ کیسے انسٹال کریں۔

  1. پہلے سے طے شدہ اختیارات کے ساتھ VirtualBox ڈاؤن لوڈ اور انسٹال کریں۔

  2. Vagrant ڈاؤن لوڈ اور انسٹال کریں۔

  3. اشارہ کرنے پر اپنے کمپیوٹر کو دوبارہ شروع کریں۔

میمو: VirtualBox اور Hyper-V ونڈوز پر بیک وقت نہیں چل سکتے۔ یقینی بنائیں کہ Hyper-V فعال ہے۔

systeminfo | findstr "Hyper-V"

اگر فعال ہے تو، آپ کے پاس دو اختیارات ہیں: Hyper-V Vagrant فراہم کنندہ پر جائیں یا Hyper-V کو استعمال کرکے غیر فعال کریں:

Disable-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V-All

غیر فعال کریں اور دوبارہ شروع کریں۔

میک اور لینکس پر واگرنٹ کیسے انسٹال کریں۔

میک کے لیے:

  1. ورچوئل باکس ڈاؤن لوڈ اور انسٹال کریں۔

  2. براہ کرم اسے انسٹال کرنے کے بعد کھولیں۔ سسٹم کی ترجیحات> سیکیورٹی اور رازداری> عمومی. ایک پیغام ظاہر ہوتا ہے جس میں کہا گیا ہے کہ اوریکل کا سسٹم سافٹ ویئر بلاک ہے۔ کلک کریں اجازت دیں اپنے میک کو دوبارہ شروع کریں۔ اس قدم کے بغیر، ورچوئل باکس نہیں چلے گا۔

  3. Vagrant ڈاؤن لوڈ اور انسٹال کریں۔

ایپل سلیکون (M1/M2/M3) میکس پر نوٹس: Apple Silicon پر VirtualBox سپورٹ ابھی بھی محدود ہے۔ اگر آپ کے پاس M-series Mac ہے، تو UTM کو اپنے VM فراہم کنندہ کے طور پر استعمال کریں، یا Multipass کا استعمال کریں، جو Apple Silicon پر مقامی طور پر کام کرتا ہے۔

لینکس کے لیے:

  1. ورچوئل باکس ڈاؤن لوڈ اور انسٹال کریں۔

  2. Vagrant ڈاؤن لوڈ اور انسٹال کریں۔

یقینی بنائیں کہ آپ نے دونوں انسٹال کیے ہیں۔

vboxmanage --version
vagrant --version

اپنا پہلا گھومنے پھرنے کا ماحول کیسے بنائیں

اپنے پروجیکٹ کے لیے ایک نئی ڈائرکٹری بنائیں۔ اس کے اندر، درج ذیل فائلیں بنائیں: Vagrantfile اس کے ساتھ:

Vagrant.configure("2") do |config|
  config.vm.box = "ubuntu/focal64"

  # Create a private network between VMs
  config.vm.network "private_network", type: "dhcp"

  # Forward port 8080 on your laptop to port 80 on the VM
  config.vm.network "forwarded_port", guest: 80, host: 8080

  # Install Nginx when the VM starts
  config.vm.provision "shell", inline: <<-SHELL
    apt-get update
    apt-get install -y nginx
    echo "Hello from Vagrant!" > /var/www/html/index.html
  SHELL
end

VM شروع کریں۔

vagrant up

دورہ http://localhost:8080 آپ کے براؤزر میں۔ آپ کو دیکھنا چاہئے "واگرنٹ سے ہیلو!”

اسکرین شاٹ دکھا رہا ہے

ونڈوز پر SSH مسائل کا ازالہ کریں۔

اگر vagrant ssh اگر یہ ناکام ہوجاتا ہے، تو درج ذیل کو آزمائیں:

vagrant ssh -- -v

یا دستی طور پر جڑیں۔

ssh -i .vagrant/machines/default/virtualbox/private_key vagrant@127.0.0.1 -p 2222

انٹرنیٹ کے بغیر مقامی ویگرنٹ باکس کیسے بنایا جائے۔

میمو: زیادہ تر قارئین اس کو چھوڑ سکتے ہیں۔ یہ صرف اس صورت میں کریں جب آپ ابتدائی سیٹ اپ کے بعد مکمل طور پر آف لائن کام کرنا چاہتے ہیں۔

  1. Ubuntu 20.04 LTS اور ڈاؤن لوڈ کریں۔ .iso فائل کو مقامی طور پر محفوظ کریں۔

  2. ورچوئل باکس کھولیں اور ایک نیا VM بنائیں۔ اسے ایک نام دیں۔ ubuntu-devopsقسم: لینکس، ورژن: اوبنٹو (64 بٹ)۔

  3. 2048MB RAM اور 20GB VDI ڈسک مختص کریں۔

  4. منسلک .iso اسٹوریج > آپٹیکل ڈرائیوز میں۔

  5. VM شروع کریں اور Ubuntu انسٹالیشن مکمل کریں۔

  6. انسٹالیشن مکمل ہونے کے بعد، VM کو بند کریں اور چلائیں:

VBoxManage list vms
vagrant package --base "ubuntu-devops" --output ubuntu2004.box
vagrant box add ubuntu2004 ubuntu2004.box

اب آپ کے پاس دوبارہ قابل استعمال مقامی باکس ہے جو انٹرنیٹ کے بغیر بھی کام کرتا ہے۔

آپ ورچوئل مشین چلا سکتے ہیں۔ اندرونی چیزوں کو خودکار کرنے کا جواب یہ ہے:

جوابی انسٹال کرنے کا طریقہ

جوابدہ کنفیگریشن اور سافٹ ویئر انسٹالیشن کو متعدد سرورز پر خودکار کرتا ہے۔ 10 مشینوں میں SSH کرنے اور انہی کمانڈز کو دستی طور پر چلانے کے بجائے، آپ اپنی پلے بک ایک بار لکھتے ہیں اور جواب دینے والا باقی کا خیال رکھتا ہے۔

ونڈوز پر جوابی انسٹال کرنے کا طریقہ

Ansible ونڈوز پر مقامی طور پر نہیں چلتا ہے۔ ونڈوز سب سسٹم فار لینکس (WSL) کے ذریعے استعمال کیا جانا چاہیے۔

  1. پاور شیل کو بطور ایڈمنسٹریٹر کھولیں اور WSL کو فعال کریں۔
dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
  1. اپنے کمپیوٹر کو دوبارہ شروع کریں۔

  2. مائیکروسافٹ اسٹور سے اوبنٹو انسٹال کریں۔

  3. Ubuntu کھولیں اور Ansible انسٹال کریں۔

sudo apt update
sudo apt install software-properties-common
sudo apt-add-repository --yes --update ppa:ansible/ansible
sudo apt install ansible

میک پر Ansible کو کیسے انسٹال کریں۔

brew install ansible

لینکس پر جوابی انسٹال کرنے کا طریقہ

# Ubuntu/Debian
sudo apt update
sudo apt install software-properties-common
sudo apt-add-repository --yes --update ppa:ansible/ansible
sudo apt install ansible

# Red Hat/CentOS
sudo yum install ansible

جوابی ٹیسٹ کرنے کا طریقہ

نامی ایک فائل بنائیں hosts موجودہ ڈائریکٹری میں:

[local]
localhost ansible_connection=local

نامی ایک فائل بنائیں playbook.yml اسی ڈائریکٹری میں:

---
- name: Test playbook
  hosts: local
  tasks:
    - name: Print a message
      debug:
        msg: "Ansible is working!"

پلے بک چلائیں اور لوکل پاس کریں۔ hosts فائل کے ساتھ -i:

ansible-playbook -i hosts playbook.yml

آپ کو پیغام نظر آئے گا "Ansible کام کر رہا ہے!” آؤٹ پٹ میں۔

اسکرین شاٹ جوابی پلے بک کی مکمل ٹرمینل انسٹالیشن دکھا رہا ہے۔

بہت اچھا تمام آلات نصب ہیں۔ اب ہم ان کو ایک ساتھ استعمال کر کے کچھ حقیقی بنائیں گے۔

اپنا پہلا DevOps پروجیکٹ کیسے بنائیں

آپ اس لیب کا مکمل کوڈ اس ذخیرہ میں تلاش کر سکتے ہیں: https://github.com/Osomudeya/homelab-demo-article

اب آئیے ان ٹولز کو ایک پراجیکٹ میں اکٹھا کرتے ہیں۔ ہر ٹول ایک حقیقی کام کرتا ہے اور آپ کو کچھ بھی مجبور نہیں کیا جاتا ہے۔

شروع کرنے سے پہلے، اس پروجیکٹ کے لیے ایک نئی ڈائرکٹری بنائیں۔ اسے اس ڈائرکٹری کے اندر سے نہ چلائیں جو آپ پہلے Vagrant ٹیسٹ کرنے کے لیے استعمال کرتے تھے۔ یہاں Vagrantfile مختلف ہے اور متصادم ہو سکتی ہے۔

آپ دو VM ماحول بنائیں گے۔ ایک مشین ڈوکر کنٹینر کے اندر براہ راست لکھے ہوئے ویب صفحات پیش کرتی ہے، اور دوسری مشین ماریا ڈی بی ڈیٹا بیس کو چلاتی ہے۔ Vagrant مشین بناتا ہے اور Ansible اسے ترتیب دیتا ہے۔ آخری صفحہ جو آپ دیکھتے ہیں وہ آپ کا صفحہ ہے۔

مرحلہ 1: پروجیکٹ ڈائرکٹری بنائیں

mkdir devops-lab-project && cd devops-lab-project

مرحلہ 2: سائٹ کا مواد لکھیں۔

نامی ایک فائل بنائیں index.html یہ آپ کی پروجیکٹ ڈائرکٹری میں ہے۔ اس صفحے پر جو چاہیں لکھیں۔ یہ وہی ہے جو آپ اپنے براؤزر میں آخر میں دیکھتے ہیں۔



  My DevOps Lab
  
    
    

Provisioned by Vagrant. Configured by Ansible. Served by Docker.

Built on a laptop. No cloud account needed.

متن کو اپنی پسند کے مطابق تبدیل کریں۔ یہ آپ کا صفحہ ہے۔

مرحلہ 3: واگرنٹ فائل بنائیں

نامی ایک فائل بنائیں Vagrantfile اسی ڈائریکٹری میں:

Vagrant.configure("2") do |config|
  config.vm.box = "ubuntu/focal64"

  config.vm.define "web" do |web|
    web.vm.network "private_network", ip: "192.168.33.10"
    web.vm.network "forwarded_port", guest: 80, host: 8080
  end

  config.vm.define "db" do |db|
    db.vm.network "private_network", ip: "192.168.33.11"
  end
end

مرحلہ 4: ورچوئل مشین شروع کریں۔

vagrant up

پہلی دوڑ میں ubuntu/focal64 باکس تقریباً 500MB ہے۔

اسکرین شاٹ ٹرمینل میں ورچوئل باکس کی تنصیب کا عمل دکھا رہا ہے۔

کنکشن کی حالت پر منحصر ہے، اس میں 10 سے 30 منٹ لگ سکتے ہیں۔ چونکہ باکس کو مقامی طور پر کیش کیا جاتا ہے، اس کے بعد کے رنز بہت تیز ہوں گے۔

اسکرین شاٹ دو ورچوئل باکس سرور دکھا رہا ہے۔

مرحلہ 5: جوابدہ انوینٹری بنائیں

نامی ایک فائل بنائیں inventory اسی ڈائریکٹری میں:

[webservers]
192.168.33.10 ansible_user=vagrant ansible_ssh_private_key_file=.vagrant/machines/web/virtualbox/private_key

[dbservers]
192.168.33.11 ansible_user=vagrant ansible_ssh_private_key_file=.vagrant/machines/db/virtualbox/private_key

Ansible Vagrant کے ذریعہ تیار کردہ نجی کلید کا استعمال کرتا ہے، لہذا vagrant صارف اس لیب کے لیے میزبان کلید کی توثیق اس وقت بند کر دی گئی تھی: ansible.cfg (اگلا مرحلہ)، انوینٹری میں نہیں۔

مرحلہ 6: جوابدہ کنفیگریشن فائل بنائیں

پلے بک چلانے سے پہلے ansible.cfg اسی ڈائریکٹری میں:

[defaults]
inventory = inventory
host_key_checking = False

انوینٹری لائن Ansible کو بتاتی ہے کہ اس فولڈر میں انوینٹری فائلوں کو بطور ڈیفالٹ استعمال کریں۔ host_key_checking = False Ansible کو کہتا ہے کہ Vagrant VM سے جڑتے وقت SSH میزبان کلید کو چیک نہ کریں۔ اس کے بغیر، Ansible میزبان کلید کی تصدیق میں ناکامی کی غلطی کے ساتھ پہلے کنکشن پر ناکام ہو جائے گا کیونکہ VM کی کلید ابھی تک Known_hosts فائل میں نہیں ہے۔

یہ ترتیبات صرف مقامی لیبز پر لاگو ہوتی ہیں۔ پروڈکشن سسٹمز پر host_key_checking = False استعمال نہ کریں۔

مرحلہ 7: جوابدہ پلے بک بنائیں

نامی ایک فائل بنائیں playbook.yml:

---
- name: Configure web server
  hosts: webservers
  become: yes
  tasks:

    - name: Install Docker
      apt:
        name: docker.io
        state: present
        update_cache: yes

    - name: Start Docker service
      service:
        name: docker
        state: started
        enabled: yes

    # Create the directory that will hold your site content
    - name: Create web content directory
      file:
        path: /var/www/html
        state: directory
        mode: '0755'

    # This copies your index.html from your laptop into the VM
    - name: Copy site content to web server
      copy:
        src: index.html
        dest: /var/www/html/index.html

    # This mounts that file into the Nginx container so it serves your page
    # The -v flag connects /var/www/html on the VM to /usr/share/nginx/html inside the container
    - name: Run Nginx serving your content
      shell: |
        docker rm -f webapp 2>/dev/null || true
        docker run -d --name webapp --restart always -p 80:80 
          -v /var/www/html:/usr/share/nginx/html:ro nginx

- name: Configure database server
  hosts: dbservers
  become: yes
  tasks:

    # Hash sum mismatch on .deb downloads is often stale lists, a flaky mirror, or apt pipelining
    # behind NAT; fresh indices + Pipeline-Depth 0 usually fixes it on lab VMs.
    - name: Disable apt HTTP pipelining (mirror/proxy hash mismatch workaround)
      copy:
        dest: /etc/apt/apt.conf.d/99disable-pipelining
        content: 'Acquire::http::Pipeline-Depth "0";'
        mode: "0644"

    - name: Clear apt package index cache
      shell: apt-get clean && rm -rf /var/lib/apt/lists/* /var/lib/apt/lists/auxfiles/*
      changed_when: true

    - name: Update apt cache after reset
      apt:
        update_cache: yes

    - name: Install MariaDB
      apt:
        name: mariadb-server
        state: present
        update_cache: no

    - name: Start MariaDB service
      service:
        name: mariadb
        state: started
        enabled: yes

نوٹ کی دو سطریں ہیں:

  • src: index.html — جوابدہ اس فائل کو اسی ڈائرکٹری میں تلاش کرتا ہے جس میں پلے بک ہے۔ یہ وہ فائل ہے جسے آپ نے مرحلہ 2 میں بنایا ہے۔

  • -v /var/www/html:/usr/share/nginx/html:ro – یہ VM کی ڈائرکٹری کو Nginx کنٹینر میں ماؤنٹ کرتا ہے۔ کہ :ro اس کا مطلب ہے صرف پڑھنے کے لیے۔ Nginx اس فولڈر میں ہر چیز کی خدمت کرے گا۔

مرحلہ 8: پلے بک چلائیں۔

ansible-playbook -i inventory playbook.yml

جیسا کہ Ansible ہر VM کو SSH کے ذریعے جوڑتا اور کنفیگر کرتا ہے، آپ کو کام کے لیے مخصوص آؤٹ پٹ نظر آئے گا۔ سبز ok یا پیلا changed ہر کام کے آگے ایک نشانی ہے کہ کام مکمل ہو گیا ہے۔ سرخ fatal اس کا مطلب ہے کہ کچھ ناکام ہو گیا ہے۔

ہر کام کے آگے سبز چیک یا ٹرمینل کے پیلے رنگ کے اسکرین شاٹ کا مطلب ہے کہ کام مکمل ہو گیا ہے۔ سرخ مہلک کا مطلب ہے کچھ ناکام۔

پلے بک پر عمل درآمد کا ٹرمینل اسکرین شاٹ مکمل ہو گیا۔

مرحلہ 9: اپنی ترتیبات چیک کریں۔

کھلا http://localhost:8080 آپ کے براؤزر میں۔ آپ کو مرحلہ 2 میں بنایا گیا صفحہ دیکھنا چاہئے جو ڈوکر کنٹینر کے اندر پیش کیا گیا ہے جو ایک Vagrant VM میں خود بخود Ansible کے ذریعہ ترتیب دیا گیا ہے۔

اگر آپ صفحہ دیکھیں گے تو آپ دیکھیں گے کہ اس لیب کے تمام ٹولز ایک ساتھ کام کر رہے ہیں۔

براؤزر لوکل ہوسٹ دکھا رہا ہے: 8082 عنوان کے ساتھ

مرحلہ 9: صاف کریں (اختیاری)

مکمل ہونے کے بعد:

vagrant destroy -f

یہ دونوں VMs کو بند اور حذف کر دے گا۔ آپ کا Vagrantfile, inventory, playbook.ymlاور index.html ڈسک کو برقرار رکھیں – چلائیں۔ vagrant up پھر ansible-playbook -i inventory playbook.yml آپ اسے کسی بھی وقت واپس لا سکتے ہیں۔

اب جب کہ ہماری ورکشاپ تیار ہے، آئیے اسے صحیح طریقے سے استعمال کرنے کے لیے ڈالیں۔

جان بوجھ کر لیب میں خلل ڈالنے کا طریقہ

لیب ان مراحل پر عمل کر کے چلائے گی: بریکنگ تھنگز آپ کو سکھاتی ہیں کہ واقعی سب کچھ کیسے کام کرتا ہے۔

یہاں پانچ چیزیں ہیں جن کو توڑنا ہے اور جب آپ کرتے ہیں تو کیا دیکھنا ہے۔

بریک 1: کنٹینر کے اندر بنیادی عمل کو کریش کریں (اور دیکھیں کہ آیا یہ واپس آتا ہے)

اس سے صرف یہ ثابت ہوتا ہے کہ کنٹینر کے اندر موجود کوئی چیز (مثلاً ایک اصل بگ یا OOM) مر سکتی ہے، اور Docker مندرجہ ذیل وجوہات کی بنا پر کنٹینر کو دوبارہ شروع کر سکتا ہے: --restart alwaysاور آپ کی سائٹ Ansible کو دوبارہ چلانے کے بغیر واپس آسکتی ہے۔

بعد میں vagrant ssh webہر docker نیچے دی گئی کمانڈ پر عمل کیا جائے گا۔ ویب VM پر. لہذا، اپنے براؤزر کو اپنے لیپ ٹاپ پر چھوڑ دیں۔ http://localhost:8080 (Vagrant میزبان پورٹ کو VM پر پورٹ 80 پر بھیجتا ہے)۔

ٹربل شوٹنگ: جب آپ کی لیب تیار نہیں ہے۔

آپ کے میزبان (لیپ ٹاپ) پر پروجیکٹ فولڈر سے – جب تک کہ اقدامات آپ کو اسے VM پر چلانے کے لیے نہ کہیں:

  • تم بھاگ گئے vagrant destroy -f. چلائیں vagrant upپھر ansible-playbook -i inventory playbook.yml.

  • docker ps دکھائیں webapp لیکن حیثیت ختم کر دی گئی ہے۔ ویب VM میں، چلائیں: sudo docker start webappپھر sudo docker ps دوبارہ

  • موجود نہیں ہے webapp لائن میں کھڑے ہو جاؤ docker ps -a. دوبارہ کریں ansible-playbook -i inventory playbook.yml میزبان سے۔

پلے بک پہلے ہی لاگو ہے اور webapp اگر یہ کام کر رہا ہے، تو اس سیکشن کو چھوڑیں اور نیچے دیئے گئے مراحل کے تحت مرحلہ 1 کے ساتھ شروع کریں (خوشی کا راستہ)۔ (SSH کو نہ چھوڑیں۔ docker ps. چلانے سے پہلے VM شیل کے ساتھ فوری چیک کی ضرورت ہے۔ docker exec.)

قدم (خوشی کا راستہ)

  1. SSH کے ذریعے ویب VM سے جڑیں۔
vagrant ssh web
  1. چیک کریں webapp ہے تسلی:

    sudo docker ps
    
  2. جان بوجھ کر ٹوٹنا: کنٹینر کے مرکزی عمل کو ختم کرتا ہے۔ اندر سے (PID 1)۔ یہ کنٹینر کو اسی طرح ختم کرتا ہے جیسے کریشنگ ایپ۔ docker stop میزبان سے:

sudo docker exec webapp sh -c 'sleep 5 && kill 1'

کہ sleep 5 آپ کو اپنے براؤزر پر سوئچ کرنے کا وقت دیتا ہے۔ کمانڈ چلانے کے فوراً بعد کھولیں یا ریفریش کریں۔ http://localhost:8080. آپ کو ایک سادہ غلطی یا خالی صفحہ موصول ہو سکتا ہے جب کہ پورٹ 80 پر کچھ بھی نہیں سنا جا رہا ہے۔

براؤزر لوکل ہوسٹ پر ERR_CONNECTION_RESET دکھا رہا ہے: Nginx کنٹینر کا عمل ختم ہونے کے بعد 8082

  1. ڈوکر کو کنٹینر کو دوبارہ شروع کرتے ہوئے دیکھیں۔
watch sudo docker ps -a

ٹرمینل چلانے والی واچ ڈوکر PS آٹو ری اسٹارٹ کے بعد 10 سیکنڈ کے لیے ویب ایپ کنٹینر کی حیثیت دکھا رہی ہے۔

چند سیکنڈ میں آپ دیکھ لیں گے۔ باہر نکلیں (137) بن تسلی دوبارہ (باہر نکلنے کے لیے Ctrl+C دبائیں۔ watch.)

5. اپنے براؤزر کو ریفریش کریں۔ فائلیں VM میں ہیں، لہذا آپ کو وہی HTML نظر آئے گا جو پہلے تھا۔ /var/www/html یہ کنٹینر میں نصب ہے. دوبارہ شروع کرنا صرف Nginx عمل کو تبدیل کرتا ہے، ان فائلوں کو نہیں۔

کیوں نہیں docker stop یا docker kill کیا آپ اس ڈیمو کے میزبان ہیں؟

یہ کمانڈز ڈوکر کے API سے گزرتی ہیں۔ بہت سے سیٹ اپ میں (بشمول حالیہ ڈوکر)، ڈوکر اسے ایسے ہینڈل کرتا ہے جیسے آپ نے کنٹینر کو روکنے کا انتخاب کیا ہو (hasBeenManuallyStopped)، اور --restart always آپ کے آنے تک ہم کنٹینر واپس نہیں لا سکتے۔ docker start وہ یا کچھ ایسا ہی۔

کنٹینر کے اندر، PID 1 کو ختم کرنا ایک اندرونی حادثے کی طرح سمجھا جاتا ہے، لہذا پلے بک میں سیٹ ری اسٹارٹ پالیسی وہ پالیسی ہے جس کا آپ یہاں مشاہدہ کر سکتے ہیں۔

Kubernetes تشبیہ: پھلی جن کے کنٹینر کو ختم کیا جا سکتا ہے کوبیلیٹ کے ذریعے دوبارہ شروع کیا جا سکتا ہے حذف شدہ پھلیاں خود واپس نہیں آتیں۔

مشاہدہ کرنے کی چیزیں (چیک کرنے کے لیے تین الگ الگ چیزیں):

  1. ایگزٹ کوڈ: بعد میں kill 1, docker ps -a یہ بتانا چاہیے کہ کنٹینر کوڈ 137 کے ساتھ باہر نکلا ہے۔ اس کا مطلب ہے کہ بنیادی عمل سگنل کے ذریعے ختم ہو گیا تھا۔ یہ اس بات کی تصدیق کرتا ہے کہ کنٹینر اصل میں ختم ہو چکا ہے، نہ صرف لانچ ہوا ہے۔ docker stop میزبان سے۔

  2. براؤزرز کے مقابلے میں تاخیر کو دوبارہ شروع کریں: چیک کریں کہ Exited اور Up کے درمیان کتنے سیکنڈ گزرے ہیں۔ docker ps -a; وہ وقفہ وہی ہے جو ڈوکر لاگو ہوتا ہے۔ --restart always. یہ اس سے الگ ہے جو آپ کا براؤزر دکھاتا ہے۔ براؤزر صرف اس بات کی نشاندہی کرتا ہے کہ آیا کنکشن VM کے پورٹ 80 پر قبول کیے گئے ہیں، لہذا آپ کو خالی وقفوں کے دوران غلطیاں یا خالی صفحات نظر آ سکتے ہیں یہاں تک کہ جب Docker کنٹینر کو دوبارہ شروع کرنے کی کوشش کر رہا ہو۔

  3. بحالی کے بعد مواد: جب اسٹیٹس دوبارہ اپ ہو جائے تو پیج ریفریش کریں۔ آپ کو وہی ایچ ٹی ایم ایل دیکھنا چاہئے جو پہلے تھا۔ اس سے پتہ چلتا ہے کہ مواد VM ڈسک پر ہے (اس کا استعمال کرتے ہوئے کنٹینر میں نصب: -v) فائل کے اندر نہیں جو کنٹینر کا عمل دوبارہ شروع ہونے پر غائب ہو جاتی ہے۔ ایک عمل کو تبدیل کیا گیا تھا، آپ کو نہیں۔ index.html یہ میزبان کے راستے میں ہے۔

وقفہ 2: کنٹینر کے نام کا تنازعہ ہوتا ہے۔

ایک ہی ڈوکر ڈیمون میں (یہاں ایک ویب VM)، کنٹینر کا نام ہے۔ منفرد لیبل. دو چلنے والے (یا رکے ہوئے) کنٹینرز ایک ہی نام کا اشتراک نہیں کر سکتے ہیں۔ اسکرپٹ اور پلے بکس جو آپ ہر وقت استعمال کرتے ہیں۔ docker run --name webapp یہ غلطی آپ کے پہلے اسے صاف کیے بغیر ہوتی رہے گی، اور اس سے آگاہ ہونے سے حقیقی دنیا میں آپ کا وقت بچ جائے گا۔

شروع کرنے سے پہلے: Ansible پہلے ہی ایک نام کے ساتھ ایک کنٹینر بنا چکا ہے۔ webapp.
ویب VM رکھیں (یعنی اب بھی اندرونی)۔ vagrant ssh web) تو نیچے دی گئی کمانڈ پر عمل کیا جائے گا جہاں بھی وہ کنٹینر رہتا ہے۔

اب دوسرا کنٹینر شروع کرنے اور اسے کال کرنے کی کوشش کریں: webapp. تصویر عام ہے۔ nginx یہاں مقصد پر – نقطہ یہ ہے نام کا تنازعہیہ سائٹ کے پورٹ یا والیوم ماؤنٹ سے مماثل نہیں ہے۔

sudo docker run -d --name webapp nginx

یہاں واقعی کیا ہو رہا ہے وہ ہے ڈوکر۔ ایسا نہیں دوسرا کنٹینر بنائیں۔ یہ فوری طور پر ایک غلطی واپس کرتا ہے۔ آپ کی اصل webapp کوئی تبدیلی نہیں ہے۔

یہ نام کی وجہ سے ہے۔ webapp آپ پہلے سے ہی ایک موجودہ کنٹینر کے ساتھ رجسٹرڈ ہیں (خرابی اس کنٹینر کی ID کی نشاندہی کرے گی)۔ ڈوکر نام کو دوبارہ استعمال کرنے سے انکار کرتا ہے جب تک کہ پرانے کنٹینر کو ہٹا یا اس کا نام تبدیل نہ کیا جائے۔

مثال کی خرابی (ID مختلف ہو سکتی ہے):

docker: Error response from daemon: Conflict. The container name "/webapp" is already in use by container "2e48b81a311c4b71cdc1e25e0df75a22296845c7eb53aab82f9ae739fb6410ec". You have to remove (or rename) that container to be able to reuse that name.
See 'docker run --help'.

کنٹینر کا نام تنازعہ ٹرمینل ایرر اسکرین شاٹ

مسئلہ کو حل کرنے کے لیے، اس کا نام ختم کریں اور پھر ایک نیا بنائیں۔ webapp پلے بک کی طرح دوبارہ انجام دیں (پورٹ 80 پر شائع کریں، ایچ ٹی ایم ایل کو ماؤنٹ کریں، پالیسی کو دوبارہ شروع کریں)۔

sudo docker rm -f webapp
sudo docker run -d --name webapp --restart always -p 80:80 
  -v /var/www/html:/usr/share/nginx/html:ro nginx

اس کے بعد آپ کی سائٹ پہلے کی طرح کام کرے (ریفریش http://localhost:8080 آپ کے لیپ ٹاپ پر)۔

مشاہدہ کرنے کی چیزیں:

ڈوکر کے کریش پیغام کو پڑھیں۔ یہ دیکھنا چاہیے کہ اس کا کوئی نام ہے۔ /webapp ایک کنٹینر ID جو پہلے سے استعمال میں ہے اور موجودہ باکس کی طرف اشارہ کرتا ہے۔ پروڈکشن میں، پیٹرن یہ ہوگا کہ "کسی چیز نے پہلے ہی اس نام کا دعوی کیا ہے۔ براہ کرم اسے ہٹا دیں، اس کا نام تبدیل کریں، یا چلانے سے پہلے کوئی مختلف نام منتخب کریں۔ docker run دوبارہ.”

بریک 3: جوابدہ کو VM سے منسلک ہونے سے روکیں۔

Ansible "مربوط ہونے سے قاصر” اور "منسلک لیکن آپریشن منسوخ” کے درمیان فرق کرتا ہے۔ پہلا یہ ہے۔ ناقابل رسائیدوسرا ہے۔ ناکام. یہ جاننا کہ آپ کے پاس کون سا ہے آپ کو یہ جاننے میں مدد ملے گی کہ نیٹ ورک/SSH میں ترمیم کرنی ہے یا پلے بکس/پیکیجز/اجازتیں۔

اپنے لیپ ٹاپ پر پروجیکٹ فولڈر میں ترمیم کریں۔ inventory ویب سرور کا پتہ اس سے تبدیل کریں: 192.168.33.10 آئی پی کے ذریعہ VMs کا استعمال نہیں کرنامثال کے طور پر 192.168.33.99. فائل کو محفوظ کریں۔

[webservers]
192.168.33.99 ansible_user=vagrant ansible_ssh_private_key_file=.vagrant/machines/web/virtualbox/private_key

کام چلانا (میزبان پر اسی پروجیکٹ فولڈر میں):

ansible-playbook -i inventory playbook.yml

اس کے بعد جوابی SSH کرنے کی کوشش کرتا ہے۔ 192.168.33.99. چونکہ لیب نیٹ ورک پر میزبانوں میں سے کوئی بھی جواب نہیں دے رہا ہے (یا SSH کبھی کامیاب نہیں ہوتا ہے)، جوابدہ کام نہیں چلاتا آپ کے ویب سرور پر۔ UNRECHABLE کے ساتھ میزبان کو روکیں۔

fatal: [192.168.33.99]: UNREACHABLE! => {"msg": "Failed to connect to the host via ssh"}

یہ حقیقت پسندانہ ہے کیونکہ اگر IP غلط ہے، VM نہیں چل رہا ہے، فائر وال پورٹ 22 کو مسدود کر رہا ہے، یا نیٹ ورک غلط کنفیگرڈ ہے تو ایک ہی پیغام ظاہر ہوگا۔ عام دھاگہ ہے۔ کوئی کام کرنے والے SSH سیشن نہیں ہیں۔.

اب اسے دوبارہ اندر ڈالنے کا وقت ہے۔ بحال کریں۔ 192.168.33.10 کو inventory اور چلائیں ansible-playbook -i inventory playbook.yml دوبارہ ویب پلے کو VM تک پہنچنا چاہئے اور مکمل ہونا چاہئے (یہ فرض کرتے ہوئے کہ لیب چل رہی ہے)۔

ناقابل رسائی بمقابلہ ناکام – مشاہدہ کرنے کی چیزیں:

  • اگر جوابی پرنٹ ناقابل رسائی ہے، تو آپ کو فرض کرنا چاہیے کہ آپ نے اس میزبان پر SSH نہیں کھولا ہے اور وہاں کوئی جاب نہیں چلائی ہے۔ اپنی پلے بک منطق کو ڈیبگ کرنے سے پہلے، پہلے اپنے کنکشنز (IP، VM برتاؤ، فائر وال، کلیدی راستے) کو ٹھیک کریں۔

  • اگر جوابی پرنٹس ناکام ہو گئے، تو آپ کو فرض کرنا چاہیے کہ SSH نے کام کیا اور آپریشن میں ایک خرابی آئی۔ سب سے پہلے، اصل غیر نیٹ ورک وجہ (پیکیج کا نام، اجازت، نحو) کے لیے جاب آؤٹ پٹ پڑھیں۔

بعد میں، جب آپ ڈیبگ کرتے ہیں، تو آپ کو جوابی کلیدی لفظ پرنٹ شدہ نظر آنا چاہیے۔ ناقابل رسائی رسائی کی طرف اشارہ کرتے ہوئے ناکام جاب آؤٹ پٹ اور اس میزبان پر پہلی ناکام نوکری کی طرف اشارہ کرتا ہے۔

بریک 4: VM کی ڈسک کو بھرنا

ڈیٹا بیس اور دیگر خدمات کو لاگز، عارضی فائلوں اور ڈیٹا کے لیے مفت ڈسک کی ضرورت ہوتی ہے۔ اگر فائل سسٹم بھرا ہوا ہے یا تقریباً بھرا ہوا ہے تو، سروس شروع نہیں ہوسکتی ہے یا رن ٹائم پر ناکام ہوسکتی ہے۔ اس وقفے کے دوران، ہم وہی تشخیصی عادات دیکھیں گے جو ہم حقیقی سرورز پر استعمال کرتے ہیں۔ یعنی، یہ اسپیس کو چیک کرتا ہے اور پھر سروس کے لیے سسٹم اور جرنل آؤٹ پٹ کو پڑھتا ہے۔

نیچے دی گئی تمام کمانڈز پر عمل درآمد کیا جائے گا۔ DB VM پر ~ بعد vagrant ssh db. ماریا ڈی بی کو یہاں پلے بک کے ذریعہ انسٹال کیا گیا تھا۔

آپ کیا کرتے ہیں:

  1. db VM پر ایک شیل کھولیں۔

    vagrant ssh db
    
  2. ڈسک کی جگہ لینے والی کسی چیز کی نقل کرنے کے لیے، ہم زیرو سے بھری ایک بڑی فائل مختص کرتے ہیں (یہاں 1 جی بی)۔

    sudo dd if=/dev/zero of=/tmp/bigfile bs=1M count=1024
    
    df -h
    

    استعمال کریں df -h چیک کریں کہ آپ کا روٹ فائل سسٹم (یا متعلقہ ماؤنٹ) کتنا بھرا ہوا ہے۔ ویگرنٹ ڈسکیں اتنی بڑی ہو سکتی ہیں کہ 1 جی بی تک استعمال میں اضافہ کر سکے۔ اگر ماریا ڈی بی اب بھی شروع ہوتا ہے، تو آپ نے ٹیسٹ کی مشق کر لی ہے۔ آپ ایک مضبوط اثر کے لیے بڑے پیمانے پر دہرا سکتے ہیں۔ count= صرف لیبارٹری میں (منصوبہ بندی کے بغیر جان بوجھ کر پروڈکشن ڈسکوں کو نہ پُر کریں)۔

  3. ماریا ڈی بی کو دوبارہ شروع کریں اور سسٹمڈ سے اسٹیٹس ظاہر کرنے کے لیے کہیں۔

    sudo systemctl restart mariadb
    sudo systemctl status mariadb
    

    اگر ڈسک بھر جاتی ہے تو، دوبارہ شروع کرنا ناکام ہو سکتا ہے یا خدمات ناکام یا نہ چلنے کے طور پر ظاہر ہو سکتی ہیں۔

  4. اگر آپ کو پریشانی ہو رہی ہے تو اپنے ماریا ڈی بی ڈیوائس کے حالیہ لاگز کو پڑھیں۔

    sudo journalctl -u mariadb --no-pager | tail -20
    

    غلطیوں میں اکثر ڈسک، اسپیس، صرف پڑھنے کے لیے فائل سسٹم، یا InnoDB پر لکھنے کے قابل نہ ہونا شامل ہوتا ہے۔

  5. VM کو صاف کریں تاکہ اس کا استعمال جاری رہ سکے۔

    sudo rm /tmp/bigfile
    

    منتخب طور پر چلائیں sudo systemctl restart mariadb یقینی بنائیں کہ یہ ایک بار پھر فعال (چل رہا ہے) ہے۔

مشاہدہ کرنے کی چیزیں:

  • آپ کو استعمال کرنا چاہئے df -h سب سے پہلے، یقینی بنائیں کہ آپ کا فائل سسٹم اصل میں تنگ ہے۔ یہ ڈیٹا بیس پر الزام لگانے سے بچ جائے گا جب آپ کے پاس ڈسک کی کافی جگہ ہوگی۔

  • آپ کو پڑھنا چاہیے systemctl status mariadb systemd چیک کرتا ہے کہ آیا کوئی سروس فعال، ناکام، یا پھڑپھڑا رہی ہے۔

  • آپ کو پڑھنا چاہیے journalctl -u mariadb اگر حالت خراب ہے تو، آپ ماریا ڈی بی یا کرنل (اکثر ڈسک، اسپیس، یا صرف پڑھنے کے لیے فائل سسٹم کا حوالہ دیتے ہیں) میں ناکامی کو کسی خاص غلطی سے جوڑ سکتے ہیں۔ اسپیس + اسٹیٹ + لاگ یہ وہی ترتیب ہے جسے ہم اپنے پروڈکشن سرورز پر استعمال کرتے ہیں۔

بریک پوائنٹ 5: ناکافی وسائل کے ساتھ منی کیوب چلانا

Kubernetes کافی CPU اور میموری والے نوڈس پر Pods کو شیڈول کرتا ہے۔ اگر کلسٹر اپنی جگہ سے زیادہ کی درخواست کرتا ہے، تو کچھ پوڈ باقی رہیں گے۔ زیر التواء اور واقعہ براہ کرم وضاحت کریں کہ کیوں، جیسے سی پی یو کی کمی)۔ یہ اس پوڈ سے مختلف ہے جو شروع ہونے کے بعد کریش ہو جاتی ہے۔

اس کے لیے ایک مقامی کلسٹر کی ضرورت ہے (ہم استعمال کرتے ہیں۔ منی کیوب اس گائیڈ میں) اور kubectl اپنے لیپ ٹاپ پر۔ یہ بندش Vagrant VM استعمال نہیں کرتی ہے۔ اگر آپ نے ابھی تک Minikube انسٹال نہیں کیا ہے، تو پہلے "Kubernetes کو کیسے ترتیب دیا جائے” سیکشن کو مکمل کریں، یا اس وقفے کو اس وقت تک چھوڑ دیں جب تک کہ آپ ایسا نہ کر لیں۔

آپ اسے اپنے آلے پر چلائیں گے۔ میک، لینکس، یا ونڈوز ٹرمینل (میزبان)، اندرونی نہیں۔ vagrant ssh. اگر آپ ابھی بھی VM کے اندر ہیں تو ٹائپ کریں: exit جب تک کہ پرامپٹ میزبان پر دوبارہ ظاہر نہ ہو۔

آپ کیا کرتے ہیں:

  1. Minikube چیک کریں:

    minikube status
    

    اگر روکا گیا تو اسے شروع کریں (ڈوکر ڈرائیور پچھلے حصے سے میل کھاتا ہے)۔

    minikube start --driver=docker
    
  2. بہت ساری نقلوں کے ساتھ ایک تعیناتی بنائیں تاکہ ایک ہی Minikube نوڈ ایک ہی وقت میں تمام نقلیں نہ چلا سکے۔

    kubectl create deployment stress --image=nginx --replicas=20
    
    #watch pods start
    kubectl get pods -w
    

    جب آپ دیکھنا مکمل کر لیں تو Ctrl+C دبائیں۔ کچھ پھلیاں برقرار رہ سکتی ہیں۔ زیر التواء جبکہ دیگر چل رہا ہے.

  3. مندرجہ ذیل زیر التواء پوڈ ناموں میں سے ایک کو منتخب کریں: kubectl get pods اسے چیک کریں:

    kubectl describe pod 
    

    واقعات کے تحت، FailedScheduling اور درج ذیل سے ملتی جلتی لائن تلاش کریں۔

    Warning  FailedScheduling  0/1 nodes are available: 1 Insufficient cpu.
    

    آپ دیکھ سکتے ہیں کم میموری اس کے بجائے، یہ آپ کے کمپیوٹر پر منحصر ہے۔

  4. کلسٹر کو پکڑنے کی اجازت دینے کے لیے نیچے اسکیل کرکے لیب میں ترمیم کریں۔

    kubectl scale deployment stress --replicas=2
    

    مکمل ہونے کے بعد، آپ تعیناتی کو مکمل طور پر حذف کر سکتے ہیں۔ kubectl delete deployment stress.

مشاہدہ کرنے کی چیزیں:

  • آپ دیکھیں گے کہ زیر التواء پوڈز اس وقت تک غیر شیڈول رہیں گے جب تک کہ صلاحیت دستیاب نہ ہو جائے۔ اس کا مطلب ہے کہ شیڈولر نے اسے کہیں نہیں رکھا۔ لفظ تاہم، یہ عام طور پر ہوتا ہے کیونکہ نوڈ میں اس کام کے بوجھ کے لیے کافی CPU یا میموری نہیں ہوتی ہے۔

  • آپ کو پڑھنا چاہیے kubectl describe pod اور تک سکرول کریں۔ واقعہ. کم سی پی یو یا کم میموری جیسے پیغامات کا مطلب یہ ہے کہ کلسٹر میں ریزرو صلاحیت ناکافی ہے، یہ نہیں کہ کنٹینر کی تصویر کی تصویر خراب ہو گئی ہے۔

  • آپ کو اس کا موازنہ Pod سے کرنا چاہیے، جو Running تک پہنچا اور پھر CrashLoopBackOff تک پہنچ گیا۔ اس کا عام طور پر مطلب یہ ہوتا ہے کہ کنٹینر کے اندر عمل ختم ہوتے رہتے ہیں۔ یہ "کہیں نہیں چلانے” کا مسئلہ نہیں ہے بلکہ ایپلیکیشن یا کنفیگریشن کا مسئلہ ہے۔

اب آپ کیا کر سکتے ہیں۔

اس ٹیوٹوریل میں ہم صرف ٹولز کو انسٹال نہیں کرتے ہیں۔ آپ نے بھی استعمال کیا۔

اب آپ ایک فائل سے دو سرور اسپن کر سکتے ہیں۔ آپ سافٹ ویئر انسٹال کرنے کے لیے پلے بکس لکھ سکتے ہیں اور مشین کو دستی طور پر چھوئے بغیر کنٹینرز لگا سکتے ہیں۔

آپ Vagrant VM میں چلنے والے Docker کنٹینر کے اندر اپنے صفحات کی خدمت کر سکتے ہیں اور ایک کمانڈ سے ہر چیز کو شروع سے واپس لا سکتے ہیں۔

تم نے اسے بھی توڑ دیا۔ ہم نے دیکھا کہ کنٹینر کریش کیسا لگتا ہے، Ansible کیا پرنٹ کرتا ہے جب یہ مشین تک نہیں پہنچ پاتی، ڈسک کا دباؤ کس طرح چلانے والی خدمات کو متاثر کرتا ہے، اور وسائل کم ہونے پر Kubernetes شیڈولر کیا کہتا ہے۔ وہ غلطی کا پیغام اب غیر مانوس نہیں ہے۔

یہ فرق ہے کسی ایسے شخص کے درمیان جس نے DevOps کے بارے میں پڑھا ہے اور جس نے اس پر عمل کیا ہے۔

یہاں چار مفت منصوبے ہیں جنہیں آپ ایک ہی لیب میں چلا سکتے ہیں تاکہ چیزوں کو مزید آگے لے جا سکیں۔

  • DevOps HomeLab 2026 — عالمی سطح پر نمائش کے لیے Docker Compose، Kubernetes، Prometheus/Grafana مانیٹرنگ، ArgoCD کے ساتھ GitOps، اور Cloudflare کا استعمال کرتے ہوئے اینڈ ٹو اینڈ ملٹی سروس ایپس (فرنٹ اینڈ، API، PostgreSQL، Redis) بنائیں۔

  • کیوب لیب – حقیقی دنیا کے Kubernetes کے خرابی کے منظرنامے، پوڈ کریشز، OOMKills، نوڈ ڈرینز، کیسکیڈنگ کی ناکامیوں کو متحرک کریں، اور مشاہدہ کریں کہ آپ کا کلسٹر ریئل ٹائم میٹرکس کا استعمال کرتے ہوئے کیسے رد عمل ظاہر کرتا ہے۔

  • K8s خفیہ لیب — AWS Secrets Manager سے اپنے کلسٹر تک ایک مکمل خفیہ مینجمنٹ پائپ لائن بنائیں، بشمول روٹیشن ایکشنز اور IRSA۔

  • DevOps ٹربل شوٹنگ ٹول کٹ – حقیقی دنیا کے واقعات کے لیے کاپی پیسٹ کمانڈز کا استعمال کرتے ہوئے، لینکس، کنٹینرز، کبرنیٹس، کلاؤڈ، ڈیٹا بیسز، اور مشاہدے کے لیے منظم ڈیبگنگ رہنمائی فراہم کرتا ہے۔

تمام مفت اور اوپن سورس: github.com/Osomudeya/List-Of-DevOps-Projects۔

مزید جاننے کے لیے، Build Your Own DevOps Lab میں چھ مکمل ابواب تلاش کریں جس میں Terraform، Ansible، مانیٹرنگ، CI/CD، اور ایک مصنوعی 3-VM پروڈکشن ماحول شامل ہے۔

اوپر تک سکرول کریں۔