Django 2.1 - How to use Django with Apache and mod_wsgi

अपाचे और mod_wsgi के साथ Django का उपयोग कैसे करें




django

अपाचे और mod_wsgi के साथ Django का उपयोग कैसे करें

Apache और mod_wsgi साथ Django को तैनात करना Django को mod_wsgi में mod_wsgi का एक आजमाया और परखा हुआ तरीका है।

mod_wsgi एक अपाचे मॉड्यूल है जो Django सहित किसी भी पायथन WSGI एप्लिकेशन को होस्ट कर सकता है। Django अपाचे के किसी भी संस्करण के साथ काम करेगा जो mod_wsgi का समर्थन करता है।

Mod_wsgi का उपयोग करने के तरीके के बारे में सभी विवरणों के लिए आधिकारिक mod_wsgi प्रलेखन आपका स्रोत है। आप शायद स्थापना और कॉन्फ़िगरेशन प्रलेखन के साथ शुरू करना चाहते हैं।

मूल विन्यास

एक बार mod_wsgi स्थापित और सक्रिय हो जाने के बाद, अपने Apache सर्वर की httpd.conf फ़ाइल को संपादित करें और निम्नलिखित जोड़ें। यदि आप 2.4 से अधिक पुराने अपाचे के एक संस्करण का उपयोग कर रहे हैं, तो Require all granted Allow from all साथ Require all granted प्रतिस्थापित करें और लाइन Order deny,allow को भी जोड़ें Order deny,allow इसके बारे में Order deny,allow

WSGIScriptAlias / /path/to/mysite.com/mysite/wsgi.py
WSGIPythonHome /path/to/venv
WSGIPythonPath /path/to/mysite.com

<Directory /path/to/mysite.com/mysite>
<Files wsgi.py>
Require all granted
</Files>
</Directory>

WSGIScriptAlias लाइन में पहला बिट वह बेस URL पथ है, जिस पर आप अपने एप्लिकेशन की सेवा करना चाहते हैं ( / रूट url को इंगित करता है), और दूसरा "WSGI फ़ाइल" का स्थान है - नीचे देखें - अपने सिस्टम पर, आमतौर पर अंदर आपका प्रोजेक्ट पैकेज (इस उदाहरण में mysite )। यह अपाचे को उस फ़ाइल में परिभाषित WSGI एप्लिकेशन का उपयोग करके दिए गए URL के नीचे किसी भी अनुरोध की सेवा करने के लिए कहता है।

यदि आप किसी virtualenv अंदर अपने प्रोजेक्ट के Python निर्भरताएँ स्थापित करते हैं, तो WSGIPythonHome का उपयोग करके virtualenv में पथ जोड़ें। अधिक विवरण के लिए mod_wsgi virtualenv मार्गदर्शिका देखें।

WSGIPythonPath लाइन सुनिश्चित करती है कि आपका प्रोजेक्ट पैकेज पायथन पथ पर आयात के लिए उपलब्ध है; दूसरे शब्दों में, जो import mysite काम करता है import mysite करता है।

<Directory> टुकड़ा सिर्फ यह सुनिश्चित करता है कि अपाचे आपकी wsgi.py फ़ाइल का उपयोग कर सकता है।

आगे हमें यह सुनिश्चित करना होगा कि WSGI एप्लिकेशन ऑब्जेक्ट मौजूद है। Django संस्करण 1.4 के रूप में, startproject ने आपके लिए एक बनाया होगा; अन्यथा, आपको इसे बनाने की आवश्यकता होगी। इस फ़ाइल में आपको जो डिफ़ॉल्ट सामग्री डालनी चाहिए, उसके लिए WSGI ओवरव्यू प्रलेखन देखें, और आप इसमें और क्या-क्या जोड़ सकते हैं।

चेतावनी

यदि कई Django साइटें एक एकल mod_wsgi प्रक्रिया में चलाई जाती हैं, तो वे सभी जो भी पहले चलाने के लिए होती हैं। इसे बदलकर हल किया जा सकता है:

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "{{ project_name }}.settings")

में wsgi.py , करने के लिए:

os.environ["DJANGO_SETTINGS_MODULE"] = "{{ project_name }}.settings"

या mod_wsgi डेमॉन मोड का उपयोग करके और सुनिश्चित करें कि प्रत्येक साइट अपने स्वयं के डेमन प्रक्रिया में चलती है।

फ़ाइल अपलोड के लिए UnicodeEncodeError को ठीक UnicodeEncodeError

यदि आपको गैर-ASCII वर्णों वाली फ़ाइल नामों के साथ फ़ाइलें अपलोड करते समय एक UnicodeEncodeError मिलता है, तो सुनिश्चित करें कि Apache गैर-ASCII फ़ाइल नामों को स्वीकार करने के लिए कॉन्फ़िगर किया गया है:

export LANG='en_US.UTF-8'
export LC_ALL='en_US.UTF-8'

इस कॉन्फ़िगरेशन को रखने का एक सामान्य स्थान /etc/apache2/envvars

विवरण के लिए यूनिकोड संदर्भ गाइड की Files अनुभाग देखें।

mod_wsgi डेमन मोड का उपयोग करना

Mod_wsgi (गैर-विंडोज प्लेटफ़ॉर्म पर) चलाने के लिए "डेमॉन मोड" अनुशंसित मोड है। आवश्यक डेमॉन प्रक्रिया समूह बनाने और इसमें चलने के लिए Django उदाहरण को प्रस्तुत करने के लिए, आपको उपयुक्त WSGIDaemonProcess और WSGIProcessGroup निर्देशों को जोड़ना होगा। यदि आप डेमन मोड का उपयोग करते हैं, तो उपरोक्त कॉन्फ़िगरेशन के लिए एक और बदलाव की आवश्यकता है कि आप WSGIPythonPath उपयोग नहीं कर सकते हैं; इसके बजाय आपको उदाहरण के लिए, WSGIDaemonProcess लिए python-path विकल्प का उपयोग करना चाहिए:

