कैसे एक Django आवेदन को तैनात करने के लिए:

सभी को नमस्कार, यह मेरा पहला लेख है <» DesdeLinux (उनमें से कई जो मेरे ड्राफ्ट xD में हैं), मुझे आशा है कि यह आपके लिए उपयोगी है 😀

खैर, मेरी नई और वर्तमान नौकरी में, इस समय, Django के लिए कई प्रणालियों का प्रवास किया जा रहा है (कितना अजीब एह ?? xD) और विकास के अलावा मेरा एक कार्य, इन के उत्पादन में डाल रहा है, फिर? अच्छे प्रशिक्षु के रूप में, चूंकि यह मेरा पहली बार एक असली सर्वर पर उत्पादन में एक आवेदन डाल रहा था: $ मैंने स्टैक के सभी आवश्यक पैकेजों में से प्रत्येक के आधिकारिक डॉक्टर को पढ़ना शुरू कर दिया (Gunicorn और Supervisord सभी से अधिक), और यह देखते हुए कि ट्यूटोरियल स्पैनिश में वे कुछ पहलुओं में मेरे लिए बहुत स्पष्ट नहीं थे, मैंने उन चरणों के साथ एक मिनी गाइड बनाने का फैसला किया, जो कि मैंने Django, Gunicorn, Supervisord, Nginx और Postgresnl स्टैक के आधार पर एप्लिकेशन को उत्पादन में लाने के लिए पीछा किया।

उस स्थिति में जहां मैं काम करता हूं, सर्वर अभी भी डेबियन स्क्वीज़ पर चलते हैं, लेकिन गाइड को अन्य वितरणों के लिए पूरी तरह से मान्य होना चाहिए ... तो चलिए सीधे मुद्दे पर आते हैं और शुरू करते हैं:

मैं सुपर यूजर के रूप में काम करूंगा। सबसे पहले, निम्नलिखित पैकेजों की आवश्यकता है:

रंज -> पायथन के लिए पैकेज स्थापित करने और प्रबंधित करने के लिए उपकरण
aptitude install python-pip

nginx -> वेब सर्वर (हम इसे रिवर्स प्रॉक्सी के रूप में उपयोग करेंगे और स्टेटिक फाइल्स 'img, js, css' को कैश करने के लिए) हम इसे इसके साथ इंस्टॉल करते हैं:
aptitude install nginx

Supervisord -> हमारे आवेदन का प्रबंधन और निगरानी करने के लिए आवेदन, हालांकि यह बहुत अधिक के लिए उपयोग किया जाता है। हम इसे स्थापित करते हैं:
aptitude install supervisor

वर्धमान -> यह हमारे आवेदन के लिए एक अनुकूलित आभासी निष्पादन वातावरण बनाने में हमारी मदद करता है। हम इसे स्थापित करते हैं:
aptitude install python-virtualenv

अंगरखा -> अजगर के लिए वेब सर्वर (हम इसे अभी तक स्थापित नहीं करेंगे)

मुझे लगता है कि उन्हें पहले से ही स्थापित और कॉन्फ़िगर किया हुआ पोस्टग्रैक्स्ल चाहिए

मानस २ -> अजगर के लिए Postgresql कनेक्टर (हम इसे अभी भी स्थापित नहीं करेंगे)

Virtualenv के साथ आभासी वातावरण बनाएँ:

सबसे पहले हम काम करने वाले डायरेक्टरी में जाने वाले हैं जिसका उपयोग हम उत्पादन में लगाने के लिए करेंगे:
cd /var/www/

फिर इस निर्देशिका में हम आभासी वातावरण बनाएंगे:
virtualenv ENV-nombreApp

हम उस निर्देशिका की ओर बढ़ते हैं, जिसे मैंने अभी virtualenv बनाया है
cd ENV-nombreAPP

हम इस निर्देशिका में एप्लिकेशन को कॉपी करते हैं और अब हम पर्यावरण को सक्रिय करने के लिए आगे बढ़ते हैं:
source bin/activate

प्रॉम्प्ट को अब देखना चाहिए (ENV)usuario@host:

अब यह वह सब कुछ कर देगा जो हम करते हैं जो निर्देशिका में संग्रहीत है / var / www / ENV-appname / सिस्टम पैकेज को प्रभावित किए बिना

