استفاده از Gunicorn برای اجرای پروژه پایتون

استفاده از Gunicorn برای اجرای پروژه پایتون

در دنیای توسعه وب با پایتون، پس از اتمام توسعه یک برنامه وب (مانند یک برنامه Flask یا Django)، گام بعدی، دیپلوی و اجرای آن در یک محیط عملیاتی است. در حالی که در طول توسعه، معمولاً از سرورهای توسعه‌ای داخلی مانند سرور توسعه Flask یا Django استفاده می‌کنیم، این سرورها برای مدیریت ترافیک بالا و ارائه خدمات پایدار در محیط‌های تولید مناسب نیستند. Gunicorn (Green Unicorn) یک سرور WSGI HTTP برای برنامه‌های پایتون است که به طور خاص برای دیپلوی برنامه‌های وب در محیط‌های تولید طراحی شده است. این مقاله به بررسی جامع Gunicorn، نحوه نصب، پیکربندی و استفاده از آن برای اجرای پروژه‌های پایتون می‌پردازد. این آموزش در دسته بندی ‘دیپلوی و DevOps با پایتون’ قرار می‌گیرد.

WSGI چیست؟

قبل از پرداختن به Gunicorn، درک مفهوم WSGI (Web Server Gateway Interface) ضروری است. WSGI یک استاندارد برای ارتباط بین سرورهای وب و برنامه‌های پایتون است. به عبارت ساده، WSGI یک رابط مشترک تعریف می‌کند که به سرور وب اجازه می‌دهد تا درخواست‌های HTTP را به برنامه پایتون ارسال کند و پاسخ را دریافت کند. Gunicorn به عنوان یک سرور WSGI عمل می‌کند و این ارتباط را برقرار می‌سازد.

چرا Gunicorn؟

Gunicorn به دلایل متعددی برای دیپلوی برنامه‌های پایتون انتخاب مناسبی است:

  • سادگی: Gunicorn به راحتی نصب و پیکربندی می‌شود.
  • عملکرد: Gunicorn از معماری چند پردازشی (multiprocessing) برای مدیریت درخواست‌های همزمان استفاده می‌کند، که منجر به بهبود عملکرد و مقیاس‌پذیری می‌شود.
  • پایداری: Gunicorn به طور خودکار پردازش‌هایی را که از کار افتاده‌اند، راه‌اندازی مجدد می‌کند، که به حفظ پایداری برنامه کمک می‌کند.
  • سازگاری: Gunicorn با طیف گسترده‌ای از فریم‌ورک‌های وب پایتون، از جمله Flask، Django و Pyramid سازگار است.
  • منابع کم: Gunicorn نسبت به برخی از سرورهای دیگر، منابع سیستم کمتری مصرف می‌کند.

نصب Gunicorn

نصب Gunicorn بسیار ساده است و می‌توان آن را با استفاده از pip، مدیر بسته پایتون، انجام داد:

pip install gunicorn

توصیه می‌شود Gunicorn را در یک محیط مجازی (virtual environment) نصب کنید تا وابستگی‌های پروژه شما از وابستگی‌های سیستم جدا شوند.

اجرای یک برنامه Flask با Gunicorn

برای نشان دادن نحوه استفاده از Gunicorn، یک برنامه Flask ساده را در نظر بگیرید:

# app.py
from flask import Flask

app = Flask(__name__)

@app.route("/")
def hello():
    return "Hello, World!"

if __name__ == "__main__":
    app.run(debug=True)

برای اجرای این برنامه با Gunicorn، دستور زیر را در ترمینال وارد کنید:

gunicorn --workers 3 --bind 0.0.0.0:8000 app:app

در این دستور:

  • --workers 3: تعداد پردازش‌های کارگر (worker processes) را مشخص می‌کند. تعداد کارگران باید با توجه به تعداد هسته‌های CPU و میزان ترافیک برنامه تنظیم شود.
  • --bind 0.0.0.0:8000: آدرس و پورتی را که Gunicorn باید به آن گوش دهد، مشخص می‌کند. 0.0.0.0 به این معنی است که Gunicorn به تمام آدرس‌های IP موجود گوش می‌دهد و 8000 شماره پورت است.
  • app:app: نام فایل پایتون (app.py) و نام شیء برنامه Flask (app) را مشخص می‌کند.

پس از اجرای این دستور، Gunicorn برنامه Flask را روی پورت 8000 اجرا می‌کند. می‌توانید با مراجعه به http://localhost:8000 در مرورگر خود، برنامه را مشاهده کنید.

