Home Knowledge base Skyline Cloud Docker Compose کے ساتھ ایپ کو ڈیپلائے کیسے کریں KNOWLEDGE BASE

Docker Compose کے ساتھ ایپ کو ڈیپلائے کیسے کریں

ایک عملی، مرحلہ وار رہنمائی جو Docker Compose کے ذریعے لینکس سرور پر ملٹی کنٹینر ایپلیکیشن ڈیپلائے کرنے کا طریقہ بتاتی ہے — Docker انسٹال کریں، پروڈکشن کے لیے تیار compose فائل لکھیں، HTTPS کے ساتھ ریورس پراکسی شامل کریں، اور اسے Skyline Cloud کے اندرونِ مملکت انفراسٹرکچر پر قابلِ اعتماد طریقے سے چلائیں۔

Docker Compose کے ساتھ ایپ کو ڈیپلائے کیسے کریں

ایک عملی، مرحلہ وار رہنمائی جو لینکس سرور پر 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 سرور بنائیں اور شروع کریں۔

SKYLINE Engineering

@skyline

The engineering team at SKYLINE Industrial Solutions. We publish field-tested guides drawn from real KSA and GCC deployments.

See author profile
SKYLINE engineering services

Need this implemented for you?

Reading is free — building it right takes a team. SKYLINE engineers ship Skyline Cloud for Aramco vendors, banks, hospitals and government agencies across Saudi Arabia. Talk to us before you start.

Aramco Approved Contractor ISO 9001 · ISO 27001 SAMA CSF aligned NCA ECC ready 247+ KSA clients

Comments

0 total · 0 threads
Be the first to leave a comment.