با سلام
ابتدا اگر مطلب رو در جای اشتباهی می ذارم ار مدیران محترم در خواست می کنم اونو به جای درست منتقل کنند.
مدت زیادی به دنبال یه هاست اشتراکی گشتم که از زبان پایتون نسخه 3 پشتبانی کنه ولی از اونجا که آموزش ساده و جمع و جوری توی اینترنت برای این موضوع وجود نداره (من ندیدم) بیشتر مدیران هاست در هاست هاشون از این زبان قدرتمند پشتیبانی نمی کنند. تا اونجا بالاخره مجبور شدم برای کار خودم یه وی پی اس بگیرم
من بر روی سیستم عامل دبیان 7 این کار رو انجام داده ام احتمالا بر روی بقیه سیستم عامل ها هم شبیه به همین باید باشه.
استانداردی که برای پشتبانی از زبان پایتون برای برنامه نویسی وب وجود داره wsgi است. در آپاچی اگر بخواهیم پشتیبانی از این زبان رو با این استاندارد داشته باشیم باید mod_wsgi رو نصب و فعال کنیم در دبیان کافیه این دستور رو بزنیم
کد:
$ sudo apt-get install libapache2-mod-wsgi-py3
در مرحله بعد باید بریم به سراغ تنظیمات
فرض کنید من یه ویرچوال هاست دارم به نام mysite.ir و می خوام این هاست از پایتون پشتبانی کنه
2 حالت کلی برای اجرای mod-wsgi وجود داره
- embeded
- daemon
حالت اجرای embeded
راه اندازی embeded خیلی راحت تره. این حالت پیشفرض اجرای mod wsgi است ولی عموم برنامه نویس های پایتونی اونو نمی پسندند. برای راه اندازی اون کافیه همچین تنطیاتی توی فایل تنظیمات هاست باشه
کد:
<Directory /var/www/mysite.ir/>
Options Indexes FollowSymLinks MultiViews ExecCGI
AddHandler cgi-script .cgi
AddHandler wsgi-script .wsgi .py
DirectoryIndex index.html index.py index.wsgi index.php index.pl
AllowOverride None
Order allow,deny
allow from all
</Directory>
وجود ExecCGI الزامیه ولی نیازی به AddHandler cgi-script .cgi وجود نداره
بعد از این کار می تونید برنامه هایی که با wsgi برای پایتون نوشته اید رو در فایل هایی با پسوند .py یا .wsgi بریدید و اونها رو مثل فایل های php اجرا کنید
یه مثالش این کده که نشون می ده mod wsgi داره در چه حالتی اجرا می شه
کد:
def application(environ, start_response):
status = '200 OK'
if not environ['mod_wsgi.process_group']:
output = 'EMBEDDED MODE'
else:
output = 'DAEMON MODE'
response_headers = [('Content-Type', 'text/plain'),
('Content-Length', str(len(output)))]
start_response(status, response_headers)
return [output]
حالت اجرای daemon
این حالت برای برنامه نویس های پایتونی بسیار محبوب تره چون کنترل بیشتری بر اجرای برنامه خودشون دارند
برای این که این حالت فعال بشه علاوه بر کارایی که در حالت قبلی انجام می دادید باید ابتدای فایل کانفیک هم به این شکل تغییر کنه
کد:
ServerAdmin webmaster@localhost
WSGIDaemonProcess www.mysite.ir user=www-data group=www-data processes=1 threads=2 shutdown-timeout=10 inactivity-timeout=10 deadlock-timeout=10
WSGIProcessGroup www.mysite.ir
DocumentRoot /var/www/mysite.ir
ServerName mysite.ir
ServerAlias www.mysite.ir
به جای www-data باید نام کاربری و گروه مالک هاست رو بذارید سر فرصت همه رو توضیح خواهم داد
در نهایت فایل کانفیگ باید چیزی شبیه به این بشه
کد:
<VirtualHost *:80>
ServerAdmin webmaster@localhost
WSGIDaemonProcess www.mysite.ir user=www-data group=www-data processes=1 threads=2 shutdown-timeout=10 inactivity-timeout=10 deadlock-timeout=10
WSGIProcessGroup www.mysite.ir
DocumentRoot /var/www/mysite.ir/public_html
ServerName mysite.ir
ServerAlias www.mysite.ir
<Directory /var/www/mysite.ir/public_html/>
Options Indexes FollowSymLinks MultiViews ExecCGI
AddHandler wsgi-script .wsgi .py
DirectoryIndex index.html index.py index.wsgi index.php index.pl
AllowOverride None
Order allow,deny
allow from all
</Directory>
ErrorLog ${APACHE_LOG_DIR}/error.log
# Possible values include: debug, info, notice, warn, error, crit,
# alert, emerg.
LogLevel warn
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
دیگه ببخشید اگر کثیف و نا منظم نوشتم فایل کانفیگم رو مستقیم کپی کردم
بعد سر فرصت منظمش می کنم
سوالی هست در خدمتم
- - - Updated - - -
با سلام
فرض کنید که یه سری کتابخونه بر روی پایتون سیستم عامل نصب کرده اید که برای استفاده های خودتون به عنوان مدیر هاست بوده
اگر من مدیر هاست باشم علاقه ای ندارم که افرادی که روی سرور من هاست می گیرند دسترسی به این کتابخونه ها داشته باشند راه حل اینه که آپاچی از مفسری که سیستم عامل برای انجام کاراش استفاده می کنه استفاده نکرده و مفسر مخصوص خودش رو داشته باشه
برای اینکه یه کپی تمیز از مفسر پایتون سیستم در اختیار داشته باشید ابزاری به نام vitualenv به کمک میاد
خود ابتدا در یه جایی از سیستم یه مفسر تمیز جدید می سازیم برای اینکار از این دستور استفاده می کنیم
کد:
virtualenv --always-copy py3env
بعد از این کار در جایی از کانفیگ های آپاچی که به صورت سراسری لود می شه این خط رو می ذاریم
کد:
WSGIPythonHome /<PATH TO YOUR VIRTUAL ENV PYTHON>/py3env
خوب الان کافیه آپاچی رو یه بار ری استارت کنید تا این تنظیمات لود بشه
بهتره این خط تنظیم در فایل تنظیمات wsgi گذاشته بشه که برای من در این مسیر بود
کد:
/etc/apache/mods-enabled
برای تست می تونید یه فایل پایتونی بسازید و این کد رو در اون قرار بدید
کد:
def application(environ, start_response):
status = '200 OK'
import os
output = str(os)
response_headers = [('Content-Type', 'text/plain'),
('Content-Length', str(len(output)))]
start_response(status, response_headers)
return [output]
با خروجی گرفتن از این فایل در مرورگر باید چیزی شبیه به این ظاهر بشه
کد:
<module 'os' from '/<PATH TO YOUR VIRTUAL ENV PYTHON>/py3env/lib/python3.2/os.py'>
که نشون می ده برنامه های شما داره با پایتونی اجرا می شه که در مسیر
کد:
/<PATH TO YOUR VIRTUAL ENV PYTHON>/py3env/
قرار داره