EQVPS

VPS-এ কীভাবে একটি Docker Compose স্ট্যাক ডিপ্লয় করবেন

Docker Compose দিয়ে VPS-এ একটি মাল্টি-কন্টেইনার স্ট্যাক ডিপ্লয় করুন: docker-compose.yml লিখুন, সিক্রেট .env-তে রাখুন, রিবুট-পরবর্তী-রিস্টার্টসহ চালু করুন, এবং কেবল সেই পোর্টগুলো প্রকাশ করুন যা আপনি সত্যিই চান। একটি ওয়েব অ্যাপ, ডেটাবেস ও reverse proxy সহ কপি-পেস্ট উদাহরণ।

Docker Compose একটি মাল্টি-কন্টেইনার স্ট্যাক একটি ফাইলে বর্ণনা করে এবং একটি কমান্ডে চালায়। এটি ডিপ্লয় হাউ-টু; না করে থাকলে প্রথমে Docker ইনস্টল করুন। AI-এজেন্ট-নির্দিষ্ট স্ট্যাকের (এজেন্ট + ভেক্টর DB + Redis) জন্য দেখুন AI এজেন্টের জন্য docker-compose

1. একটি স্ট্যাক: অ্যাপ + ডেটাবেস + reverse proxy

# /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 নেই, ক্রিপ্টোতে পেমেন্ট।

FAQ

VPS-এ একটি Docker Compose স্ট্যাক কীভাবে ডিপ্লয় করব?

Compose প্লাগইনসহ Docker ইনস্টল করুন, প্রতিটি সার্ভিস বর্ণনা করা docker-compose.yml লিখুন, সিক্রেট git-ignored .env-তে রাখুন, তারপর docker compose up -d। প্রতিটি সার্ভিসে restart: unless-stopped সেট করুন ও বুটে Docker চালু করুন যাতে স্ট্যাক রিবুট টিকে থাকে। নিচের উদাহরণ একটি ওয়েব অ্যাপ, Postgres ও একটি Caddy reverse proxy চালায়।

সিক্রেট কোথায় যায় — 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-এ একটি reverse proxy। Docker iptables-এর মাধ্যমে প্রকাশ করে, তাই একটি ভুলবশত ports: লাইন আপনি বন্ধ ভাবা UFW-র পেছনেও ইন্টারনেট থেকে পৌঁছানো যায়।

আপনারা কি পরিচয়পত্র বা কার্ড চান?

না। সাইন আপে একটি ইমেল, USDC বা USDT-তে পেমেন্ট — কোনো নথি নয়, কোনো কার্ড নয়। প্রায় এক মিনিটে root।

মন্তব্য

এখনো কোনো মন্তব্য নেই। প্রথম হোন।

একটি মন্তব্য দিন

মন্তব্য প্রকাশের আগে মডারেট করা হয়।