روی لپتاپ شما پاسخ میدهد، دیتابیس متصل است و فرانتاند درخواستها را دریافت میکند. حالا باید آدرسی به همکارتان بدهید که با بستن ترمینال از دسترس خارج نشود. تفاوت اجرای محلی با دیپلوی FastAPI یا Flask همینجاست: اجرای برنامه، نگهداری تنظیمات محرمانه، اتصال به داده و تشخیص خطا باید خارج از محیط شخصی شما هم کار کنند. لازم نیست از ابتدا متخصص زیرساخت باشید؛ باید بدانید مسئولیت کدام بخش با شماست، چه چیزی را به میزبان میسپارید و پیش از ورود کاربران چه چیزهایی را آزمایش میکنید.
پاسخ سریع: برای دیپلوی FastAPI چه چیزی لازم دارید؟
برای FastAPI از سرور سازگار با ASGI مانند Uvicorn استفاده کنید؛ برای Flask، سرور WSGI مانند Gunicorn در محیط لینوکسی مناسب است. سرور توسعه Flask را در production اجرا نکنید. ASGI و WSGI رابط میان برنامه پایتونی و سرور دریافتکننده درخواستاند.
سپس فرمان شروع، پورت، وابستگیها و Secrets ها را مشخص کنید و HTTPS، سلامت سرویس و محل نگهداری داده را بررسی کنید. پاستا پوشه پروژه، Repository گیت و Dockerfile را میپذیرد و وضعیت Build و استقرار را نمایش میدهد؛ صحت کد و سازگاری تغییرات دیتابیس همچنان مسئولیت شماست.
هاست پایتون را بر اساس مسئولیت عملیاتی انتخاب کنید
پشتیبانی میزبان از Python کافی نیست. باید بتوانید سرور مناسب فریمورک را اجرا کنید و به تنظیمات محیط، لاگ و داده پایدار دسترسی داشته باشید.
|
مسیر |
چه زمانی مناسب است؟ |
مسئولیت شما |
|
هاست اشتراکی پایتون |
وقتی مدل اجرای میزبان با برنامه سازگار است |
بررسی پشتیبانی از ASGI یا WSGI و محدودیت پردازش |
|
سرور مجازی |
وقتی کنترل سیستمعامل و شبکه لازم دارید |
نگهداری سیستم، اجرای مجدد برنامه، HTTPS و پایش |
|
PaaS مانند پاستا |
وقتی میخواهید Build و اجرای سرویس را در یک جریان مشخص مدیریت کنید |
آمادهسازی پروژه، تنظیم منابع و بررسی رفتار برنامه |
Docker روشی برای بستهبندی برنامه و محیط اجرای آن است، نه جایگزین انتخاب میزبان. اگر وابستگی سیستمی خاص دارید، Dockerfile کنترل بیشتری میدهد. میتوانید از مسیر تشخیص سورس پاستا هم شروع کنید و نتیجه را پیش از Build بررسی کنید.
ابتدا فرمان production را روی پروژه خودتان آزمایش کنید
نقطه ورود برنامه را مشخص کنید
در این مثال فرضی، فایل main.py در ریشه پروژه قرار دارد و نام برنامه app است. پورت نمونه 8000 را با تنظیم میزبان هماهنگ کنید.
نمونه FastAPI:
from fastapi import FastAPI
app = FastAPI()
@app.get("/health")
def health():
return {"status": "ok"}
فرمان اجرا، پس از نصب وابستگیهای پروژه و Uvicorn:
uvicorn main:app --host 0.0.0.0 --port 8000
نمونه مستقل Flask در فایل main.py:
from flask import Flask
app = Flask(__name__)
@app.get("/health")
def health():
return {"status": "ok"}
فرمان دیپلوی Flask، پس از نصب Flask و Gunicorn:
gunicorn --bind 0.0.0.0:8000 --access-logfile=- main:app
این نمونهها جایگزین یکدیگرند. عبارت main:app یعنی سرور شیء app را از ماژول main بارگذاری کند. اگر فایل داخل پکیج است، مسیر ماژول را تغییر دهید. Gunicorn روی Windows بومی اجرا نمیشود؛ برای آزمایش از WSL یا محیط لینوکسی استفاده کنید.
هر فرمان یک فرایند سرور راه میاندازد و فایل پروژه را تغییر نمیدهد. اجرای دوباره، فرایند قبلی را بهروزرسانی نمیکند و ممکن است پورت اشغال باشد. ابتدا اجرای قبلی را متوقف کنید.
با bind روی 0.0.0.0، سرور روی رابطهای شبکه گوش میدهد؛ این آدرس را در مرورگر باز نکنید. برای آزمایش محلی به http://localhost:8000/health بروید. پاسخ باید با داده کد تطبیق داشته باشد. اگر پاسخ نگرفتید، لاگ شروع و مسیر ماژول را بررسی کنید.