وبلاگ نت‌آرامآموزش، تجربه و راهکارهای زیرساخت

آیا FastAPI روی هاست پایتون اجرا می‌شود؟ تفاوت ASGI و WSGI به زبان ساده

تفاوت رابط‌های ASGI و WSGI، آزمایش محلی FastAPI و موارد لازم برای انتخاب محیط اجرای سازگار.

انتشار:
توسط تیم فنی نت‌آرام
۴ دقیقه زمان مطالعه
۰ دیدگاه
محتوای تخصصی، ساده و کاربردی
هماهنگ با هویت حرفه‌ای نت‌آرام
بازگشت به لیست مقالات
تصویر شاخص مقاله آیا FastAPI روی هاست پایتون اجرا می‌شود؟ تفاوت ASGI و WSGI به زبان ساده در وبلاگ نت‌آرام
محتوای آموزشی وبلاگ نت‌آرام
برنامه FastAPI روی رایانه شما باز می‌شود، اما در پنل هاست فقط درباره Python و WSGI صحبت شده است. آیا می‌توان همان فایل را مستقیم به پنل داد؟ پاسخ به روش اجرای سرویس بستگی دارد. FastAPI یک برنامه ASGI است و برای اجرای معمول آن به محیطی نیاز دارید که این رابط را پشتیبانی کند.
وجود نام «هاست پایتون» به تنهایی ثابت نمی‌کند همه حالت‌های ASGI، پردازش دائمی یا WebSocket در آن سرویس فعال‌اند. قبل از انتقال سایت، نیاز برنامه و امکانات واقعی سرویس را با یک آزمایش ساده و سؤال‌های مشخص روشن کنید.

۱. ASGI و WSGI را ساده بشناسید

این دو، قرارداد ارتباطی بین برنامه پایتون و سرور اجراکننده آن هستند. WSGI رابط قدیمی‌تر رایج برای برنامه‌های وب همگام است. ASGI برای سناریوهای غیرهمگام و ارتباط‌هایی مانند WebSocket نیز طراحی شده است. نام این رابط‌ها به تنهایی تضمین نمی‌کند یک برنامه در همه شرایط سریع‌تر یا مناسب‌تر است؛ کتابخانه، کد و منابع سرویس نیز مهم‌اند.
FastAPI معمولاً با سرور ASGI مانند Uvicorn اجرا می‌شود. بعضی محیط‌ها ممکن است مبدل یا روش ترکیبی داشته باشند، اما سازگاری همه قابلیت‌ها، به‌ویژه WebSocket و طول عمر اتصال، باید جداگانه تأیید شود. فایل WSGI پروژه دیگری را به جای برنامه FastAPI کپی نکنید.

۲. برنامه نمونه را فقط روی رایانه آزمایشی بسازید

این مثال برای یادگیری است و وابستگی‌های fastapi و uvicorn باید از منبع معتبر در محیط مجازی آزمایشی نصب شده باشند. فایل app.py را در یک پوشه جدید بسازید:
کد / دستورfrom fastapi import FastAPI app = FastAPI() @app.get("/health") def health(): return {"status": "ok"}
در ترمینال همان پوشه، مفسر و بسته‌ها را ببینید:
کد / دستورpython --version python -m pip show fastapi uvicorn
اگر بسته‌ها در محیط آزمایشی نصب نیستند، آن‌ها را مطابق نسخه‌های تأییدشده پروژه و فایل نیازمندی معتبر نصب کنید. فایل نیازمندی ناشناس را اجرا نکنید و برای پروژه اصلی نسخه تصادفی همه بسته‌ها را تغییر ندهید.

۳. سرور محلی را اجرا و پاسخ را آزمایش کنید

در همان محیط آزمایشی:
کد / دستورpython -m uvicorn app:app --host 127.0.0.1 --port 8000
عبارت پیش از : نام فایل بدون .py و عبارت بعد از آن نام شیء برنامه است. این نمونه به 127.0.0.1 محدود شده و برای دسترسی عمومی طراحی نشده است. در ترمینال دوم همان سیستم:
کد / دستورcurl -i http://127.0.0.1:8000/health
پاسخ موفق باید وضعیت HTTP مناسب و {"status":"ok"} داشته باشد. پس از آزمون، در ترمینال اول Ctrl+C بزنید. اگر Address already in use دیدید، یک پورت آزاد مناسب محیط آزمایشی انتخاب کنید. موفقیت این تست فقط نشان می‌دهد برنامه روی همان محیط محلی اجرا می‌شود، نه اینکه پنل هاست نیز اجرای ASGI را پشتیبانی می‌کند.
اگر پیام Could not import module ظاهر شد، نام فایل و پوشه اجرای فرمان را با app:app مقایسه کنید. برای فایلی در یک بسته پایتون، مسیر import می‌تواند شکل دیگری داشته باشد. اگر خطا از داخل خود فایل یا وابستگی آن است، چند خط بعدی traceback علت دقیق‌تری می‌دهد. نصب بسته در یک Python دیگر یا تغییر نام فایل بدون اصلاح importها مشکل محیط را حل نمی‌کند.

۴. پیش از انتقال از سرویس چه بپرسیم؟

نسخه Python مورد نیاز، پشتیبانی صریح از ASGI و روش ثبت فایل شروع را مشخص کنید. اگر WebSocket، کار پس‌زمینه طولانی یا اتصال پایگاه داده خصوصی دارید، پشتیبانی و محدودیت همان قابلیت را جداگانه بپرسید. بررسی کنید فرایند برنامه چگونه پس از قطع یا راه‌اندازی مجدد مدیریت می‌شود و پراکسی چه محدودیت زمانی و پورتی دارد.
در هاست اشتراکی نباید بدون اجازه پورت عمومی باز کنید یا یک فرایند دائمی خارج از سازوکار پنل اجرا کنید. اگر سرویس فقط WSGI را پشتیبانی می‌کند و برنامه به ASGI نیاز دارد، از ارائه‌دهنده درباره محیط سازگار بپرسید؛ تغییر پسوند فایل یا نام متغیر برنامه، رابط را تبدیل نمی‌کند.

۵. استقرار و آزمون نهایی

اگر محیط ASGI پشتیبانی می‌شود، وابستگی‌ها را از فایل تأییدشده در محیط برنامه نصب و مسیر شروع و تنظیمات را طبق راهنمای همان سرویس ثبت کنید. اطلاعات محرمانه را در متغیرهای امن سرویس نگه دارید. پس از راه‌اندازی نسخه آزمایشی، مسیر /health و سپس قابلیت واقعی برنامه را از نشانی مورد انتظار امتحان کنید. اگر WebSocket دارید، یک اتصال WebSocket واقعی هم لازم است؛ پاسخ HTTP موفق به تنهایی آن را ثابت نمی‌کند.
اگر مشکل از پیدا نشدن بسته است، راهنمای ModuleNotFoundError را ببینید. امکانات هاست پایتون نت‌آرام را با نیاز برنامه تطبیق دهید و شیوه اجرای ASGI را در مستندات FastAPI بخوانید.
اشتراک‌گذاری:
لینکدینتلگرامایکس
مقاله قبلی
مقاله قبلی وجود ندارد.

دیدگاه‌ها (۰)

دیدگاه‌های تاییدشده و پاسخ‌های تیم نت‌آرام