okasha:deployment
اختلافات
عرض الاختلافات بين النسخة المختارة و النسخة الحالية من الصفحة.
جانبي المراجعة السابقةالمراجعة السابقة | |||
okasha:deployment [2012/02/06 16:19] – [عبر خادم python-paste المنضدد] alsadi | okasha:deployment [2015/04/23 03:21] (حالي) – تحرير خارجي 127.0.0.1 | ||
---|---|---|---|
سطر 1: | سطر 1: | ||
+ | ====== طرق النشر ====== | ||
+ | إن هناك عشرات الطرق لإطلاق تطبيقات عكاشة شأنه في ذلك شان تطبيقات WSGI حيث أنها معايير كتابة تطبيقات الويب في بايثون. ومن هذه الطرق | ||
+ | |||
+ | الطريقة التي ننصح بها هي mod_wsgi بشكل رسمي وعبر python-paste للاختبار والتطوير | ||
+ | |||
+ | ===== طريقة CGI البائدة وما يشبهها ===== | ||
+ | استخدم دالة [[http:// | ||
+ | |||
+ | ضع ذاك الكود (كود الدالة وإنشاء الكائن ثم استدعاء الدالة مع تمرير التطبيق لها) في ملف ثم ضعه في cgi-bin ثم اسمح بتنفيذه. | ||
+ | |||
+ | ===== عبر خادم python-paste المنضد ===== | ||
+ | انظر صفحة [[sample1]] | ||
+ | |||
+ | ===== عبر mod_proxy في apache ===== | ||
+ | لنفرض أن التطبيق يعمل على خادم paste الضمني على المنفذ 8080 ويستمع فقط للطلبات المحلية على العنوان 127.0.0.1 أي localhost حتى نجعله متوفر عبر خادم apache العام على منفذ 80 يمكننا بكل بساطة أن نضيف ما يلي إلى إعدادات Apache | ||
+ | < | ||
+ | ProxyPass | ||
+ | ProxyPassReverse | ||
+ | </ | ||
+ | |||
+ | وفي هذه الحالة ستحال الطلبات القدمة إلى المنفذ 80 إن كانت | ||
+ | |||
+ | * للمزيد انظر وثائق [[http:// | ||
+ | |||
+ | ===== عبر google app engine ===== | ||
+ | لنفرض أن لديك تطبيق ويب اسمه test.py يحتوي على فئة اسمها MyWebApp ونريد تشغيله على غوغل apps engine لذا نعمل ملف الذي يشغله وليكن اسمه apptest.py مثلا هكذا: | ||
+ | |||
+ | <code 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, | ||
+ | staticBaseDir={'/ | ||
+ | ); | ||
+ | run_wsgi_app(application) | ||
+ | </ | ||
+ | |||
+ | ونعمل ملف app.yaml نخبره أن يحل كل شيء إلى apptest.py هكذا | ||
+ | < | ||
+ | application: | ||
+ | version: 1 | ||
+ | runtime: python | ||
+ | api_version: | ||
+ | |||
+ | handlers: | ||
+ | - url: .* | ||
+ | script: apptest.py | ||
+ | </ | ||
+ | |||
+ | بعدها قم بتجربته فإن كان كل شيء على خير ما يرام يمكنك نقل تخديم الملفات الساكنة إلى google apps عوضا عن عكاشة بتعديل الملف app.yaml إلى | ||
+ | |||
+ | < | ||
+ | application: | ||
+ | version: 1 | ||
+ | runtime: python | ||
+ | api_version: | ||
+ | |||
+ | handlers: | ||
+ | - url: /_files | ||
+ | static_dir: files | ||
+ | |||
+ | - url: .* | ||
+ | script: apptest.py | ||
+ | </ | ||
+ | |||
+ | **ملاحظة: | ||
+ | |||
+ | **ملاحظة: | ||
+ | |||
+ | * انظر [[http:// | ||
+ | |||
+ | ===== عبر mod_python في خادم apache ===== | ||
+ | |||
+ | ===== عبر mod_wsgi في خادم apache ===== | ||
+ | ==== طريقة توزيع الملفات ==== | ||
+ | قم بتثبيت إضافة mod_wsgi في خادم أباتشي من مدير الجزم (في أعجوبة اسم الحزم هو mod_wsgi) | ||
+ | |||
+ | تأكد من تثبيت الحزم التي قد تلزمك مثل python-kid أو python-elixir (هي لا تلزم عكاشة لكن من المفيد استعمالها) | ||
+ | |||
+ | بعد ذلك قم بإعادة توزيع الملفات بحيث تناسب الخادم فإن كان حسابك على الخادم يعطيك وصول إلى مجلد البيت وكنت تضع ملفاتك هناك ضعها خارج مجلد public_html. كذلك خصص مجلد لتضع فيه ما قد يلزمك من مكتبات بايثون بما فيها وحدة تطبيق الويب الخاص بك مثلا / | ||
+ | |||
+ | <code python> | ||
+ | # -*- coding: UTF-8 -*- | ||
+ | import sys, os, os.path | ||
+ | prefix=os.path.expanduser(' | ||
+ | pyprefix=os.path.expanduser(' | ||
+ | sys.path.insert(0, | ||
+ | from myapp import MyApp | ||
+ | application=MyApp( | ||
+ | os.path.join(prefix,' | ||
+ | staticBaseDir={'/ | ||
+ | ); | ||
+ | </ | ||
+ | |||
+ | هذا الملف يحدد / | ||
+ | |||
+ | ==== إعداد apache ==== | ||
+ | لنفرض أن لديك خادم وتريد تشغيل التطبيق فيه على جذر نطاق فرعي | ||
+ | <code xml> | ||
+ | < | ||
+ | ServerName myapp.myhost.org | ||
+ | |||
+ | WSGIDaemonProcess myapp.myhost.org processes=1 threads=15 display-name=myapp user=ahmad group=ahmadgroup | ||
+ | WSGIProcessGroup myapp.myhost.org | ||
+ | |||
+ | WSGIScriptAlias / / | ||
+ | |||
+ | </ | ||
+ | </ | ||
+ | |||
+ | يمكنك أيضا إلقاء عبئ تحميل الملفات الساكنة على خادم الويب وليس على عكاشة وذلك بإضافة المقطع التالي داخل السابق | ||
+ | |||
+ | <code xml> | ||
+ | DocumentRoot / | ||
+ | Alias / | ||
+ | |||
+ | Alias /media/ / | ||
+ | |||
+ | < | ||
+ | Order allow,deny | ||
+ | Allow from all | ||
+ | </ | ||
+ | </ | ||
+ | |||
+ | ===== عبر Fast CGI ===== | ||
+ | توفر flup دعم fast cgi تطليقات wsgi مثل عكاشة كل ما عليك هو عمل ملف يشبه الملف أدناه وتسميته myapp.fcgi وحفظه في مكان يراه خادم apache | ||
+ | |||
+ | <code python> | ||
+ | #! / | ||
+ | # -*- coding: UTF-8 -*- | ||
+ | |||
+ | sys.path.insert(0, | ||
+ | from flup.server.fcgi import WSGIServer | ||
+ | from myapp import MyApp | ||
+ | application=MyApp( | ||
+ | os.path.join(prefix,' | ||
+ | staticBaseDir={'/ | ||
+ | ); | ||
+ | |||
+ | if __name__ == ' | ||
+ | WSGIServer(application).run() | ||
+ | |||
+ | </ | ||
+ | |||
+ | انظر | ||
+ | * http:// | ||
+ | * http:// | ||
+ | |||
+ | ===== خوادم أخرى ===== | ||
+ | من أفضل خوادم WSGI أداءً وتوفيرا في الذاكرة وسرعة الاستجابة | ||
+ | |||
+ | * [[http:// | ||
+ | * [[http:// | ||
+ | * [[http:// | ||
+ | * https:// | ||
+ | ===== تقييم خوادم WSGI ===== | ||
+ | بعكس ما تتوقع فإن أداء twisted و tornado | ||
+ | |||
+ | * http:// | ||