अब हम एप्लिकेशन डायरेक्टरी में जाते हैं:
cd nombreApp

हम एप्लिकेशन निर्भरता (यदि आवश्यक हो) की सूची स्थापित करने के लिए आगे बढ़ते हैं, जिसमें वे फ़ाइल में निर्दिष्ट होते हैं requirements.txt:
pip install -r requirements.txt

हम पैकेज को व्यक्तिगत रूप से भी स्थापित कर सकते हैं, उदाहरण के लिए, कनेक्टर को स्थापित करने के लिए PostgreSQL:
pip install psycopg2

गुइनॉर्न स्थापना और विन्यास:

इसे स्थापित करने के लिए हम इसे उसी तरह से करते हैं:
pip install gunicorn

अब हम इसे कॉन्फ़िगर करने जा रहे हैं, इसके लिए हम एक फाइल बनाने जा रहे हैं Gunicorn-deploy.py हमारे आवेदन की जड़ में, (हालांकि नाम कुछ भी हो सकता है) निम्न सामग्री के साथ:

bind = "127.0.0.1:8001" # dirección a donde accederá Nginx
logfile = "/var/www/logs/nombreApp/gunicorn.log" # dirección donde estarán los logs de la aplicación
workers = 1 # dependerá en medida de la carga de trabajo que tenga la aplicación, también depende del hardware con que se cuente
loglevel = 'info' # tipo de logging

सुपरवाइजर कॉन्फ़िगरेशन:

अब सेट करते हैं supervisord, इसके लिए हम कॉन्फ़िगरेशन फ़ाइल के साथ उत्पन्न करते हैं

echo_supervisord_conf > /etc/supervisord.conf

अब हम विन्यास फाइल को संपादित करते हैं:
vim /etc/supervisord.conf

और हम निम्नलिखित लाइनों को हटाकर असहज करते हैं; (अर्धविराम):

[unix_http_server] फ़ाइल = / tmp / पर्यवेक्षक .sock [पर्यवेक्षक] logfile = / var / log / supervisord.log logfile_maxbytes = 50MB logfile__upups = 10 loglevel = debug pidfile = / var / पर्यवेक्षक / pidfile_oda/ = 1024 [rpcinterface: पर्यवेक्षक] पर्यवेक्षक। Rrcinterface_factory = पर्यवेक्षक.rpcinterface: make_main_rpcinterface [पर्यवेक्षक]] serverurl = unix: इस कार्यक्रम: appname] कमांड = / var / www / ENV-appname / bin / django_unicorn-cornor / -Appname / appname / gunicorn-deploy.py निर्देशिका = / var / www / ENV-appname / appname / autostart = true autorestart = true user = उपयोगकर्ता नाम redirect_stderr = true std_logfile = / var / www / log / appname / supervisord.log

अब हम सिस्टम के साथ शुरू करने के लिए पर्यवेक्षक के लिए स्क्रिप्ट बनाएंगे, इसके लिए हम फाइल बनाएंगे:
vim /etc/init.d/supervisord

और हम निम्नलिखित सामग्री जोड़ते हैं:

 # सुपरवाइजर ऑटो-स्टार्ट # # विवरण: ऑटो-स्टार्ट सुपरवाइजर # प्रोसेसनाम: सुपरवाइजर # पिडफाइल: /वर / आरयूएन / सरूपर्विसोर्ड.पिड सुपरवाइजर = / usr / लोकल / बिन / सुपरवाइजर SUPERVISORCTL = / usr / लोकल / बिन / सुपरवाइजर केस $ 1 स्टार्ट में) इको-एन "शुरू सुपरवाइजर:" $ सुपरवीरोर्ड इको ;; रोक) इको-एन "रोकना पर्यवेक्षक:" $ SUPERVISORCTL शटडाउन इको ;; पुनः आरंभ) इको-एन "सुपरवाइजर को रोकना:" $ सुपरवेरसट्रेल शटडाउन इको इको-एन "सुपरवाइजर को प्रारंभ करना:" $ सुपरवॉरड इको ;; वह सी

और अब हम फ़ाइल को निष्पादित अनुमति देते हैं ताकि यह सिस्टम से शुरू हो सके:
sudo chmod +x /etc/init.d/supervisord