WSGIDaemonProcess example.com python-home=/path/to/venv python-path=/path/to/mysite.com
WSGIProcessGroup example.com

यदि आप एक उपनिर्देशिका (इस उदाहरण में https://example.com/mysite ) में अपनी परियोजना की सेवा करना चाहते हैं, तो आप उपरोक्त कॉन्फ़िगरेशन में WSGIScriptAlias जोड़ सकते हैं:

WSGIScriptAlias /mysite /path/to/mysite.com/mysite/wsgi.py process-group=example.com

डेमॉन मोड सेट करने के विवरण के लिए आधिकारिक mod_wsgi दस्तावेज देखें।

फाइलें परोस रहे हैं

Django फ़ाइलों की सेवा नहीं करता है; यह आपके द्वारा चुने जाने वाले वेब सर्वर को छोड़ देता है।

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

  • Nginx
  • Apache का एक स्ट्रिप-डाउन संस्करण

यदि, हालांकि, आपके पास Django के रूप में समान Apache VirtualHost पर मीडिया फ़ाइलों की सेवा करने के अलावा कोई विकल्प नहीं है, तो आप Apache को स्थैतिक मीडिया के रूप में कुछ URL, और दूसरों के लिए mod_wsgi इंटरफ़ेस का उपयोग करके Django में सेट कर सकते हैं।

यह उदाहरण साइट की जड़ में Django सेट करता है, लेकिन robots.txt , favicon.ico , और /static/ और /media/ URL स्थान में कुछ भी स्थिर फ़ाइल के रूप में कार्य करता है। अन्य सभी URL को mod_wsgi का उपयोग करके परोसा जाएगा:

Alias /robots.txt /path/to/mysite.com/static/robots.txt
Alias /favicon.ico /path/to/mysite.com/static/favicon.ico

Alias /media/ /path/to/mysite.com/media/
Alias /static/ /path/to/mysite.com/static/

<Directory /path/to/mysite.com/static>
Require all granted
</Directory>

<Directory /path/to/mysite.com/media>
Require all granted
</Directory>

WSGIScriptAlias / /path/to/mysite.com/mysite/wsgi.py

<Directory /path/to/mysite.com/mysite>
<Files wsgi.py>
Require all granted
</Files>
</Directory>

यदि आप 2.4 से अधिक पुराने अपाचे के एक संस्करण का उपयोग कर रहे हैं, तो Require all granted Allow from all साथ Require all granted प्रतिस्थापित करें और लाइन Order deny,allow को भी जोड़ें Order deny,allow इसके बारे में Order deny,allow

व्यवस्थापक फ़ाइलों की सेवा कर रहा है

जब django.contrib.staticfiles INSTALLED_APPS , तो Django विकास सर्वर स्वचालित रूप से व्यवस्थापक ऐप (और किसी भी अन्य इंस्टॉल किए गए एप्लिकेशन) की स्थिर फ़ाइलों को सेवा प्रदान करता है। हालांकि यह तब नहीं है जब आप किसी अन्य सर्वर व्यवस्था का उपयोग करते हैं। आप Apache की स्थापना के लिए जिम्मेदार हैं, या जो भी आप उपयोग कर रहे हैं वेब सर्वर, व्यवस्थापक फ़ाइलों की सेवा करने के लिए।

व्यवस्थापक फ़ाइलें Django वितरण के ( django/contrib/admin/static/admin ) में रहती हैं।

हम व्यवस्थापक फ़ाइलों को संभालने के लिए django.contrib.staticfiles का उपयोग करने की दृढ़ता से सलाह देते हैं (साथ ही पिछले अनुभाग में उल्लिखित वेब सर्वर के साथ; इसका मतलब है कि STATIC_ROOT में स्थिर फ़ाइलों को इकट्ठा करने के लिए collectstatic प्रबंधन आदेश का उपयोग करना, और फिर अपने वेब सर्वर को सेवा के लिए कॉन्फ़िगर करना। STATIC_ROOT पर), लेकिन यहां तीन अन्य दृष्टिकोण हैं:

  1. अपने दस्तावेज़ रूट के भीतर से व्यवस्थापक स्थिर फ़ाइलों के लिए एक प्रतीकात्मक लिंक बनाएं (इसके लिए अपाचे कॉन्फ़िगरेशन में +FollowSymLinks आवश्यकता हो सकती है)।
  2. व्यवस्थापक फ़ाइलों की वास्तविक स्थिति के लिए उपयुक्त URL (शायद STATIC_URL + admin/ ) को उपनाम करने के लिए, जैसा कि ऊपर दिखाया गया है, एक Alias निर्देश का उपयोग करें।
  3. व्यवस्थापक स्थिर फ़ाइलों की प्रतिलिपि बनाएँ ताकि वे आपके Apache दस्तावेज़ रूट के भीतर रहें।

अपाचे से Django के उपयोगकर्ता डेटाबेस के खिलाफ प्रमाणीकरण

Django अपाचे को उपयोगकर्ताओं को सीधे Django के प्रमाणीकरण बैकेंड के खिलाफ प्रमाणित करने की अनुमति देने के लिए एक हैंडलर प्रदान करता है। Mod_wsgi प्रमाणीकरण प्रलेखन देखें।