پیاده سازی وب اپلیکیشن پایتون (Flask) در IIS ویندوز سرور

با اینکه ویندوز محیط مناسبی برای نصب پایتون نیست، گاهی مجبور به انجام اینکار هستیم. تو این مطلب تلاش می‌کنم، وب اپلیکیشن پایتون رو با استفاده از IIS تو محیط ویندوز سرور راه اندازی کنم. مسلما راه اندازی این پروژه تو محیط لینوکس با nginx یا apache ساده تره، اما وقتی تمام وب اپلیکیشن های شرکت تو محیط ویندوز سرور هست و شما برای ایجاد یک داشبورد دیتا نیاز به ساخت وب اپلیشن پایتون دارین، منطقی نیست که بخواهین اون رو تو سرور جدا گانه ای پیاده سازی کنین.نصب IIS به همراه FastCGI و پایتونتو محیط ویندوز سرور به مسیر زیر می‌ریم Server Manager -> Manage -> Add Role and Features:گزینه Role-based or feature-based installation انتخاب می‌کنیم سرور رو انتخاب می کنیم گزینه Web Server (IIS) انتخاب می‌کنیمروی Add Features کلیک می کنیمبجز موارد مورد نیاز معمول برای نصب IIS ، ویژگی CGI رو هم انتخاب می‌کنیمانتخاب Next و Install برای شروع فرآیند نصب حالا IIS رو اجرا می‌کنیماگه پیغام زیر نمایش داده شد کلید YES رو بزنین_ در غیر اینصورت نیاز هست که Web Platform Installer رو نصب کنینو حالا Web Platform Installer رو اجرا کنینکلمه WFastCGI رو جستجو کنین و این فیچر رو برای IIS و پایتون نصب کنیننسخه مناسب پایتون رو انتخاب کنین (نسخه 3.4 ) و کلیک Add و Install رو بزنیندر آخر پیغام زیر می‌بینیم نکته خیلی مهم : متاسفانه من با این روش نتونستم WfastCGI رو نصب کنم. بخاطر نبودن اینترنت در سرور عملیاتی و احتمالا تحریم بودن IP ایران تو مراحل نصب خطا داد(با وجود دسترسی به اینترنت) لذا برای رفع این مشکل مجبور شدم فایل رو بصورت آفلاین دانلود و نصب کنم.نصب WFastCGI به صورت آفلاینبرای دانلود WFastCGI به سایت pypi رفته و فایل رو دانلود می‌کنیم https://pypi.org/project/wfastcgi/و اقدام به نصب پکیج می‌کنیم pip install wfastcgiبه جای wfastcgi ، دایکتوری فایل دانلود شده رو به همراه اسم اون رو میزاریم و بعد این قابلیت رو فعال می‌کنیمwfastcgi-enableایجاد سایت جدیدیک سایت جدید در IIS ایجاد می‌کنیم و فایل پروژه فلسک رو که قبلا نوشتیم ،توی پوشه سایت کپی می‌کنیم و بعد به سراغ دایکتوری پایتون میریم و فایل wfastcgi.py رو هم کپی می‌کنیمتوجه داشته باشین که فایل wfastcgi.py ممکنه تو مسیر روت C:\Python34 یا C:\Python34_x86 و یا حتی تو پوشه site-packages باشههمونطور که می‌بینین تو پوشه mysite حتما باید دو فایل وجود داشته باشه. فایل app.py که کد پایتون وب اپلیکیشن فلسک هست و فایل wfastcgi.py مربوط یه فیجر نصب شدهبین ماژول های سایت، روی “Handler Mappings” کلیک می‌کنیم و “Add Module Mapping” رو انتخاب می‌کنیمتنظیمات رو دقیقا مثل تصویر انجام می‌دیم .دقت کنید که ممکنه مسیر پایتون و مسیر سایتمون متفاوت باشه، اما حتما باید Python.exe و wfastcgi.py رو داشته باشیم. برای مثال : C:\Python34\Python.exe|C:\inetpub\wwwroot\mysite\wfastcgi.py روی “Request Restrictions” کلیک کنین و مطمئن بشین که تیک زده نشده تو مرحله بعد Yes رو انتخاب کنینحالا توی IIS به تنظیمات روت میریم و روی FastCGI Settings کلیک می‌کنیم روی “…” جلو Environment Variables بزنین تا بتونیم مقادیر مورد نیاز رو ست کنیماینجا دو مقدار باید ست بشه، اول PYTHONPATH ،که مسیر پوشه سایت ایجاد شده هستو دوم WSGI_HANDLER ، با مقدار app.app (دقت کنین که وقتی اسم اپلیکیشن app.py باشه اسم انتخابی میشه app.app )حالا OK رو کلیک کنین و سایت رو browse کنیندرنهایت باید وب کانفیگ شبیه به زیر برای اپلیکیشن ایجاد شده باشه:<?xml version=&quot1.0&quot encoding=&quotUTF-8&quot?> <configuration> <system.webServer> <handlers> <add name=&quotFlaskHandler&quot path=&quot*&quot verb=&quot*&quot modules=&quotFastCgiModule&quot scriptProcessor=&quotC:\Python\Python.exe|C:\PySite\wfastcgi.py&quot resourceType=&quotUnspecified&quot /> </handlers> </system.webServer> </configuration>کد استفاده شده تو فایل app.py :from flask import Flask app = Flask(__name__) @app.route(&quot/&quot) def hello(): return &quotHello from FastCGI via IIS!&quot if __name__ == &quot__main__&quot: app.run()اگه تمام مراحل بالا رو درست انجام داده باشین، می‌تونین خروجی سایت رو روی IIS ببینین و با کمک Binding port و URL دلخواهتون رو برای سایت تنظیم کنین.منابع :medium.compypi.org