हम सेवा शुरू करने के लिए लिंक अपडेट करते हैं:
sudo update-rc.d supervisord defaults

हम सेवा शुरू करते हैं:
sudo /etc/init.d/supervisord start

नगीनक्स की स्थापना:

यह चरण भी काफी सरल है, हम निम्न कॉन्फ़िगरेशन फ़ाइल बनाएंगे nginx हमारे आवेदन के लिए:

vim /etc/nginx/sites-enabled/nombreApp

और हम आपको निम्नलिखित सामग्री जोड़ देंगे

सर्वर {सुनो 9001; # पोर्ट जहां वे nginx को server_name www.domain.com सुनना चाहते हैं; # या 192.168.0.100, पता है कि हम access_log /var/log/nginx/Appname.access.log का उपयोग करेंगे; # जहां हमारे पास एप्लिकेशन लॉग लोकेशन होगा / {# जहां www.dominio.com/ प्रॉक्सी_पास http://127.0.0.1:8001 तक पहुंचने पर nginx कॉल करेगा; xy_set_header होस्ट $ http_host; } स्थान / स्थिर / {# जहां www.dominio.com/static/ alias / var / www / ENV-appname / appname / staticfiles / दर्ज करते समय nginx पहुंच जाएगा; }}

और हम फिर से शुरू करते हैं:
service nginx restart

Django की स्थापना:

आइए django कॉन्फ़िगरेशन फ़ाइल को संशोधित करें:
vim nombreApp/settings.py

हम कहते हैं कि लाइन के लिए देखो DEBUG = सच और हम मूल्य बदलते हैं, शेष DEBUG = गलत

हम DB पैरामीटर जोड़ते हैं:

DATABASES = {'default': {'Engine': 'django.db.backends.postgresql_psycopg2', # या mysql, या जो भी 'NAME':'BNBN ',' USER ':' DBUser ',' PASSWORD ':' पासवर्ड '। DB ',' HOST ':' लोकलहोस्ट ', # या वे जिन्हें' PORT ':' ',' ', या वे उपयोग कर रहे हैं "}}

हम लाइन की तलाश करते हैं ALLOWED_HOSTS = [] और हम उस डोमेन या पते को जोड़ते हैं जिसके माध्यम से हम पहुंचेंगे, जैसे कुछ छोड़ कर ALLOWED_HOSTS = ['www.domain.com']

हम स्थिर फ़ाइलों के लिए निर्देशिका को कॉन्फ़िगर करते हैं, हम उस रेखा की तलाश करते हैं जो कहती है STATIC_ROOT = ' ' और हम मान बदल देते हैं, निरपेक्ष पथ को रखते हुए जहां हम चाहते हैं कि हमारी स्थिर फाइलें हों, मेरे मामले में मैंने इसे कम या ज्यादा इस तरह छोड़ दिया STATIC_ROOT='/var/www/ENV-nombreApp/nombreApp/statics/'

लगभग समाप्त हो गया है, हम निम्नलिखित कमांड निष्पादित करते हैं:
./manage.py collectstatic

यह नाम के साथ एक फ़ोल्डर बनाएगा 'स्थिति-विज्ञान जिस पथ में हम निर्दिष्ट करते हैं settings.py ', यही हमारी सभी स्टैटिक फाइलें होंगी।

और अंत में हम नए परिवर्तनों को लेने के लिए पर्यवेक्षक को पुनः आरंभ करते हैं:
supervisorctl restart nombreApp

और यह सब होगा, अंत में यह इतना सच नहीं था? यह मेरे लिए आसान लग रहा था 😀

मुझे आशा है कि यह आपके लिए उपयोगी है, अभिवादन to

गुइकोर्न प्रलेखन

पर्यवेक्षण दस्तावेज


अपनी टिप्पणी दर्ज करें

आपका ईमेल पता प्रकाशित नहीं किया जाएगा। आवश्यक फ़ील्ड के साथ चिह्नित कर रहे हैं *

*

*

  1. डेटा के लिए जिम्मेदार: मिगुएल elngel Gatón
  2. डेटा का उद्देश्य: नियंत्रण स्पैम, टिप्पणी प्रबंधन।
  3. वैधता: आपकी सहमति
  4. डेटा का संचार: डेटा को कानूनी बाध्यता को छोड़कर तीसरे पक्ष को संचार नहीं किया जाएगा।
  5. डेटा संग्रहण: ऑकेंटस नेटवर्क्स (EU) द्वारा होस्ट किया गया डेटाबेस
  6. अधिकार: किसी भी समय आप अपनी जानकारी को सीमित, पुनर्प्राप्त और हटा सकते हैं।

  1.   f3niX कहा

    मैं समझता हूं कि Django ऐप को वेब सर्वर फ़ोल्डर (/ var / www) के रूट में नहीं रखा जाना चाहिए? सुरक्षा के लिए, मुझे नहीं पता कि मैं गलत हूं।

    नमस्ते.

    1.    उरख कहा

      ठीक है !!! यह कुछ ऐसा था जिससे मैं पूरी तरह से अनभिज्ञ था, मैं प्रविष्टि को अपडेट करूंगा was और जैसे ही मैं सोमवार को वापस आऊंगा मैं एक्सडी एप्लीकेशन में बदलाव करूंगा
      धन्यवाद

  2.   रोड्रिगो ब्रावो (गिडोर) कहा

    एपेल भाई अच्छा ट्यूटोरियल। हाल ही में मैं भी उसी में था, लेकिन डेबियन 7 में, मुझे कम या ज्यादा खोजना और पढ़ना था। मेरा सुझाव है कि आप एक छिपे हुए फ़ोल्डर में उपयोगकर्ता के घर में virtualenv का आभासी वातावरण बनाएं।

    नमस्ते!

  3.   सेवा फेन्रीज़ कहा

    Hahaha ctm I कल Django का दस्तावेजीकरण कर रहा है और आप पहले से ही 999999 Greetings men xD के माध्यम से जा रहे हैं

  4.   daniel2ac कहा

    बहुत अच्छा लेख =) अभी एक हफ्ते पहले मैंने अपने django ऐप को तैनात किया लेकिन मैंने इसे uwsgi और nginx के साथ किया, क्या आपको पता है कि gunicorn का क्या फायदा है? मैंने देखा है यह बहुत उल्लेख किया है।
    यह देखना अच्छा है कि django बहुत लोकप्रिय हो रहा है, सच्चाई यह है कि मैंने जो सबसे अच्छा ढांचा देखा है =)

  5.   ओजकर कहा

    STATIC_ROOT के लिए मैं जो करता हूं वह एक वैश्विक चर को परिभाषित करता है। कुछ इस तरह:

    import os
    PROJECT_PATH = os.path.dirname(os.path.abspath(__file__))
    STATIC_ROOT = os.path.join(PROJECT_PATH, '../backend/static')

    जहां बैकएंड एक ऐप है जिसे मैंने बनाया है। इसलिए मैं यह सुनिश्चित करता हूं कि जहां मैं परियोजना को तैनात करूं, वैश्विक रास्ता वही हो।

  6.   एसजीमार्ट कहा

    दिलचस्प है, मैं भविष्य में कोशिश करूंगा।

    वैसे, क्या किसी को पता है कि एक django एप्लिकेशन में लहजे और गैर-एस्की पात्रों को कैसे सक्षम किया जाए?

    मैंने हर जगह देखा है, निम्न में से कोई भी तरीका मेरे लिए काम नहीं करता है:
    ss.setdefaultencoding ('utf-8') # साइटों में #

    # - * - कोडिंग: utf-8 - * - # हर अजगर फाइल में

    साइट थिंक को एडिट करना, और एएससीआई के बजाय यूटीएफ -8 को काम करना माना जाता है, लेकिन $ फ़ाइल मॉडल थिंकपैड ने मुझे सूचित किया कि मेरी फाइल अभी भी एस्की है।

    कोई सुझाव?

    1.    एसजीमार्ट कहा

      इसने काम कर दिया!!!!

  7.   anime230 कहा

    बहुत अच्छा ट्यूटोरियल, लेकिन क्या आप उत्पादन में पहले से ही एक वेब सर्वर पर मेरे ऐप को अपलोड करने के तरीके में से एक कर सकते हैं
    ग्रेसियस