به چه چیزی نیاز دارید
به اپلیکیشنی نیاز دارید که با یک docker-compose.yml توصیف شده باشد — معمولاً یک سرویس web، شاید یک worker پسزمینه، و سرویسهای پشتیبان مانند یک دیتابیس و Redis — و یک حساب cdn.com.tr. شما نه یک کلاستر Kubernetes اجرا میکنید، نه یک سرور دیتابیس مدیریت میکنید و نه TLS را دستی سیمکشی میکنید. cdn.com.tr فایل compose شما را میخواند و هر بخش را به یک قطعه مدیریتشده نگاشت میکند: سرویسهای اپلیکیشن به اپلیکیشنهای کانتینری تبدیل میشوند، و سرویسهای حالتدار مانند Postgres، MySQL یا Redis به افزونههای مدیریتشدهای تبدیل میشوند که پشتیبانگیری شده و بهصورت متغیرهای محیطی به اپلیکیشنهای شما تزریق میشوند.
چگونه فایل compose شما نگاشت میشود
ایده ساده است: هر چیزی که به ترافیک سرویس میدهد یا کد اجرا میکند به یک اپلیکیشن کانتینری تبدیل میشود، و هر چیزی که داده ذخیره میکند به یک افزونه مدیریتشده. یک سرویس 'web' به اپلیکیشنی با دامنه تبدیل میشود؛ یک 'worker' به اپلیکیشنی بدون پورت عمومی؛ یک 'db' که از یک image مربوط به Postgres یا MySQL استفاده میکند به یک دیتابیس مدیریتشده؛ و یک سرویس 'redis' به Redis مدیریتشده. سرویسهای شما همچنان با نام با یکدیگر صحبت میکنند، و جزئیات اتصال افزونههای مدیریتشده بهطور خودکار در اختیار اپلیکیشنهای شما قرار میگیرد — بنابراین کانتینر پرریسک و خودمیزبان دیتابیس را حذف میکنید و اجازه میدهید پلتفرم آن را اجرا کند.
یک نمونه فایل compose
این یک اپلیکیشن کوچک چندسرویسی است: یک API وب، یک worker پسزمینه، یک دیتابیس Postgres و Redis. آن را بهعنوان docker-compose.yml در مخزن خود commit کنید.
docker-compose.yml
services:
web:
build: .
ports:
- "8000:8000"
environment:
DATABASE_URL: postgres://app:secret@db:5432/app
REDIS_URL: redis://redis:6379
depends_on: [db, redis]
worker:
build: .
command: ["python", "worker.py"]
depends_on: [db, redis]
db:
image: postgres:16
environment:
POSTGRES_USER: app
POSTGRES_PASSWORD: secret
POSTGRES_DB: app
redis:
image: redis:7
ابتدا نقشه را پیشنمایش کنید
پیش از تغییر هر چیزی، از cdn.com.tr بپرسید چه چیزی خواهد ساخت. پیشنمایش فایل compose شما را میخواند و نقشه را نشان میدهد: کدام سرویسها به اپلیکیشنهای کانتینری تبدیل میشوند، کدام به افزونههای مدیریتشده، و چگونه به هم متصل میشوند. هنوز چیزی ساخته نمیشود — فقط میبینید چه اتفاقی خواهد افتاد.
cdnctl login
cdnctl accounts use <account_uuid>
cdnctl container compose preview --file docker-compose.yml
# web, worker -> اپلیکیشنهای کانتینری
# db -> دیتابیس مدیریتشده (postgres)
# redis -> Redis مدیریتشده
اعمالش کنید
از نقشه راضی هستید؟ اعمالش کنید. cdn.com.tr اپلیکیشنهای کانتینری و افزونهها را میسازد، رشتههای اتصال را به اپلیکیشنهای شما سیمکشی میکند و همهچیز را راه میاندازد. میتوانید این کار را از پنل هم انجام دهید — فایل compose را وارد کنید، نقشه را مرور کنید و تأیید کنید — اما یک دستور واحد آن را در CI یا یک اسکریپت شما نگه میدارد.
cdnctl container compose apply --file docker-compose.yml --yes
# سپس، هر زمان:
cdnctl container apps list
cdnctl container apps logs --app <web_app_uuid> --tail 100
دامنه، HTTPS و edge
دامنه خود را به اپلیکیشن web اشاره دهید و cdn.com.tr گواهی SSL را بهطور خودکار صادر و تمدید میکند. اکنون سرویسهای شما بهعنوان اپلیکیشنهای مدیریتشده پشت edge شبکه CDN اجرا میشوند، با یک WAF در جلو و هجومهای ترافیک که در edge جذب میشوند؛ دیتابیس و Redis مدیریت و پشتیبانگیری میشوند. برای ارسال یک بهروزرسانی، image خود را دوباره بسازید و دوباره اعمال کنید — یک بیلد خراب باعث میشود نسخه قبلی همچنان سرویس دهد. یک استقرار تولیدی چندسرویسی به دست میآورید بدون اینکه کلاستری یا دیتابیسی را زیر آن اداره کنید.
موارد مناسب
اپلیکیشنهایی با یک لایه web، workerهای پسزمینه و یک دیتابیس بهتمیزی به اپلیکیشنها بهعلاوه افزونههای مدیریتشده نگاشت میشوند.
همین حالا یک docker-compose.yml کارآمد دارید؟ آن را همانطور که هست وارد کنید، بهجای بازسازی استقرار خود از صفر.
پیشنمایش دقیقاً نشان میدهد چه چیزی تغییر خواهد کرد پیش از اجرای هر چیزی — برای استفاده از CI یا یک اسکریپت امن است.
پرسشهای پرتکرار استقرار Docker Compose
آیا docker-compose را همانطور که هست روی یک VM اجرا میکند؟
خیر — فایل compose شما را به منابع مدیریتشده تبدیل میکند: سرویسها به اپلیکیشنهای کانتینری و سرویسهای حالتدار به افزونههای مدیریتشده تبدیل میشوند. این یعنی نه VMای برای وصلهکردن و دیتابیسی که برای شما پشتیبانگیری و اداره میشود، در حالی که اپلیکیشن شما همان شکل را حفظ میکند.
چه بر سر سرویسهای دیتابیس و Redis من میآید؟
یک سرویس Postgres، MySQL یا Redis به یک افزونه مدیریتشده تبدیل میشود. کانتینر موجود در فایل compose شما همانطور که هست اجرا نمیشود؛ در عوض افزونه مدیریتشده جزئیات اتصال را بهصورت متغیرهای محیطی در اختیار اپلیکیشنهای شما قرار میدهد.
آیا میتوانم پیش از اعمال ببینم چه اتفاقی خواهد افتاد؟
بله. 'cdnctl container compose preview' نقشه کامل را نشان میدهد — کدام سرویسها به اپلیکیشن، کدام به افزونه، و چگونه به هم متصل میشوند — بدون ساختن هیچ چیز. تنها زمانی اعمال کنید که نقشه درست به نظر برسد.