استقرار برنامههای سازگار با ASGI
(Docker Apps)ASGI (Asynchronous Server Gateway Interface) را میتوان جایگزینی برای WSGI دانست که به ما امکان میدهد تا علاوهبر برنامههای وب Synchronous، قادر به اجرای برنامههای وب Asynchronous در زبان Python باشیم.
برای مثال برنامهی 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