EQVPS

چطور یک استک Docker Compose را روی VPS مستقر کنیم

یک استک چندکانتینری را روی VPS با Docker Compose مستقر کن: docker-compose.yml بنویس، سکرت‌ها را در .env نگه دار، آن را با ری‌استارتِ پس از ریبوت بالا بیاور و فقط پورت‌هایی را که واقعاً قصد داری منتشر کن. نمونهٔ کپی-پیست با یک اپ وب، پایگاه داده و reverse proxy.

Docker Compose یک استک چندکانتینری را در یک فایل توصیف می‌کند و آن را با یک فرمان اجرا می‌کند. این راهنمای استقرار است؛ اگر هنوز نکرده‌ای اول Docker را نصب کن. برای یک استک ویژهٔ عامل هوش مصنوعی (عامل + پایگاه دادهٔ برداری + Redis) docker-compose برای عامل‌های هوش مصنوعی را ببین.

۱. یک استک: اپ + پایگاه داده + 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
}

۲. بالا بیاورش

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

restart: unless-stopped روی هر سرویس + Docker فعال‌شده هنگام بوت = استک خودش پس از ریبوت برمی‌گردد.

۳. فرمان‌های روزمره

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، پرداخت با ارز دیجیتال.

پرسش‌های متداول

چطور یک استک Docker Compose را روی VPS مستقر کنم؟

Docker را با افزونهٔ Compose نصب کن، یک docker-compose.yml بنویس که هر سرویس را توصیف کند، سکرت‌ها را در یک .env که git نادیده می‌گیرد نگه دار، سپس docker compose up -d. روی هر سرویس restart: unless-stopped بگذار و Docker را هنگام بوت فعال کن تا استک از ریبوت‌ها جان سالم به‌در ببرد. نمونهٔ زیر یک اپ وب، Postgres و یک reverse proxy با Caddy را اجرا می‌کند.

سکرت‌ها کجا می‌روند — در فایل compose؟

نه. آن‌ها را در یک فایل .env (chmod 600، نادیده‌گرفته‌شده توسط git) بگذار و در 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 مقید کن و فقط نقطهٔ ورود عمومی را منتشر کن — معمولاً یک reverse proxy روی 80/443. Docker از طریق iptables منتشر می‌کند، پس یک خط ports: اتفاقی حتی پشت UFW از اینترنت قابل‌دسترسی است.

آیا مدرک شناسایی یا کارت می‌خواهید؟

نه. یک ایمیل برای ثبت‌نام، پرداخت با USDC یا USDT — بدون مدرک، بدون کارت. root در حدود یک دقیقه.

نظرات

هنوز نظری نیست. اولین نفر باشید.

یک نظر بگذارید

نظرات پیش از نمایش بررسی می‌شوند.