Django

2008-08-25 22 views
42

के लिए सबसे स्वच्छ और सबसे तेज़ सर्वर सेटअप मैं Django द्वारा संचालित एक मध्यम साइट को तैनात करने वाला हूं। मेरे पास एक समर्पित उबंटू सर्वर है।Django

मैं वास्तव में उलझन में हूं कि कौन से सर्वर सॉफ्टवेयर का उपयोग करना है। तो मैंने खुद को सोचा: क्यों stackoverflow पूछो नहीं।

क्या मैं के लिए देख रहा हूँ है:

  • आसान
  • फास्ट एंड संसाधनों पर आसान
  • की सेवा कर सकते हैं mediafiles
  • एक ही सर्वर
  • पर कई djangosites की सेवा करने में सक्षम स्थापित करने के लिए मैं संसाधनों को बेकार करने वाले PHP या किसी और चीज को स्थापित नहीं करना चाहूंगा, जिसके लिए मेरे पास कोई उपयोग नहीं है।

मैंने अपाचे, nginx और हल्के पर mod_wsgi और mod_python के बारे में सुना है। इनमें से कौन सा पेशेवर और विपक्ष है और क्या मैंने किसी को याद किया है?

@ बैरी: किसी भी तरह से मुझे लगता है कि अपाचे मेरे लिए फूला हुआ है। विकल्पों के बारे में क्या?

@BrianLy: ठीक है, मैं कुछ और mod_wsgi देखेंगे। लेकिन अगर मैं हल्के से स्थिर फाइलों की सेवा करता हूं तो मुझे अपाचे की आवश्यकता क्यों है? मैंने खुद को हल्के से django ऐप की सेवा करने में भी कामयाब रहा है। क्या वैसे भी बुरा है? - जो का उपयोग करता है-मामलों जब इन सही विकल्प हैं क्या lighty और nginx के बारे में: तो बेवकूफ beeing :-)

अद्यतन के लिए खेद है?

उत्तर

26

चूंकि मैं कुछ और गहराई से जवाब ढूंढ रहा था, इसलिए मैंने इस मुद्दे को गहराई से शोध करने का फैसला किया। अगर मुझे कुछ गलत समझा गया है तो कृपया मुझे बताएं।

कुछ सामान्य सिफारिश मीडिया को संभालने के लिए एक अलग वेबसर्वर का उपयोग करना है। अलग से, मेरा मतलब है एक वेबसर्वर जो Django नहीं चल रहा है।

फिर

  • Lighttpd (lighty)
  • Nginx (EngineX)
  • या कुछ अन्य हल्के वजन सर्वर, Django के लिए, आप नीचे विभिन्न जा सकते हैं: यह सर्वर उदाहरण के लिए किया जा सकता है पथ।

    • अपाचे के माध्यम से Django सर्व करें:: आप या तो

      • mod_python

        यह स्थिर है और सिफारिश की/अच्छी तरह से प्रलेखित तरीका है। विपक्ष: बहुत सारी मेमोरी का उपयोग करता है।

      • mod_wsgi

        मैं क्या समझ से, mod_wsgi एक नए विकल्प नहीं है। यह संसाधनों पर तेज़ और आसान प्रतीत होता है।

      • mod_fastcgi

        FastCGI का उपयोग कर जब आप किसी अन्य प्रक्रिया के लिए Django की प्रस्तुति को सौंपने कर रहे हैं। चूंकि mod_python में प्रत्येक अनुरोध में एक पायथन दुभाषिया शामिल है, इसलिए यह बहुत मेमोरी का उपयोग करता है। यह उस समस्या को बाईपास करने का एक तरीका है। इसके अलावा कुछ सुरक्षा चिंताओं भी हैं।

        आप क्या करते हैं कि आप अपने Django FastCGI सर्वर को एक अलग प्रक्रिया में शुरू करते हैं और फिर आवश्यकता होने पर इस प्रक्रिया को कॉल करने के लिए फिर से लिखने के माध्यम से अपाचे कॉन्फ़िगर करते हैं।

    या आप कर सकते हैं:

    (प्रलेखन का उल्लेख आप ऐसा कर सकते हैं कि:

    • अपाचे का उपयोग किए बिना लेकिन किसी अन्य सर्वर देशी रूप FastCGI का समर्थन करता है Django परोसें अगर आपके पास कोई अपाचे विशिष्ट ज़रूरत नहीं है। मुझे लगता है कि स्मृति को सहेजने का कारण होना चाहिए।)

      • Lighttpd

      इस सर्वर है कि यूट्यूब चलाता है। यह तेजी से और उपयोग करने में आसान लगता है, हालांकि मैंने मेमोरीलेक्स पर रिपोर्ट देखी है।

      • nginx

      मैं मानक का दावा है कि इस सर्वर भी तेजी से lighttpd से है देखा है। हालांकि यह ज्यादातर रूसी में दस्तावेज है।

    एक और बात, पाइथन में सीमाओं के कारण आपके सर्वर को फोर्क मोड में चलाना चाहिए, थ्रेडेड नहीं होना चाहिए।

    तो यह मेरा वर्तमान शोध है, लेकिन मुझे और राय और अनुभव चाहिए।