اجرای یک برنامه Django با Gunicorn

برای اجرای یک برنامه Django با Gunicorn، مراحل مشابهی را دنبال می‌کنیم. فرض کنید یک پروژه Django به نام myproject دارید که فایل wsgi.py در آن قرار دارد. برای اجرای این پروژه با Gunicorn، دستور زیر را در ترمینال وارد کنید:

gunicorn --workers 3 --bind 0.0.0.0:8000 myproject.wsgi:application

در این دستور:

  • myproject.wsgi:application: مسیر فایل wsgi.py و نام شیء برنامه Django (application) را مشخص می‌کند.

پس از اجرای این دستور، Gunicorn برنامه Django را روی پورت 8000 اجرا می‌کند.

پیکربندی Gunicorn با فایل پیکربندی

به جای استفاده از خط فرمان، می‌توان Gunicorn را با استفاده از یک فایل پیکربندی پیکربندی کرد. این روش برای پروژه‌های پیچیده‌تر که نیاز به تنظیمات سفارشی دارند، مناسب‌تر است. یک فایل پیکربندی Gunicorn معمولاً با پسوند .py ایجاد می‌شود. به عنوان مثال، یک فایل پیکربندی به نام gunicorn.conf.py می‌تواند به شکل زیر باشد:

# gunicorn.conf.py
workers = 3
bind = "0.0.0.0:8000"
timeout = 30
worker_class = "sync"

در این فایل:

  • workers: تعداد پردازش‌های کارگر را مشخص می‌کند.
  • bind: آدرس و پورتی را که Gunicorn باید به آن گوش دهد، مشخص می‌کند.
  • timeout: حداکثر زمان (به ثانیه) برای پردازش یک درخواست را مشخص می‌کند.
  • worker_class: نوع کارگر را مشخص می‌کند. sync یک کارگر سنکرون است که برای برنامه‌هایی که از I/O blocking استفاده می‌کنند، مناسب است.

برای اجرای Gunicorn با استفاده از این فایل پیکربندی، دستور زیر را در ترمینال وارد کنید:

gunicorn -c gunicorn.conf.py app:app

یا برای Django:

gunicorn -c gunicorn.conf.py myproject.wsgi:application

نکات مهم در پیکربندی Gunicorn

  • تعداد کارگران: تعداد کارگران را با توجه به تعداد هسته‌های CPU و میزان ترافیک برنامه تنظیم کنید. یک قانون سرانگشتی این است که تعداد کارگران را برابر با تعداد هسته‌های CPU + 1 تنظیم کنید.
  • نوع کارگر: نوع کارگر را با توجه به نوع برنامه خود انتخاب کنید. برای برنامه‌هایی که از I/O blocking استفاده می‌کنند، sync مناسب است. برای برنامه‌هایی که از I/O غیر blocking استفاده می‌کنند، gevent یا asyncio می‌توانند عملکرد بهتری داشته باشند.
  • زمان‌بندی (Timeout): زمان‌بندی را به گونه‌ای تنظیم کنید که به برنامه شما زمان کافی برای پردازش درخواست‌ها داده شود، اما از انتظار بیش از حد جلوگیری شود.
  • Log Level: سطح لاگ را تنظیم کنید تا اطلاعات کافی برای عیب‌یابی مشکلات برنامه داشته باشید.
  • Restarting: Gunicorn به طور خودکار پردازش‌هایی را که از کار افتاده‌اند، راه‌اندازی مجدد می‌کند. با این حال، ممکن است لازم باشد یک سیستم مدیریت فرآیند (process manager) مانند Supervisor یا systemd را برای نظارت بر Gunicorn و راه‌اندازی مجدد آن در صورت بروز مشکلات جدی‌تر، پیکربندی کنید.

نتیجه‌گیری

Gunicorn یک سرور WSGI HTTP قدرتمند و انعطاف‌پذیر است که برای دیپلوی برنامه‌های پایتون در محیط‌های تولید بسیار مناسب است. با استفاده از Gunicorn، می‌توانید برنامه‌های وب خود را به طور پایدار، مقیاس‌پذیر و با عملکرد بالا اجرا کنید. این مقاله به شما یک درک جامع از Gunicorn، نحوه نصب، پیکربندی و استفاده از آن برای اجرای پروژه‌های Flask و Django ارائه داد. با تسلط بر Gunicorn، می‌توانید گام مهمی در مسیر دیپلوی و DevOps با پایتون بردارید.

بدون دیدگاه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *