ایک عملی، مرحلہ وار رہنمائی جو لینکس سرور پر Docker Compose کے ذریعے ملٹی کنٹینر ایپلیکیشن ڈیپلائے کرنے کے بارے میں ہے — Docker انسٹال کریں، پروڈکشن کے لیے تیار compose فائل لکھیں، خودکار HTTPS کے ساتھ ریورس پراکسی شامل کریں، اور اسے Skyline Cloud کے اندرونِ مملکت انفراسٹرکچر پر قابلِ اعتماد طریقے سے چلائیں۔
تعارف
Docker Compose آپ کو ایک ملٹی کنٹینر ایپلیکیشن — ایک ویب ایپ، اس کا ڈیٹابیس، ایک کیش، اور ایک ریورس پراکسی — کو ایک ہی ڈیکلیریٹو فائل میں بیان کرنے کی سہولت دیتا ہے، پھر آپ ان سب کو ایک ہی کمانڈ سے چلا سکتے ہیں۔ لمبی لمبی docker run کمانڈز ہاتھ سے چلانے کے بجائے، آپ ایک بار مطلوبہ حالت بیان کرتے ہیں اور Compose اسے آپ کے لیے ہم آہنگ کر دیتا ہے۔
اس ٹیوٹوریل میں آپ ایک لینکس سرور پر ایک چھوٹا مگر حقیقت پسندانہ اسٹیک ڈیپلائے کریں گے: ایک ویب ایپلیکیشن، ایک PostgreSQL ڈیٹابیس، اور ایک Caddy ریورس پراکسی جو خودکار طور پر HTTPS کو ٹرمینیٹ کرتی ہے۔ آخر میں آپ کے پاس ایک چلتی ہوئی ایپ ہوگی جو آپ کے اپنے ڈومین پر TLS کے ذریعے قابلِ رسائی ہوگی۔
ہم Skyline Cloud VPS پر ڈیپلائے کریں گے۔ چونکہ Skyline سعودی عرب میں اندرونِ مملکت انفراسٹرکچر چلاتا ہے، اس لیے آپ کا ڈیٹا اور آپ کے گاہکوں کا ڈیٹا PDPL، NCA اور SDAIA کے دائرہِ اختیار میں رہتا ہے — جو اس وقت اہم ہوتا ہے جب آپ KSA اور GCC کے اداروں کے لیے ورک لوڈز ہوسٹ کرتے ہیں۔ اگر آپ کے پاس ابھی تک سرور نہیں ہے، تو چند منٹوں میں ایک بنائیں۔
پیشگی ضروریات
- ایک لینکس سرور (Ubuntu 22.04/24.04 یا Debian 12) جس کا پبلک IP ہو۔ شروع کرنے کے لیے 1–2 vCPU / 2 GB RAM والا VPS کافی ہے۔
- ایک نان روٹ صارف جس کے پاس
sudoکے اختیارات ہوں، اور سرور تک SSH رسائی ہو۔ - ایک ڈومین نام جس کا A record آپ کے سرور کے پبلک IP کی طرف اشارہ کرتا ہو۔ Skyline سے .sa ڈومین اور منظم DNS کے ساتھ، اس طرح کا ریکارڈ بنائیں
app.example.sa → 203.0.113.10۔
مرحلہ 1 — Docker Engine اور Compose پلگ ان انسٹال کریں
جدید Docker، Compose کو ایک پلگ ان کے طور پر فراہم کرتا ہے (docker compose، نہ کہ پرانا docker-compose)۔ آفیشل کنوینینس اسکرپٹ انجن اور پلگ ان کو ایک ساتھ انسٹال کرتی ہے:
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh
اپنے صارف کو docker گروپ میں شامل کریں تاکہ آپ sudo کے بغیر Docker چلا سکیں، پھر اپنا سیشن دوبارہ کھولیں:
sudo usermod -aG docker $USER
newgrp docker
انجن اور Compose پلگ ان دونوں کی تصدیق کریں:
docker --version
docker compose version
مرحلہ 2 — پروجیکٹ کا خاکہ بنائیں
اپنے اسٹیک کے لیے ایک ڈائریکٹری بنائیں اور اس میں منتقل ہو جائیں:
mkdir -p ~/myapp && cd ~/myapp
ہم یہاں تین فائلیں رکھیں گے: ایپ امیج کے لیے ایک Dockerfile، ایک compose.yaml جو سروسز کو آپس میں جوڑتی ہے، اور رازوں اور کنفیگریشن کے لیے ایک .env فائل۔
مرحلہ 3 — ایپلیکیشن کا Dockerfile لکھیں
ایک عام Node.js ایپ کے لیے، ایک چھوٹا ملٹی اسٹیج بلڈ حتمی امیج کو ہلکا رکھتا ہے۔ اپنے اسٹیک (Python، Go، PHP وغیرہ) کے مطابق کمانڈز کو ایڈجسٹ کریں:
FROM node:20-alpine
WORKDIR /app
COPY package*.json ./
RUN npm ci --omit=dev
COPY . .
EXPOSE 3000
CMD ["node", "server.js"]
مرحلہ 4 — رازوں کو ایک .env فائل میں متعین کریں
اپنی compose فائل میں کبھی بھی کریڈینشلز کو ہارڈ کوڈ نہ کریں۔ انہیں .env میں رکھیں، جسے Compose خودکار طور پر پڑھ لیتا ہے:
POSTGRES_USER=appuser
POSTGRES_PASSWORD=change-me-to-a-strong-secret
POSTGRES_DB=appdb
APP_DOMAIN=app.example.sa
اس کی اجازتوں کو محدود کریں اور اسے ورژن کنٹرول سے باہر رکھیں:
chmod 600 .env
echo ".env" >> .gitignore
مرحلہ 5 — Compose فائل لکھیں
compose.yaml بنائیں۔ یہ تین سروسز، ایک پرائیویٹ نیٹ ورک، اور نامزد والیومز کی تعریف کرتی ہے تاکہ آپ کا ڈیٹا اور TLS سرٹیفکیٹس ری اسٹارٹ کے بعد بھی باقی رہیں:
services:
app:
build: .
restart: unless-stopped
environment:
DATABASE_URL: postgres://${POSTGRES_USER}:${POSTGRES_PASSWORD}@db:5432/${POSTGRES_DB}
depends_on:
db:
condition: service_healthy
expose:
- "3000"
db:
image: postgres:16-alpine
restart: unless-stopped
environment:
POSTGRES_USER: ${POSTGRES_USER}
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
POSTGRES_DB: ${POSTGRES_DB}
volumes:
- db-data:/var/lib/postgresql/data
healthcheck:
test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER} -d ${POSTGRES_DB}"]
interval: 10s
timeout: 5s
retries: 5
caddy:
image: caddy:2-alpine
restart: unless-stopped
ports:
- "80:80"
- "443:443"
volumes:
- ./Caddyfile:/etc/caddy/Caddyfile:ro
- caddy-data:/data
- caddy-config:/config
depends_on:
- app
volumes:
db-data:
caddy-data:
caddy-config:
چند تفصیلات قابلِ غور ہیں:
- ڈیٹابیس پورٹ کو
ports:کے ساتھ شائع نہیں کیا جاتا؛ یہ صرف اندرونی Compose نیٹ ورک پر قابلِ رسائی ہے، اس لیے یہ کبھی انٹرنیٹ کے سامنے بے نقاب نہیں ہوتا۔ condition: service_healthyکے ساتھdepends_onایپ کو اس وقت تک انتظار کرواتا ہے جب تک PostgreSQL واقعی کنکشنز قبول نہ کرنے لگے، نہ کہ صرف اس وقت تک جب اس کا کنٹینر شروع ہو جائے۔restart: unless-stoppedآپ کی سروسز کو ری بوٹ یا کریش کے بعد خودکار طور پر واپس لے آتا ہے۔
مرحلہ 6 — ریورس پراکسی کنفیگر کریں
اپنی compose فائل کے ساتھ Caddyfile نامی ایک فائل بنائیں۔ Caddy خودکار طور پر ایک Let's Encrypt سرٹیفکیٹ حاصل اور تجدید کرتا ہے، اس لیے آپ کو بغیر کسی دستی سرٹیفکیٹ ہینڈلنگ کے HTTPS مل جاتا ہے:
app.example.sa {
reverse_proxy app:3000
}
app.example.sa کو اپنے اصل ڈومین سے تبدیل کریں۔ Caddy اندرونی نیٹ ورک پر app کو آپ کے ایپلیکیشن کنٹینر کے طور پر حل کرتا ہے اور درخواستوں کو پورٹ 3000 پر پراکسی کرتا ہے۔
مرحلہ 7 — اسٹیک کو لانچ کریں
امیجز بنائیں اور ہر چیز کو پس منظر میں شروع کریں:
docker compose up -d --build
چیک کریں کہ تمام سروسز صحت مند ہیں:
docker compose ps
ایپ کے شروع ہونے اور Caddy کے آپ کا سرٹیفکیٹ جاری کرنے کو دیکھنے کے لیے لاگز کی پیروی کریں:
docker compose logs -f
براؤزر میں https://app.example.sa کھولیں۔ Caddy پہلے ہی ایک درست TLS سرٹیفکیٹ فراہم کر چکا ہوگا۔
مرحلہ 8 — آپریٹ اور اپ ڈیٹ کریں
روزمرہ کے عام کمانڈز:
| کام | کمانڈ |
|---|---|
| چلتی ہوئی سروسز دیکھیں | docker compose ps |
| ایک سروس کے لاگز ٹیل کریں | docker compose logs -f app |
| ایک سروس کو ری اسٹارٹ کریں | docker compose restart app |
| اسٹیک بند کریں (ڈیٹا رکھیں) | docker compose down |
| نئی بیس امیجز کھینچیں | docker compose pull |
| دوبارہ بنائیں اور ری ڈیپلائے کریں | docker compose up -d --build |
اپنے کوڈ کا نیا ورژن بھیجنے کے لیے، اپنی تبدیلیاں کھینچیں اور docker compose up -d --build چلائیں۔ Compose صرف ان کنٹینرز کو دوبارہ بناتا ہے جو تبدیل ہوئے ہیں اور ڈیٹابیس کو نہیں چھیڑتا، جس سے آپ کو اسٹیٹ لیس سروسز کے لیے تقریباً صفر ڈاؤن ٹائم ملتا ہے۔
ہر چیز کو والیومز سمیت ہٹانے کے لیے (یہ آپ کے ڈیٹابیس کا ڈیٹا حذف کر دیتا ہے)، docker compose down -v چلائیں — اسے احتیاط سے استعمال کریں۔
مرحلہ 9 — اپنے ڈیٹا کا بیک اپ لیں
آپ کا ایپلیکیشن ڈیٹا db-data والیوم میں موجود ہوتا ہے۔ باقاعدگی سے ڈمپ لیں اور انہیں سرور سے باہر محفوظ کریں۔ ایک سادہ PostgreSQL بیک اپ:
docker compose exec db pg_dump -U appuser appdb > backup-$(date +%F).sql
اسے cron کے ساتھ شیڈول کریں اور ڈمپس کو Skyline Cloud آبجیکٹ اسٹوریج یا کلاؤڈ بیک اپ پر دھکیلیں تاکہ کسی واحد سرور کی خرابی آپ کو کبھی آپ کے ڈیٹا سے محروم نہ کرے۔
نتیجہ
اب آپ کے پاس Docker Compose کے ساتھ ڈیپلائے کی گئی ایک ملٹی کنٹینر ایپلیکیشن ہے، جس کے سامنے ایک خودکار HTTPS ریورس پراکسی ہے، اور یہ ایک ایسے سرور پر چل رہی ہے جس پر آپ کا کنٹرول ہے۔ یہاں سے آپ ایک Redis کیش شامل کر سکتے ہیں، پراکسی کے پیچھے docker compose up -d --scale app=3 کے ساتھ اسٹیٹ لیس سروسز کو اسکیل کر سکتے ہیں، یا آرکیسٹریشن کی طرف بڑھ سکتے ہیں — جب آپ ایک ہی ہوسٹ سے آگے بڑھ جائیں تو ہماری سعودی عرب میں منظم Kubernetes رہنمائی دیکھیں۔
اگر آپ کو اپنی ایپ کے ساتھ ساتھ اپنے ڈومین کے لیے پیشہ ورانہ میل باکسز کی بھی ضرورت ہے، تو Skyline بزنس ای میل ہوسٹنگ آپ کی میل کو بھی اندرونِ مملکت رکھتی ہے۔
ڈیپلائے کرنے کے لیے تیار ہیں؟ اپنا Skyline Cloud سرور بنائیں اور شروع کریں۔
Comments
0 total · 0 threads