اجرای برنامه های Flask روی وب سرور IIS

شنبه, 27 آبان 1396
Flask IIS Python

چند وقت پیش به دلایلی نیاز شد تا یک برنامه نوشته شده با فریم ورک Flask رو روی وب سرور IIS ویندوز اجرا کنم. توی اینترنت جسنجو کردم ولی طبق انتظار چندین بار با تنظیمات مختلف یازی کردم تا بلاخره به نتیجه رسیدم. گفتم روش کار رو اینجا قرار بدم شاید به درد کسی دیگری هم بخوره. من در اینجا روش کار رو روی Windows 10 و پایتون 3.6.0 توضیح میدم.

1 - برای به کار انداختن IIS با پایتون از یک ماجول FastCGI که باید استفاده بکنیم. پس مرحله اول اینه که IIS رو نصب کنیم و CGI رو هم فعال کنیم

image

2 - مرحله دوم، نصب یک پکیچ پایتون هست به نام wfastcgi که با دستور زیر نصب می شه:

pip install wfastcgi

احتمالا نیاز باشه که دستور بالا رو درون یک ترمینال با دسترسی administrator اجرا بکنید. بعد از نصب پکج بالا، داخل فولدر [python folder]\Lib\site-packages یک فایل به نام wfastcgi.py ایجاد میشه. این فایل رو باید داخل فولدر روت تمام برنامه های Flask کپی کنید تا توسط ماجول FastCGI اجرا بشه.

3 – داخل کنسول مدیریتی IIS یک وب سایت جدید می سازیم.

image

4 – فایل wfastcgi.py رو داخل فولر روت وب سایت کپی می کنیم. فایل دیگری به نام flasktest.py درست میکنیم که کد برنامه ما هست و کدهای زیر رو توش می نویسیم:

from flask import Flask
 app = Flask(__name__)
@app.route('/')
 def hello_world():
     return 'سلام دنیا!!!!!'

 if __name__ == '__main__':
     app.run()

5 – روی نام سایت در پنل IIS کلیک می کنیم و گزینه Handler Mappings رو انتخاب می کنیم.

image

و سپس از منوی سمت راست Add Module Mapping … رو انتخاب می کنیم و مقادیر زیر رو پر می کنیم.

image

توجه کنید که من مقدار Executable رو به صورت زیر تنظیم کردم

"C:\Program Files\Python36\python.exe"|C:\inetpub\FlaskTest\wfastcgi.py

چند نکته وجود داره. یکی این که مسیر python.exe شما ممکنه متفاوت باشه. دوم این که مسیر wfastcgi.py که توی فولدر روت برنامه خودتون کپی کردین رو باید بدید و سوم دو طرف علامت | هیچ فاصله ای نباشد باشه. چهارم علامتهای " برای این الزامیه که توی مسیرم space وجود داره.

به این ترتیب به IIS می گیم که هر درخواستی به هر آدرسی به این سایت رسید تو باید مفسر پایتون رو اجرا کنی و اسکریپت wfastcgi.py رو بهش بدی تا اجرا کنه.

پیش از تایید کردن این صفحه دکمه Request Restrictions … رو کلیک کنید و مطمئن بشید که در قسمت Mapping تیک Invoke handler only if request is mapped to: تیک نخورده باشه.

موقع تایید، اگر پیغام زیر نمایش داده شد، دکمه Yes را بزنید.

image

6 – در پنل چپ IIS روی نام سرور کلیک کنید و روی FastCGI Settings در پنل وسط دابل کلیک کنید. باید یک رکورد مربوط به Handler ساخته شده در مرحله قبل در این ظاهر شده وجود داشته باشد

image

روی آن دابل کلیک کنید تا صفحه تنظیمات آن باز شود.

image

روی دکمه مشخص شده کلیک کنید تا دو متغیر مورد زیر را تعریف نماییم.

  • PYTHONPATH با مقدار C:\inetpub\FlaskTest (که در حقیقت مسیر فولدر روت برنامه ما هست)
  • WSGI_HANDLER با مقدار app (این هم نام فایل اصلی برنامه Flask ما هست که پسونود .py به .app تغییر داده شده. البته این نام می تونه flasktest.app.wsgi_app هم باشه. در در دوحالت فایل wfastcgi.py می فهمه)

نکته: اگه موقع نصب IIS در قسمت Application Development Features به همراهCGI ، گزینه ASP.NET 4.6 یا 3.5 هم نصب می کردیم در پنل تنظیمات وب سایت گزینه ای به نام Application Settings ظاهر می شد که می تونستیم این دو متغیر رو اونجا تعریف کنیم که در نهایت یک فایل web.config در فولدر روت سایت ایجاد می شد که این دو نتغیر درون آن مشخص شده بودند. بنابراین می تونستیم تمام کارها رو داخل پنل سایت انجام بدیم.

image

7- مرحله آخر تنظیم کردن دسترسیها هست. IIS باید به فولدر نصب پایتون دسترسی داشته باشد. از اونجا که به صورت پیش فرض سایتهای IIS با کاربر IIS_USERS اجرا می شن، باید دسترسی خواندن فولدر پایتون رو به کاربر IIS_USERS بدید.

خب اگه همه چیز درست پیش رفته باشه الان کار تمام شده.

Top