ارائه دهنده خدمات ابری PaaS و DBaaS

docker

استقرار برنامه‌های سازگار با ASGI

(Docker Apps)

ASGI (Asynchronous Server Gateway Interface) را می‌توان جایگزینی برای WSGI دانست که به ما امکان می‌دهد تا علاوه‌بر برنامه‌های وب Synchronous، قادر به اجرای برنامه‌های وب Asynchronous در زبان Python باشیم.

توضیحات بیشتر: Synchronous و Asynchronous چیست؟

برای مثال برنامه‌ی Asynchronous زیر را درنظر بگیرید که Route فعلی را در مرورگر چاپ می‌کند.

#routeprinter.py
async def app(scope, receive, send):
    headers = [(b"content-type", b"text/html")]
    await send({"type": "http.response.start", "status": 200, "headers": headers})
    await send({"type": "http.response.body", "body": scope["raw_path"]})

برای استقرار این برنامه در لیارا کافیست یک برنامه‌ی Docker تهیه کرده و در کنار فایل routeprinter.py که قطعه کد فوق را دربرمی‌گیرد، فایلی با نام Dockerfile ایجاد کرده و محتوای زیر را در آن قرار دهید.

FROM python:3.9

WORKDIR /usr/src/app

COPY . .

RUN python -m pip install --upgrade pip

RUN python -m pip install daphne

CMD [ "daphne","-b","0.0.0.0","-p","80","routeprinter:app" ]

در Dockerfile فوق می‌توانید مشاهده کنید که در ابتدا کتابخانه‌ی Daphne که ASGI server ما محسوب می‌شود را نصب و سپس برنامه‌های routeprinterرا اجرا کرده‌ایم. حال برای استقرار این برنامه در لیارا کافیست تا طبق مستندات اولین استقرار عمل کرده و دستور زیر را در مسیر اصلی پروژه اجرا کنیم.

$ liara deploy