+4

mod_python मॉड्यूल को बहुत अधिक स्मृति का उपभोग करने की आवश्यकता नहीं है। यह विचार यह है कि यह शहरी मिथक का थोड़ा सा हो गया है, जब वास्तविकता यह है कि लोगों की स्मृति समस्याओं के कारण mod_python/Python स्थापित किया गया था और अपाचे को कैसे कॉन्फ़िगर किया गया था। पहला मुद्दा यह था कि पिछले पायथन में अक्सर साझा लाइब्रेरी के साथ स्थापित नहीं किया गया था। इसका मतलब है कि mod_python को इसे स्थिर रूप से लिंक करना था, जिससे पता स्थानांतरित होने के कारण स्थानीय स्मृति का उपयोग किया जा सकता था। दूसरी समस्या प्रीफर्क का उपयोग करने वाले लोग हैं, जो PHP के लिए बेहतर है लेकिन पाइथन के लिए बेकार है। –

5

डीजेंगो प्रोजेक्ट को तैनात करने का आधिकारिक तौर पर अनुशंसित तरीका अपाचे के साथ mod_python का उपयोग करना है। यह the documentation. में वर्णित है इसका मुख्य समर्थक यह है कि यह सबसे अच्छा दस्तावेज, सबसे समर्थित, और तैनाती का सबसे आम तरीका है। Con यह है कि यह शायद सबसे तेज़ नहीं है।

+2

हालांकि, Django Freenode पर समुदाय का समर्थन करने वाले Django सहमत हैं कि दस्तावेज़ पुराने हैं, आधिकारिक तौर पर अनुशंसित तरीका mod_wsgi है। – temoto

+0

मैं इसे अपाचे पर नहीं जा सका और मैंने कई बार कोशिश की, मुझे समर्थन बहुत अच्छा नहीं मिला, ट्यूटोरियल केवल पहेली का एक टुकड़ा दिखाते हैं। ऐसा लगता है कि आपको एक अपाचे विशेषज्ञ बनना है .. मुझे सुझाव है कि सॉकेट का उपयोग करके इवेंटलेट या nginx/uwsgi के साथ nginx/gunicorn का सुझाव दें। दोनों महान काम करते हैं और कॉन्फ़िगर करने में आसान हैं! – radtek

6

जैसा कि @ बैरी ने कहा, दस्तावेज mod_python का उपयोग करता है। मैंने उबंटू को सर्वर के रूप में उपयोग नहीं किया है, लेकिन Solaris पर mod_wsgi के साथ अच्छा अनुभव था। mod_wsgi साइट पर आप mod_wsgi and Django के लिए दस्तावेज़ ढूंढ सकते हैं।

अपनी आवश्यकताओं की एक त्वरित समीक्षा:

  • आसान सेटअप को मैंने पाया Apache 2.2 काफी निर्माण और स्थापित करने के लिए आसान।
  • संसाधनों पर तेज़ और आसान मैं कहूंगा कि यह आपके उपयोग और यातायात पर निर्भर करता है। * आप अपाचे का उपयोग करके सभी फ़ाइलों को सर्वर नहीं करना चाहते हैं और सर्वर स्थिर फ़ाइलों के लिए LightTPD (lighty) का उपयोग करें।
  • मीडिया फ़ाइलों की सेवा कर सकते हैं मुझे लगता है कि आप छवियों, फ्लैश फाइलों का मतलब है? अपाचे यह कर सकता है।
  • उसी सर्वर पर एकाधिक साइटें अपाचे पर वर्चुअल सर्वर होस्टिंग।
  • अन्य एक्सटेंशन इंस्टॉल नहीं करें अपाचे कॉन्फ़िगरेशन में जो कुछ भी आप नहीं चाहते हैं उसे टिप्पणी करें।
+0

मुझे इस तरह का एक सेटअप मिला है - मैं साइट की अधिकांश सेवा करने के लिए mod_wsgi का उपयोग कर रहा हूं लेकिन/मीडिया और/admin_media से स्थैतिक फ़ाइलों की सेवा को संभालने के लिए अपाचे को मजबूर करने के लिए उपनाम निर्देशों का उपयोग कर रहा हूं। यह देखते हुए कि हम "मध्यम आकार की साइट" के बारे में बात कर रहे हैं, शायद 'सरल' विकल्पों के साथ गड़बड़ करने की बहुत आवश्यकता नहीं है। –

1

