Home Knowledge base Skyline Cloud Docker Compose के साथ किसी ऐप को कैसे डिप्लॉय करें KNOWLEDGE BASE

Docker Compose के साथ किसी ऐप को कैसे डिप्लॉय करें

Docker Compose की मदद से किसी Linux सर्वर पर मल्टी-कंटेनर एप्लिकेशन डिप्लॉय करने की एक व्यावहारिक, चरण-दर-चरण मार्गदर्शिका — Docker इंस्टॉल करें, प्रोडक्शन-तैयार compose फ़ाइल लिखें, HTTPS के साथ रिवर्स प्रॉक्सी जोड़ें, और इसे Skyline Cloud की इन-किंगडम अवसंरचना पर भरोसेमंद ढंग से चलाएँ।

Docker Compose के साथ किसी ऐप को कैसे डिप्लॉय करें

Docker Compose की मदद से किसी Linux सर्वर पर मल्टी-कंटेनर एप्लिकेशन डिप्लॉय करने की एक व्यावहारिक, चरण-दर-चरण मार्गदर्शिका — Docker इंस्टॉल करें, प्रोडक्शन-तैयार compose फ़ाइल लिखें, HTTPS के साथ रिवर्स प्रॉक्सी जोड़ें, और इसे Skyline Cloud की इन-किंगडम अवसंरचना पर भरोसेमंद ढंग से चलाएँ।

परिचय

Docker Compose आपको किसी मल्टी-कंटेनर एप्लिकेशन — एक वेब ऐप, उसका डेटाबेस, एक कैश, और एक रिवर्स प्रॉक्सी — को एक ही घोषणात्मक (declarative) फ़ाइल में परिभाषित करने देता है, और फिर एक ही कमांड से सब कुछ चालू कर देता है। लंबे-लंबे docker run कमांड हाथ से चलाने के बजाय, आप एक बार वांछित अवस्था (desired state) का वर्णन कर देते हैं और Compose उसे आपके लिए साध (reconcile) देता है।

इस ट्यूटोरियल में आप एक Linux सर्वर पर एक छोटा पर वास्तविक स्टैक डिप्लॉय करेंगे: एक वेब एप्लिकेशन, एक PostgreSQL डेटाबेस, और एक Caddy रिवर्स प्रॉक्सी जो स्वतः ही HTTPS को टर्मिनेट करता है। अंत तक आपके पास अपने स्वयं के डोमेन पर TLS के ज़रिए पहुँच योग्य एक चालू ऐप होगा।

हम एक Skyline Cloud VPS पर डिप्लॉय करेंगे। चूँकि Skyline सऊदी अरब में इन-किंगडम अवसंरचना चलाता है, इसलिए आपका डेटा और आपके ग्राहकों का डेटा PDPL, NCA और SDAIA के क्षेत्राधिकार में रहता है — जो तब मायने रखता है जब आप KSA और GCC संगठनों के लिए वर्कलोड होस्ट करते हैं। यदि आपके पास अभी तक कोई सर्वर नहीं है, तो कुछ ही मिनटों में एक बनाएँ

पूर्वापेक्षाएँ

  • एक सार्वजनिक IP वाला Linux सर्वर (Ubuntu 22.04/24.04 या Debian 12)। शुरुआत के लिए 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 ऐप के लिए, एक छोटा मल्टी-स्टेज बिल्ड अंतिम इमेज को हल्का (lean) रखता है। अपने स्वयं के स्टैक (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

इसकी अनुमतियाँ (permissions) सीमित करें और इसे वर्शन कंट्रोल से बाहर रखें:

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: के साथ प्रकाशित (publish) नहीं किया गया है; यह केवल आंतरिक 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 को आपके एप्लिकेशन कंटेनर तक सुलझाता (resolve) है और अनुरोधों को पोर्ट 3000 पर प्रॉक्सी करता है।

चरण 7 — स्टैक चालू करें

इमेज बिल्ड करें और सब कुछ बैकग्राउंड में शुरू करें:

docker compose up -d --build

जाँचें कि सभी सेवाएँ स्वस्थ (healthy) हैं:

docker compose ps

ऐप के शुरू होने और Caddy द्वारा आपका प्रमाणपत्र जारी करने को देखने के लिए लॉग फ़ॉलो करें:

docker compose logs -f

ब्राउज़र में https://app.example.sa खोलें। Caddy तब तक एक मान्य TLS प्रमाणपत्र प्रावधानित (provision) कर चुका होगा।

चरण 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.