atVSG

0011001000110100

وحید امیری مطلق

توسعه دهنده وب و موبایل

نصب mod_wsgi در ویندوز


apache python mod_wsgi windows

mod_wsgi یک ماژول مخصوص وب سرور Apache هستش که پشتیبانی از رابط استاندارد WSGI رو به آپاچی اضافه میکنه. از اونجایی که تقریبا تمام فریم ورک های وب مدرن Python نیازمند وب سروری با پشتیبانی از WSGI هستن، نصب کردنش به یکی از نیازمندی های شروع استفاده از Python برای توسعه web app شده. متاسفانه نصبش برخلاف بقیه ماژول های آپاچی کمی دردسر داره (مخصوصا تحت ویندوز). در این پست نحوه نصبش در ویندوز رو توضیح میدم.

 

نکته: روش دیگه ای هم  بجز اونی که در ادامه میگم برای نصب mod_wsgi تحت ویندوز وجود داره و اونم اینه که فایل از قبل کامپایل شده ماژول رو (از اینجا دانلود کنید) به فرمت .pyd دانلود و در محلی بریزید و تنظیمات 3 خطی زیر رو که در ادامه توضیح میدم، متناسب با اون در httpd.conf وارد کنید. البته به نظرم اول از روش اصلی استفاده کنید و در صورتی که مشکلی بود از این روش برید.

 

نکته مهم: حتما و حتما باید توضیع های یکسانی از ابزار های مرتبط با Apache روی سیستم نصب و استفاده کنید. یعنی اگه ویندوز 64 بیتی دارید، نسخه 64 بیتی Apache رو دریافت کنید و همینطور نسخه 64 بیتی Python رو نصب کنید و این اصل رو همیشه موقع کار با Apache رعایت کنید.

 

این روش با Windows Server 2008 R2 و Windows 10 امتحان شده  که Apache 2.4 دانلود شده از Apache Lounge و همچنین Python 3.6 روی اون ها نصب شده بود. علاوه بر اون موارد باید حتما Visual C++ Build Tools 2015 روی سیستم نصب باشه(موقع نصب Windows 8.1 SDK و Windows 10 SDK رو انتخاب کنید) .

توجه کنید که Python باید برای تمام کاربران (All Users) (و نه فقط کاربر فعلی سیستم) نصب بشه. در زمان نصب هم میتونید تنظیمات پیشفرض رو قبول کنید ولی حتما Add to path رو انتخاب کنید تا Python و PIP تحت CMD در دسترس باشند.

نسخه های قدیمی تر این ماژول به صورت فایل .so ارائه میشده که نصبشون مستقل از python بود ولی نسخه های جدید تر با استفاده از ابزار PIP (که همزمان با نصب Python روی سیستم نصب میشه) باید روی سیستم نصب بشن. فرایند نصب با دانلود فایل های سورس این ماژول و compile کردنشون توسط فایل setup.py انجام میشه. در نهایت باید 3 خط به فایل httpd.conf اضافه کنید تا Apache بتونه Python و این ماژول رو load کنه و تنظیمات لازم رو انجام بده.

قبل از شروع به بخش System Properties ویندوز برید و از تب Advanced دکمه ی Environment Variables رو بزنید و در قسمت User variables دکمه ی New رو بزنید تا بتونیم یک مقدار جدید وارد کنیم. در قسمت Variable name بنویسید:

MOD_WSGI_APACHE_ROOTDIR

و در قسمت Variable value هم آدرس فولدری که Apache رو در اون نصب یا extract کردید رو وارد کنید. برای نمونه:

apache_windows_wsgi_python+environment_variable

برای شروع اول دستور زیر رو در یک پنجره command line اجرا کنید:

pip install mod_wsgi

 

کمی صبر کنید تا سورس کد ماژول دانلود و compile بشه. بعد از اون در صورت موفقیت آمیز بودن، دستور زیر رو در cmd وارد کنید تا تنظیماتی رو که باید به httpd.conf (فایل تنظیمات اصلی Apache) اضافه کنید به شما نشون بده:

mod_wsgi-express module-config

خروجی چیزی مثل تصویر زیر خواهد بود:

mod_wsgi-express_windows

همونطور که میشه دید، 3 خط خروجی داد که این ها رو باید جایی در فایل httpd.conf (در محل نصب Apache و درون فولدر conf) وارد کنید. من معمولا در ابتدای فایل httpd.conf و قبل از کامنت های توضیحات وارد می کنم. بعد از تمام این کار ها در نهایت Apache رو start یا restart کنید. الان برای اینکه مطمئن بشید mod_wsgi داره کار میکنه میتونید یک صفحه html ساده در document root آپاچی قرار بدید و response header های اون صفحه رو وقتی از طریق localhost بهش دسترسی پیدا میکنید، بررسی کنید. در صورت فعال شدن mod_wsgi باید در قسمت server همچین چیزی ببینید:

Apache/2.4.25 (Win64) mod_wsgi/4.5.15 Python/3.6 PHP/7.1.3

قسمت مهم وجود mod_wsgi در مقدار server هست.

نکته مهم: در صورتی که Apache رو به صورت یک service ویندوز اجرا میکنید، ممکنه بعد از وارد کردن 3 خط تنظیمات mod_wsgi module نتونید سرویس Apache رو، روشن یا ری استارت کنید و با خطای نامرتبط یا حتی خطایی رو به رو بشید که log هم نمیشه. این اتفاق برای من در ویندوز 10 افتاد در حالی که در ویندوز سرور 2008 مشکلی نداشت. در این حالت حتما سعی کنید Apache رو از طریق cmd در پوشه bin در محل نصب Apache اجرا کنید. باید پنجره ی cmd رو در محل قرارگیری فایل httpd.exe باز کنید و بنویسید: httpd



 برچسب ها: ، ، ، ، ، ، ،

 دیدگاه ها:
سوال یا دیدگاه؟

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