यदि आप लाइटथेट्ड का उपयोग कर रहे हैं, तो आप Django की सेवा के लिए फास्टसीजीआई का भी उपयोग कर सकते हैं। मुझे यकीन नहीं है कि गति mod_wsgi से कैसे तुलना करती है, लेकिन यदि स्मृति सही तरीके से कार्य करती है, तो आपको mod_wsgi के साथ कुछ लाभ मिलेगा जिन्हें आप mod_python के साथ नहीं प्राप्त करेंगे। मुख्य बात यह है कि आप प्रत्येक एप्लिकेशन को अपनी प्रक्रिया दे सकते हैं (जो मल्टी-कोर कंप्यूटरों का लाभ लेने के लिए अलग-अलग ऐप्स की याद रखने के लिए वास्तव में सहायक है।

संपादित करें: बस अपने संबंध में जोड़ने के लिए nginix के बारे में अद्यतन करें, अगर स्मृति सही ढंग से फिर से कार्य करती है, तो nginix concurrency को संभालने के लिए "ग्रीनलेट्स" का उपयोग करता है। इसका मतलब है कि आपको यह सुनिश्चित करने के लिए थोड़ा और सावधान रहना पड़ सकता है कि एक ऐप सभी सर्वर के समय को नहीं खाता है।

+0

nginx एक एकल थ्रेडेड सर्वर है; लेकिन बैकएंड (या तो HTTP, फास्टसीजीआई या जो कुछ भी) अलग प्रक्रियाएं हैं। – Javier

1

हम अपने सभी Django तैनाती के लिए nginx और FastCGI का उपयोग करते हैं। यह ज्यादातर इसलिए है क्योंकि हम आमतौर पर स्लाइसहोस्ट पर तैनात होते हैं, और अपाचे को हमारी सभी याददाश्त दान नहीं करना चाहते हैं। मुझे लगता है कि यह हमारा "उपयोग केस" होगा।

अधिकतर रूसी में प्रलेखन के बारे में टिप्पणी के लिए - मुझे English wiki पर अधिकतर जानकारी बहुत उपयोगी और सटीक होने के लिए मिली है। इस साइट में Django के लिए नमूना विन्यास भी है, जिससे आप अपनी खुद की nginx विन्यास tweak कर सकते हैं।

+0

मुझे एक बार nginx के साथ समस्या थी जो अंग्रेजी दस्तावेज में पूरी तरह से समझाया नहीं गया था। मैं अनुवादक (Google) के माध्यम से एक रूसी रेखा चला गया और समस्या हल हो गई। तो दस्तावेज़ीकरण का रूसी पक्ष अधिक पूरा है। – stesch

+0

@stesch: दिलचस्प। विस्तृत करने के लिए परवाह? – Javier

2

सबसे अच्छा कॉन्फ़िगरेशन मुझे नहीं लगता है। लेकिन यहां है:

  1. अनुरोधों के लिए nginx का उपयोग करें (ऐप के लिए गतिशील, स्थिर सामग्री सीधे)।
  2. गतिशील सामग्री की सेवा के लिए पाइथन वेब सर्वर का उपयोग करें। अजगर आधारित वेब सर्वर के लिए

दो सबसे तेजी से समाधान है:

आप (Django के लिए मौजूदा सबसे अच्छा विन्यास को खोजने के लिए अब भी गूगल पर गौर करने की जरूरत है विकास में)।

2

मैं nginx (0.6.32 taken from Sid) mod_wsgi के साथ उपयोग कर रहा हूं।यह बहुत अच्छी तरह से काम करता है, हालांकि मैं यह नहीं कह सकता कि यह विकल्प से बेहतर है क्योंकि मैंने कभी भी कोशिश नहीं की है। Nginx memcached समर्थन निर्मित है, जो शायद डीजेगो कैशिंग मिडलवेयर के साथ अंतःक्रिया कर सकता है (मैं वास्तव में इसका उपयोग नहीं करता, इसके बजाय मैं पाइथन-मेमकैच का उपयोग करके मैन्युअल रूप से कैश भरता हूं और परिवर्तन किए जाने पर इसे अमान्य कर देता हूं), इसलिए कैश पूरी तरह से हिट करता है बाईपास Django (मेरी विकास मशीन प्रति सेकंड 3000 अनुरोधों की सेवा कर सकते हैं)।

एक चेतावनी: nginx 'mod_wsgi अत्यधिक नामित नापसंद स्थानों (यह उनके SCRIPT_NAME में पारित करने के लिए कोशिश करता है), इसलिए स्पष्ट' error_page 404 = @django 'होगा कई अस्पष्ट त्रुटियों का कारण। मुझे इसे ठीक करने के लिए mod_wsgi स्रोत पैच करना पड़ा।

2

मैं सभी विकल्पों को समझने के लिए भी संघर्ष कर रहा हूं। this blog post में मुझे mod_pysgon की तुलना में mod_wsgi के कुछ लाभ मिले।

एक छोटे से वीपीएस पर एकाधिक कम ट्रैफिक साइट रैम खपत को प्राथमिक चिंता बनाती है, और mod_python वहां एक खराब विकल्प की तरह लगता है। लाइटटीपीडी और फास्टसीजीआई का उपयोग करके, मैंने एक साधारण डीजेगो साइट के न्यूनतम मेमोरी उपयोग को 58 एमआईबी वर्चुअल और 6.5 एमआईबी निवासी (एक गैर-रैम-भारी अनुरोध को पुनरारंभ करने और सेवा करने के बाद) प्राप्त करने में कामयाब रहा है।

मैंने देखा है कि डेबियन एच्च पर पायथन 2.4 से 2.5 तक अपग्रेड करने से पाइथन प्रक्रियाओं की न्यूनतम स्मृति पदचिह्न कुछ प्रतिशत तक बढ़ गई है। दूसरी तरफ, 2.5 के बेहतर मेमोरी प्रबंधन की लंबी चल रही प्रक्रियाओं पर एक बड़ा विपरीत प्रभाव हो सकता है।

9

मैं Cherokee का उपयोग कर रहा हूं।

their benchmarks (उनके साथ नमक का अनाज) के अनुसार, यह लाइटटैड और nginx दोनों से बेहतर लोड संभालता है ... लेकिन इसलिए मैं इसका उपयोग नहीं करता हूं।

मैं इसका उपयोग करता हूं क्योंकि यदि आप cherokee-admin टाइप करते हैं, तो यह एक नया सर्वर शुरू करता है जिसमें आप लॉग इन कर सकते हैं (एक बार पासवर्ड के साथ) और पूरे सर्वर को एक खूबसूरती से किए गए वेबमिन के माध्यम से कॉन्फ़िगर करें। यह एक हत्यारा सुविधा है। इसने मुझे पहले से ही लॉट बचाया है। और यह मेरे सर्वर को बहुत सारे संसाधनों को बचा रहा है!

django के लिए, मैं इसे एक थ्रेडेड एससीजीआई प्रक्रिया के रूप में चला रहा हूं। अच्छा काम करता है। चेरोकी भी इसे चल सकता है। फिर, बहुत अच्छी सुविधा।

वर्तमान उबंटू रेपो संस्करण बहुत पुराना है इसलिए मैं सलाह देता हूं कि आप their PPA का उपयोग करें। सौभाग्य।

2

इसे आसान रखें: Django recommends Apache and mod_wsgi (or mod_python)। यदि मीडिया फ़ाइलों की सेवा करना आपकी सेवा का एक बहुत बड़ा हिस्सा है, तो अमेज़ॅन एस 3 या रैकस्पेस क्लाउडफाइल पर विचार करें।

+0

+1। अपाचे + mod_wsgi अनुशंसित है। हालांकि दावों के बारे में लिंक की कमी। – muhuk

+2

अपाचे को कॉन्फ़िगर करना nginx/lighttpd से सरल नहीं है। – temoto

1

ऐसे कई तरीके हैं, दृष्टिकोण है कि कारण this.For, मैं ध्यान से DjangoAdvent.com पर तैनाती प्रक्रिया से संबंधित लेख पढ़ने के लिए सलाह देते हैं करने के लिए कर रहे हैं: - एरिक Florenzano परिनियोजित Django FastCGI के साथ: http://djangoadvent.com/1.2/deploying-django-site-using-fastcgi/ भी पढ़ें: माइक मेलोन - स्केलिंग Django Stochastictechnologies ब्लॉग: सही Django सेटअप मिकेल होएघ ब्लॉग: 35% प्रतिक्रिया समय-सुधार-स्विचिंग-uwsgi-nginx

सादर

2

मेरी राय में सबसे अच्छा/सबसे तेजी से ढेर varnish- है nginx-uwsgi-Django। और मैं सफलतापूर्वक इसका उपयोग कर रहा हूं।

1

मुझे चेरोकी का उपयोग करने के लिए चेतावनी है। जब आप Django चेरोकी में परिवर्तन करते हैं तो इसे मारने और एक नया शुरू करने के बजाय पुरानी प्रक्रिया को बनाए रखा जाता है।

अपाचे पर मैं दृढ़ता से इस आलेख की अनुशंसा करता हूं।

http://www.djangofoo.com/17/django-mod_wsgi-deploy-exampl

, सेटअप करने के लिए इसका आसान मारने या परिवर्तन करने के बाद पुनर्स्थापित करने के लिए आसान।

बस टर्मिनल

sudo /etc/init.d/apache2 restart 

में टाइप करें और परिवर्तन तुरन्त देखा जाता है।