أدوات المستخدم

أدوات الموقع


okasha:deployment

اختلافات

عرض الاختلافات بين النسخة المختارة و النسخة الحالية من الصفحة.

رابط إلى هذه المقارنة

جانبي المراجعة السابقة المراجعة السابقة
المراجعة التالية
المراجعة السابقة
okasha:deployment [2011/07/07 10:38]
alsadi
okasha:deployment [2015/04/23 00:21] (حالي)
سطر 1: سطر 1:
 +====== طرق النشر ======
 +إن هناك عشرات الطرق لإطلاق تطبيقات عكاشة شأنه في ذلك شان تطبيقات WSGI حيث أنها معايير كتابة تطبيقات الويب في بايثون. ومن هذه الطرق
 +
 +الطريقة التي ننصح بها هي mod_wsgi بشكل رسمي وعبر python-paste للاختبار والتطوير
 +
 +===== طريقة CGI البائدة وما يشبهها =====
 +استخدم دالة [[http://​www.python.org/​dev/​peps/​pep-0333/#​the-server-gateway-side|run_with_cgi]] الموجودة في برنامج ​ الصغير المرفق مع PEP 0333 هذه الدالة تستلم كائن تطبيق الويب.
 +
 +ضع ذاك الكود (كود الدالة وإنشاء الكائن ثم استدعاء الدالة مع تمرير التطبيق لها) في ملف ثم ضعه في cgi-bin ثم اسمح بتنفيذه.
 +
 +===== عبر خادم python-paste المنضد =====
 +انظر صفحة [[sample1]]
 +
 +===== عبر mod_proxy في apache =====
 +لنفرض أن التطبيق يعمل على خادم paste الضمني على المنفذ 8080 ويستمع فقط للطلبات المحلية على العنوان 127.0.0.1 أي localhost حتى نجعله متوفر عبر خادم apache العام على منفذ 80 يمكننا بكل بساطة أن نضيف ما يلي إلى إعدادات Apache
 +<​code>​
 +ProxyPass ​        /​myapp ​ http://​localhost:​8080/​
 +ProxyPassReverse ​ /​myapp ​ http://​localhost:​8080/​
 +</​code>​
 +
 +وفي هذه الحالة ستحال الطلبات القدمة إلى المنفذ 80 إن كانت ​ تبدأ ب /myapp إلى http://​localhost:​8080/​
 +
 +  * للمزيد انظر وثائق [[http://​httpd.apache.org/​docs/​2.0/​mod/​mod_proxy.html|mod_proxy]]
 +
 +===== عبر google app engine =====
 +لنفرض أن لديك تطبيق ويب اسمه test.py يحتوي على فئة اسمها MyWebApp ونريد تشغيله على غوغل apps engine لذا نعمل ملف الذي يشغله وليكن اسمه apptest.py مثلا هكذا:
 +
 +<code python>
 +#! /​usr/​bin/​python
 +# -*- coding: UTF-8 -*-
 +import sys, os, os.path
 +from test import webApp
 +
 +from google.appengine.ext import webapp
 +from google.appengine.ext.webapp.util import run_wsgi_app
 +
 +d=os.path.dirname(__file__)
 +application=MyWebApp(
 +    os.path.join(d,​ '​templates'​),​
 +    staticBaseDir={'/​_files/':​os.path.join(d,​ '​files'​)}
 +);
 +run_wsgi_app(application)
 +</​code>​
 +
 +ونعمل ملف app.yaml نخبره أن يحل كل شيء إلى apptest.py هكذا
 +<​file>​
 +application:​ okashaTest
 +version: 1
 +runtime: python
 +api_version:​ 1
 +
 +handlers:
 +- url: .*
 +  script: apptest.py
 +</​file>​
 +
 +بعدها قم بتجربته فإن كان كل شيء على خير ما يرام يمكنك نقل تخديم الملفات الساكنة إلى google apps عوضا عن عكاشة بتعديل الملف app.yaml إلى
 +
 +<​file>​
 +application:​ okashaTest
 +version: 1
 +runtime: python
 +api_version:​ 1
 +
 +handlers:
 +- url: /_files
 +  static_dir: files
 +
 +- url: .*
 +  script: apptest.py
 +</​file>​
 +
 +**ملاحظة:​** لا تستطيع استخدام قوالب formatTemplate لأنها غير متوفرة في بايثون 2.5 بل 2.6.
 +
 +**ملاحظة:​** عليك تعديل سطرين من كود [[http://​git.ojuba.org/​cgit/​okasha/​tree/​okasha/​baseWebApp.py|baseWebApp.py]] عكاشة من ''​except webAppBaseException as e''​ إلى صيغة بايثون القديمة ''​except webAppBaseException,​ e''​
 +
 +  * انظر [[http://​code.google.com/​appengine/​docs/​python/​tools/​webapp/​utilmodule.html#​run_wsgi_app|google app engine]]
 +
 +===== عبر mod_python في خادم apache =====
 +
 +===== عبر mod_wsgi في خادم apache =====
 +==== طريقة توزيع الملفات ====
 +قم بتثبيت إضافة mod_wsgi في خادم أباتشي من مدير الجزم (في أعجوبة اسم الحزم هو mod_wsgi)
 +
 +تأكد من تثبيت الحزم التي قد تلزمك مثل python-kid أو python-elixir (هي لا تلزم عكاشة لكن من المفيد استعمالها)
 +
 +بعد ذلك قم بإعادة توزيع الملفات بحيث تناسب الخادم فإن كان حسابك على الخادم يعطيك وصول إلى مجلد البيت وكنت تضع ملفاتك هناك ضعها خارج مجلد public_html. كذلك خصص مجلد لتضع فيه ما قد يلزمك من مكتبات بايثون بما فيها وحدة تطبيق الويب الخاص بك مثلا /​home/​ahmad/​pyapps/​ ثم اعمل ملف بايثون مهمته الوحيدة تعريف كائن اسمه application من صنف تطبيق الويب الخاص بك. سم ذاك الملف myapp.wsgi
 +
 +<code python>
 +# -*- coding: UTF-8 -*-
 +import sys, os, os.path
 +prefix=os.path.expanduser('​~/​myapp-files/'​)
 +pyprefix=os.path.expanduser('​~/​pyapps/'​)
 +sys.path.insert(0,​ pyprefix)
 +from myapp import MyApp
 +application=MyApp(
 +  os.path.join(prefix,'​templates'​),​
 +  staticBaseDir={'/​media/':​os.path.join(prefix,'​static-files'​)}
 +  );
 +</​code>​
 +
 +هذا الملف يحدد /​home/​ahmad/​pyapps/​ كمجلد للبحث عن مكتبات بايثون والتي من بينها myapp.py كذلك يحدد المجلد /​home/​ahmad/​myapp-files/​ كي يحتوي على القوالب والملفات الساكنة.
 +
 +==== إعداد apache ====
 +لنفرض أن لديك خادم وتريد تشغيل التطبيق فيه على جذر نطاق فرعي ​ sub-domain اسمه myapp.myhost.org عندها تكون الإعدادات كما يلي:
 +<code xml>
 +<​VirtualHost *:80>
 +  ServerName myapp.myhost.org
 +
 +    WSGIDaemonProcess myapp.myhost.org processes=1 threads=15 display-name=myapp user=ahmad group=ahmadgroup
 +    WSGIProcessGroup myapp.myhost.org
 +
 +    WSGIScriptAlias / /​home/​ahmad/​pyapps/​myapp.wsgi
 +
 +</​VirtualHost>​
 +</​code>​
 +
 +يمكنك أيضا إلقاء عبئ تحميل الملفات الساكنة على خادم الويب وليس على عكاشة وذلك بإضافة المقطع التالي داخل السابق
 +
 +<code xml>
 +    DocumentRoot /​home/​ahmad/​myapp-files/​static-files/​
 +    Alias /​favicon.ico /​home/​ahmad/​myapp-files/​static-files/​favicon.ico
 +
 +    Alias /media/ /​home/​ahmad/​myapp-files/​static-files/​
 +
 +    <​Directory /​home/​ahmad/​myapp-files/​static-files>​
 +    Order allow,deny
 +    Allow from all
 +    </​Directory>​
 +</​code>​
 +
 +===== عبر Fast CGI =====
 +توفر flup دعم fast cgi تطليقات wsgi مثل عكاشة كل ما عليك هو عمل ملف يشبه الملف أدناه وتسميته myapp.fcgi وحفظه في مكان يراه خادم apache
 +
 +<code python>
 +#! /​usr/​bin/​python
 +# -*- coding: UTF-8 -*-
 +
 +sys.path.insert(0,​ os.path.expanduser('​~/​projects/'​))
 +from flup.server.fcgi import WSGIServer
 +from myapp import MyApp
 +application=MyApp(
 +  os.path.join(prefix,'​templates'​),​
 +  staticBaseDir={'/​media/':​os.path.join(prefix,'​static-files'​)}
 +  );
 +
 +if __name__ == '​__main__':​
 +  WSGIServer(application).run()
 +
 +</​code>​
 +
 +انظر
 +  * http://​trac.saddi.com/​flup/​wiki/​FlupServers
 +  * http://​flask.pocoo.org/​docs/​deploying/​fastcgi/​
 +
 +===== خوادم أخرى =====
 +من أفضل خوادم WSGI أداءً وتوفيرا في الذاكرة وسرعة الاستجابة
 +
 +  * [[http://​projects.unbit.it/​uwsgi/​|uWSGI]]
 +  * [[http://​www.gevent.org/​|gEvent]]
 +  * [[http://​wiki.github.com/​william-os4y/​fapws3/​|FAPWS3]]
 +  * https://​github.com/​jonashaag/​bjoern
 +===== تقييم خوادم WSGI =====
 +بعكس ما تتوقع فإن أداء twisted و tornado ​ كان سئيا جدا في اختبارات الأداء.
 +
 +  * http://​nichol.as/​benchmark-of-python-web-servers
  
okasha/deployment.txt · آخر تعديل: 2015/04/23 00:21 (تحرير خارجي)