EQVPS

VPS पर Docker Compose स्टैक कैसे डिप्लॉय करें

Docker Compose के साथ VPS पर एक मल्टी-कंटेनर स्टैक डिप्लॉय करें: docker-compose.yml लिखें, सीक्रेट्स को .env में रखें, रीबूट-पर-रीस्टार्ट के साथ इसे चलाएँ, और केवल वही पोर्ट पब्लिश करें जो आप वाकई चाहते हैं। एक वेब ऐप, डेटाबेस और रिवर्स प्रॉक्सी के साथ कॉपी-पेस्ट उदाहरण।

Docker Compose एक मल्टी-कंटेनर स्टैक को एक फ़ाइल में वर्णित करता है और एक कमांड से चलाता है। यह डिप्लॉय हाउ-टू है; यदि नहीं किया तो पहले Docker इंस्टॉल करें। AI-एजेंट-विशिष्ट स्टैक (एजेंट + वेक्टर DB + Redis) के लिए देखें AI एजेंट के लिए docker-compose

1. एक स्टैक: ऐप + डेटाबेस + रिवर्स प्रॉक्सी

# /opt/stack/docker-compose.yml
services:
  app:
    image: your/app:latest
    restart: unless-stopped
    env_file: [.env]
    depends_on: [db]
    # no ports: — reached only through the proxy below

  db:
    image: postgres:16-alpine
    restart: unless-stopped
    environment:
      POSTGRES_PASSWORD: ${DB_PASSWORD}
    volumes: ["pg:/var/lib/postgresql/data"]   # internal only

  caddy:                                        # HTTPS automatically
    image: caddy:2
    restart: unless-stopped
    ports: ["80:80", "443:443"]                 # the only public entrypoint
    volumes:
      - ./Caddyfile:/etc/caddy/Caddyfile
      - caddy_data:/data

volumes: { pg: {}, caddy_data: {} }

सीक्रेट्स .env में रहते हैं, कभी compose फ़ाइल में नहीं:

# /opt/stack/.env  (chmod 600, git-ignored)
DB_PASSWORD=a-long-random-string

एक न्यूनतम Caddyfile आपके डोमेन को ऐप तक प्रॉक्सी करता है और HTTPS खुद ले आता है:

app.yourdomain.com {
  reverse_proxy app:8080
}

2. इसे चलाएँ

cd /opt/stack
docker compose up -d
docker compose ps
docker compose logs -f app

हर सेवा पर restart: unless-stopped + बूट पर चालू Docker = स्टैक रीबूट के बाद खुद वापस आ जाता है।

3. रोज़मर्रा की कमांड

docker compose pull && docker compose up -d   # update images
docker compose down                            # stop the stack
docker compose restart app                     # restart one service

जिस हिस्से में लोग गलती करते हैं: एक्सपोज़्ड पोर्ट

Docker पोर्ट iptables के ज़रिए पब्लिश करता है, इसलिए ports: ["5432:5432"] वाला कंटेनर उस UFW फ़ायरवॉल के पीछे भी इंटरनेट से पहुँच योग्य होता है जिसे आप बंद समझते थे। केवल सार्वजनिक एंट्रीपॉइंट पब्लिश करें (80/443 पर प्रॉक्सी); डेटाबेस और कैश को compose नेटवर्क पर या 127.0.0.1 से बँधा रखें। वेब ट्रैफ़िक सर्व करने वाली किसी भी चीज़ को डेडिकेटेड-IP प्लान चाहिए; UFW फ़ायरवॉल के साथ जोड़ें।

एक IP के पीछे पूरे स्टैक के लिए देखें कई सेवाओं को सेल्फ-होस्ट करना। लगभग एक मिनट में root, NVMe, कोई KYC नहीं, क्रिप्टो में भुगतान।

सामान्य प्रश्न

VPS पर Docker Compose स्टैक कैसे डिप्लॉय करूँ?

Compose प्लगइन वाला Docker इंस्टॉल करें, हर सेवा का वर्णन करने वाली docker-compose.yml लिखें, सीक्रेट्स को git-ignored .env में रखें, फिर docker compose up -d। हर सेवा पर restart: unless-stopped सेट करें और Docker को बूट पर चालू करें ताकि स्टैक रीबूट झेल सके। नीचे का उदाहरण एक वेब ऐप, Postgres और एक Caddy रिवर्स प्रॉक्सी चलाता है।

सीक्रेट्स कहाँ जाते हैं — compose फ़ाइल में?

नहीं। उन्हें एक .env फ़ाइल में रखें (chmod 600, git-ignored) और compose में ${VAR} के रूप में संदर्भित करें, या Docker secrets का उपयोग करें। पासवर्ड या API कुंजियाँ कभी docker-compose.yml में कमिट न करें — लाइव क्रेडेंशियल वाली लीक हुई फ़ाइल क्लासिक गलती है।

क्या स्टैक रीबूट के बाद वापस आएगा?

तभी जब आप उसे बताएँ। हर सेवा पर restart: unless-stopped (या always) सेट करें और Docker को बूट पर चालू करें (systemctl enable docker)। तब docker compose up -d रीबूट झेलता है और क्रैश हुए कंटेनर फिर चालू करता है।

कौन से पोर्ट एक्सपोज़ होते हैं?

केवल वही जो आप ports: से पब्लिश करते हैं। आंतरिक सेवाओं (डेटाबेस, कैश) को compose नेटवर्क या 127.0.0.1 से बाँधें और केवल सार्वजनिक एंट्रीपॉइंट पब्लिश करें — आमतौर पर 80/443 पर रिवर्स प्रॉक्सी। Docker iptables के ज़रिए पब्लिश करता है, इसलिए एक अनजाने ports: लाइन UFW के पीछे भी इंटरनेट से पहुँच योग्य होती है।

क्या आप पहचान-पत्र या कार्ड माँगते हैं?

नहीं। साइन अप के लिए एक ईमेल, USDC या USDT में भुगतान — कोई दस्तावेज़ नहीं, कोई कार्ड नहीं। लगभग एक मिनट में root।

टिप्पणियाँ

अभी तक कोई टिप्पणी नहीं। पहले बनें।

एक टिप्पणी छोड़ें

टिप्पणियाँ दिखने से पहले मॉडरेट की जाती हैं।