आपने "सेटअप" को क्या सबसे अच्छा काम करते देखा है? मैंने virtualenv का उपयोग किया और इस माहौल के अंदर अपनी django परियोजना को स्थानांतरित किया, हालांकि मैंने एक और सेटअप देखा है जहां आभासी वातावरण के लिए एक फ़ोल्डर है और अन्य परियोजनाओं के लिए।
virtualenv पायथन वातावरण को अलग करने का एक तरीका है; जैसे, इसमें तैनाती में खेलने के लिए एक बड़ा हिस्सा नहीं है - हालांकि विकास और परीक्षण के दौरान यह एक आवश्यकता है यदि अत्यधिक अनुशंसित नहीं है।
Virtualenv से आपको जो मूल्य मिलेगा, वह आपको यह सुनिश्चित करने की अनुमति देता है कि आवेदन के लिए पुस्तकालयों के सही संस्करण स्थापित हैं। तो इससे कोई फर्क नहीं पड़ता कि आप वर्चुअल एनवायरनमेंट को कहाँ चिपकाते हैं। बस यह सुनिश्चित करें कि आप इसे स्रोत कोड संस्करण प्रणाली के भाग के रूप में शामिल नहीं करते हैं।
फ़ाइल सिस्टम लेआउट महत्वपूर्ण नहीं है। आप निर्देशिका लेआउट और यहां तक कि कंकाल परियोजनाओं के गुणों को बाहर निकालने वाले बहुत सारे लेख देखेंगे जिन्हें आप एक प्रारंभिक बिंदु के रूप में क्लोन कर सकते हैं। मुझे लगता है कि यह एक कठिन आवश्यकता की तुलना में एक व्यक्तिगत प्राथमिकता है। यकीन है कि यह अच्छा है; लेकिन जब तक आप यह नहीं जानते कि यह आपकी तैनाती प्रक्रिया के लिए कोई मूल्य क्यों नहीं जोड़ता - तो ऐसा न करें क्योंकि कुछ ब्लॉग इसकी अनुशंसा करते हैं जब तक कि यह आपके परिदृश्य के लिए समझ में न आए। उदाहरण के लिए - setup.py
यदि आपके पास कोई निजी PyPi सर्वर नहीं है जो आपके परिनियोजन वर्कफ़्लो का हिस्सा है, तो फ़ाइल बनाने की आवश्यकता नहीं है।
मैं चीजों को एक तरह से कैसे सेट कर सकता हूं जिससे कई साइटों को एक सर्वर में होस्ट किया जा सके?
साइट सेटअप करने के लिए आपको दो काम करने होंगे:
- एक सर्वर जो पोर्ट 80 और / या पोर्ट 443 पर सार्वजनिक आईपी पर सुन रहा है यदि आपके पास एसएसएल है।
- "प्रक्रियाओं" का एक गुच्छा जो वास्तविक django स्रोत कोड चला रहे हैं।
लोग # 1 के लिए nginx का उपयोग करते हैं क्योंकि इसकी बहुत तेज़ प्रॉक्सी है और यह Apache जैसे व्यापक सर्वर के ओवरहेड के साथ नहीं आता है। यदि आप इसके साथ सहज हैं तो आप अपाचे का उपयोग करने के लिए स्वतंत्र हैं। कोई आवश्यकता नहीं है कि "शहतूत साइटों के लिए, नगनेक्स का उपयोग करें"; आपको बस उस पोर्ट पर सुनने वाली एक सेवा की आवश्यकता है, जो वास्तविक django कोड को चलाने वाली आपकी प्रक्रियाओं को रीडायरेक्ट (प्रॉक्सी) करना जानता है।
# 2 के लिए इन प्रक्रियाओं को शुरू करने के कुछ तरीके हैं। gevent / uwsgi सबसे लोकप्रिय हैं। यहां केवल एक चीज याद रखने की जरूरत नहीं है कि उत्पादन में रनसर का उपयोग न करें ।
वे परम न्यूनतम आवश्यकताएं हैं। आमतौर पर लोग सभी "django सर्वर" (# 2) को नियंत्रित करने के लिए किसी प्रकार के प्रोसेस मैनेजर को जोड़ते हैं। यहाँ आप देखेंगे upstart
और supervisor
उल्लेख किया है। मैं पर्यवेक्षक को पसंद करता हूं क्योंकि इसे पूरे सिस्टम (अपस्टार्ट के विपरीत) को संभालने की आवश्यकता नहीं है। हालांकि, फिर से - यह एक कठिन आवश्यकता नहीं है । आप पूरी तरह से screen
सत्रों का एक समूह चला सकते हैं और उन्हें अलग कर सकते हैं। नकारात्मक पक्ष यह है कि क्या आपके सर्वर को फिर से शुरू करना चाहिए, आपको स्क्रीन सत्रों को फिर से शुरू करना होगा।
व्यक्तिगत रूप से मैं सुझाऊंगा:
- # 1 के लिए Nginx
- Uwsgi और gunicorn के बीच अपनी पिक लें - मैं uwsgi का उपयोग करता हूं।
- बैकएंड प्रक्रियाओं के प्रबंधन के लिए पर्यवेक्षक ।
- आपके द्वारा होस्ट किए जा रहे प्रत्येक एप्लिकेशन के लिए व्यक्तिगत सिस्टम खाते (उपयोगकर्ता)।
मेरे द्वारा # 4 का कारण अनुमतियों को अलग करना है; फिर से, एक आवश्यकता नहीं है।
क्यों कुछ लोग gunicorn_django -b 0.0.0.0:8000 का उपयोग करने का सुझाव देते हैं और अन्य लोग gunicorn_django -b 127.0.0.1:8000 का सुझाव देते हैं? मैंने अमेज़ॅन EC2 उदाहरण में बाद का परीक्षण किया, लेकिन यह काम नहीं किया जबकि पूर्व ने समस्या के बिना काम किया।
0.0.0.0
इसका अर्थ है "सभी आईपी पते" - इसका एक मेटा एड्रेस (जो एक प्लेसहोल्डर एड्रेस है)। 127.0.0.1
एक आरक्षित पता है जो हमेशा स्थानीय मशीन की ओर इशारा करता है। यही कारण है कि इसका "लोकलहोस्ट" कहा जाता है। यह केवल एक ही सिस्टम पर चलने वाली प्रक्रियाओं के लिए उपलब्ध है।
आमतौर पर आपके पास सार्वजनिक आईपी पते पर सुनने वाले फ्रंट एंड सर्वर (उपरोक्त सूची में # 1) होता है। आपको सर्वर को एक आईपी पते पर स्पष्ट रूप से बांधना चाहिए ।
हालाँकि, यदि किसी कारण से आप डीएचसीपी पर हैं या आपको नहीं पता है कि आईपी एड्रेस क्या होगा (उदाहरण के लिए, यह एक नया प्रावधान है), तो आप इसे करने के लिए बाध्य करने के लिए nginx / apache / किसी अन्य प्रक्रिया को बता सकते हैं 0.0.0.0
। यह एक अस्थायी रोक-अंतर उपाय होना चाहिए ।
उत्पादन सर्वर के लिए आपके पास एक स्थिर आईपी होगा। यदि आपके पास एक गतिशील आईपी (डीएचसीपी) है, तो आप अंदर छोड़ सकते हैं 0.0.0.0
। यह बहुत दुर्लभ है कि आपके पास अपने उत्पादन मशीनों के लिए डीएचसीपी होगा।
इस पते पर बाइंडिंग गॉइंसेर / uwsgi उत्पादन में अनुशंसित नहीं है । यदि आप अपनी बैकएंड प्रक्रिया (gunicorn / uwsgi) को बाइंड करते हैं 0.0.0.0
, तो यह आपके सीधे-सीधे प्रॉक्सी (nginx / apache / etc) को दरकिनार करते हुए "सीधे" सुलभ हो सकता है; कोई केवल http://your.public.ip.address:9000/
आपके आवेदन को सीधे अनुरोध और एक्सेस कर सकता है, खासकर अगर आपका फ्रंट-एंड सर्वर (nginx) और आपका बैक एंड प्रोसेस (django / uwsgi / gevent) एक ही मशीन पर चल रहा हो ।
आप इसे करने के लिए स्वतंत्र हैं यदि आप एक फ्रंट-एंड प्रॉक्सी सर्वर को चलाने की परेशानी नहीं चाहते हैं।
Nginx की config फाइल के पीछे क्या तर्क है? बहुत सारे अलग-अलग कॉन्फ़िगरेशन फ़ाइलों का उपयोग करके बहुत सारे ट्यूटोरियल हैं जो मैं उलझन में हूं, जिस पर एक बेहतर है। उदाहरण के लिए, कुछ लोग "उपनाम / पथ / से / स्थिर / फ़ोल्डर" और अन्य "रूट / पथ / से / स्थिर / फ़ोल्डर" का उपयोग करते हैं। हो सकता है कि आप अपनी पसंदीदा कॉन्फ़िगरेशन फ़ाइल साझा कर सकें।
सबसे पहले आपको nginx के बारे में पता होना चाहिए कि यह Apache या IIS की तरह वेबसर्वर नहीं है । यह एक छद्म है। इसलिए आपको 'अपस्ट्रीम' / 'डाउनस्ट्रीम' और कई "सर्वर" जैसे विभिन्न शब्द दिखाई देंगे। कुछ समय ले लो और पहले nginx मैनुअल के माध्यम से जाना।
नगीनक्स स्थापित करने के लिए बहुत सारे अलग-अलग तरीके हैं; लेकिन यहां आपके सवाल का एक जवाब alias
बनाम है root
। root
एक स्पष्ट निर्देश है जो नगनेक्स के दस्तावेज़ रूट ("होम डायरेक्टरी") को बांधता है। यह वह निर्देशिका है, जब आप बिना किसी पथ के अनुरोध को देखेंगेhttp://www.example.com/
alias
"एक निर्देशिका के लिए एक नाम मानचित्र"। अन्य निर्देशिकाएं दस्तावेज़ रूट की उप निर्देशिका नहीं हो सकती हैं ।
हम साइट-उपलब्ध और साइटों / सक्षम / nginx के बीच एक सहसंबंध क्यों बनाते हैं?
यह डेबियन (और इबुन्तु जैसी डेबियन जैसी प्रणालियों) के लिए कुछ अनूठा है। sites-available
सिस्टम पर सभी वर्चुअल होस्ट / साइटों के लिए कॉन्फ़िगरेशन फ़ाइलों को सूचीबद्ध करता है। उस साइट या वर्चुअल होस्ट sites-enabled
को sites-available
"एक्टिवेट" करने के लिए एक सिमलिंक । यह कॉन्फ़िगरेशन फ़ाइलों को अलग करने और मेजबानों को आसानी से सक्षम / अक्षम करने का एक तरीका है।