Ubuntu पर एक Django ऐप को कॉन्फ़िगर करने के लिए शेफ-सोल का उपयोग करना

एक बॉक्स को स्थापित करने और कॉन्फ़िगर करने की प्रक्रिया को स्वचालित करने के कई तरीके हैं। जो भी कारण के लिए, अगर इस बिंदु पर हमारी पूरी प्रणाली में सिर्फ एक ही बॉक्स शामिल है, एक पूर्ण SCM (सॉफ्टवेयर कॉन्फ़िगरेशन प्रबंधन) बुनियादी ढांचे की स्थापना ओवरकिल है। शेल स्क्रिप्ट एक विकल्प है, लेकिन हम SCM के एक स्ट्रिप-डाउन संस्करण का भी उपयोग कर सकते हैं, जो वहां से कुछ टूल में उपलब्ध है। शेफ लोकप्रिय विकल्पों में से एक है और "शेफ-सोलो" शेफ का स्टैंडअलोन कॉन्फ़िगरेशन मोड है जहां हमें "शेफ-सर्वर" के रूप में कार्य करने के लिए अतिरिक्त नोड की आवश्यकता नहीं है। इसके लिए बस जरूरत है एक URL या टारबॉल पैकेज का एक रास्ता जिसमें शेफ कुकबुक है। शेल स्क्रिप्ट की तुलना में, इस प्रकार का दृष्टिकोण बॉक्स से अधिक घोषित और कुशल है और SCM या IaC (कोड के रूप में इन्फ्रास्ट्रक्चर) प्रक्रियाओं के साथ आरंभ करने के लिए एक अच्छा परिचय भी है।

शेफ-सोलो के उपयोग से कुछ अन्य लाभ:

  • संगतता: शेफ सुपरमार्केट या अन्य स्थानों से सामुदायिक कुकबुक का उपयोग करें।
  • मुक्त और खुला स्रोत; अनुज्ञेय अपाचे 2.0 लाइसेंस के तहत लाइसेंस प्राप्त है।
  • शेफ के बाकी पारिस्थितिकी तंत्र (InSpec, ChefSpec, Cookstyle, Foodcritic, शेफ-शेल आदि) तक पहुंच
  • कुकबुक और व्यंजनों को बाद में क्लाइंट / सर्वर मोड में अनुकूलित किया जा सकता है।

और कुछ डाउनसाइड्स:

  • शेफ सुपरमार्केट पर कुछ सामुदायिक रसोई की किताबें पुरानी, ​​टूटी हुई और बनाए नहीं रखी गई हैं।
  • शेफ-सोल अपने आप निर्भरता को हल नहीं कर सकते।

शेफ 'कुकबुक' के अंदर 'रेसिपी' में एक रूबी आधारित डीएसएल है जो 'संसाधनों' का वर्णन एक विशेष स्थिति में एक नोड पर करता है। आइए कुछ शेफ अवधारणाओं के साथ परिचित होने के लिए एक वाकथ्रू के साथ आगे बढ़ें जो कि शेफ-सोलो पर भी लागू होता है। हमारा लक्ष्य एक उबंटू नोड को स्थापित करना है, जो गीकॉर्न और एनजीआईएनएक्स का उपयोग करके पायथन / Django वेब ऐप चला रहा है।

नोट: हमें जरूरी नहीं है कि हमारे "शेफ वर्कस्टेशन" (हमारी मशीन) पर ChefDK लगाए जाएं, हालांकि इसके साथ, हम कुकबुक, रेसिपी और बहुत कुछ बनाने के लिए डायरेक्टरी स्ट्रक्चर के साथ स्टार्ट-ऑफ करने के लिए 'शेफ जेनरेट' कमांड का उपयोग कर सकते हैं। इस लेख में, हम मानेंगे कि हमारे वर्कस्टेशन पर शेफडीके स्थापित है। कमांड्स को शेफडीके के 4.7.26-1 संस्करण का उपयोग करके चलाया गया था।


(इस बिंदु से सब कुछ, जब तक कि अन्यथा निर्दिष्ट न हो, हमारी मशीन पर चलाया जाना है, जिसे 'शेफ वर्कस्टेशन' भी कहा जाता है)

रसोई की किताब बनाना

शेफ में कुकबुक एक पुन: प्रयोज्य इकाइयाँ हैं जिनमें कॉन्फ़िगरेशन परिदृश्य का समर्थन करने के लिए आवश्यक सब कुछ होता है। कुकबुक में कई 'रेसिपी' और 'रेसिपी' शामिल हो सकती हैं, जिनमें ज्यादातर रिसोर्स पैटर्न होते हैं। default.rbवह डिफ़ॉल्ट रेसिपी है जिसे कुकबुक को रन-लिस्ट में संदर्भित किया जाता है । विभिन्न व्यंजनों चिंताओं को अलग करने की अनुमति देते हैं। इस ट्यूटोरियल के लिए, हालांकि, हम एक मुख्य नुस्खा फ़ाइल में सभी संसाधन घोषणाएँ जोड़ देंगे, जो कि है default.rb

"My-chef-project" नाम का एक फ़ोल्डर बनाएँ और उसके अंदर एक फ़ोल्डर बनाएँ, जिसे "cookbooks" कहा जाता है। से ./my-chef-project/cookbooks/, भागो:

$ chef generate cookbook my-cookbook

हमारी निर्देशिका संरचना अब इस तरह दिखाई देगी:

.
└── my-chef-project
└── cookbooks
└── my-cookbook
├── CHANGELOG.md
├── LICENSE
├── Policyfile.rb
├── README.md
├── chefignore
├── kitchen.yml
├── metadata.rb
├── recipes
│ └── default.rb
├── spec
│ ├── spec_helper.rb
│ └── unit
│ └── recipes
│ └── default_spec.rb
└── test
└── integration
└── default
└── default_test.rb

पैकेज जोड़ना

हमारे नोड को स्थापित करने के लिए पहला कदम यह पहचानना है कि हमारे ऐप द्वारा पैकेज की क्या आवश्यकता है। हमारे नोड को उबंटू चुना गया है, इसलिए हम निर्भरता को इकट्ठा करने के लिए एपीटी पैकेज मैनेजर पर भरोसा कर सकते हैं। ओएस वितरण द्वारा प्रदान किए गए पैकेजों को स्थापित करना फिर केक का एक टुकड़ा है:

apt_update
package 'python3'
package 'python3-pip'
package 'nginx'
package 'pkg-config'
package 'libcairo2-dev'
package 'libjpeg-dev'
package 'libgif-dev'
package 'libgirepository1.0-dev'

ये बहुत आत्म-व्याख्यात्मक हैं। पहली पंक्ति apt रिपॉजिटरी को अपडेट करेगी और निम्नलिखित लाइनें उन पैकेजों को स्थापित करेंगी।

नोट: पाइप के माध्यम से अजगर निर्भरता के कुछ संकलन के लिए 'नगनेक्स' के बाद के पैकेजों की आवश्यकता होती है। इनमें निर्दिष्ट आपके अजगर / django परियोजना निर्भरता के आधार पर भिन्न हो सकते हैं requirements.txt। इन पैकेजों को निर्धारित करने के लिए आप एक परीक्षण और त्रुटि विधि का उपयोग कर सकते हैं जिन्हें आपको अपनी रसोई की किताब में शामिल करने की आवश्यकता है। ऐसा करने के लिए, मैन्युअल रूप से प्रदर्शन करें sudo pip install -r requirements.txt(नोट: यह संकुल प्रणाली को व्यापक रूप से स्थापित करता है!) ताजे तात्कालिक ubuntu मशीन पर यह देखने के लिए कि क्या यह सफलतापूर्वक चलता है। यदि नहीं, तो स्टाडर को आपको संकेत देना चाहिए कि क्या पैकेज गायब हैं।

लिनक्स उपयोगकर्ता बनाना

एक बार जब हम आवश्यक पैकेजों को जोड़ लेते हैं, तो हमें एक गैर-विशेषाधिकार प्राप्त लिनक्स उपयोगकर्ता बनाने की आवश्यकता होती है जो एप्लिकेशन स्रोत कोड का मालिक होगा।

user 'bob' do
  uid 1212
  gid 'users'
  home '/home/bob'
  shell '/bin/bash'
  password '$1$alilbito$C83FsODuq0A1pUMeFPeR10'
end

ध्यान दें कि पासवर्ड एक छाया हैश प्रारूप है जिसका उपयोग लिनक्स में किया जाता है। यह OpenSSL का उपयोग करके प्राप्त किया जा सकता है:

$ openssl passwd -1 -salt alilbitof mypassword

ऐप स्रोत सहित

अब Django एप्लिकेशन स्रोत कोड को हमारी रसोई की किताब में शामिल करते हैं। स्रोत कोड को अंदर रखें यदि वह मौजूद नहीं है तो निर्देशिका ./my-chef-project/cookbooks/my-cookbook/files/default/myapp/ बनाएं ./my-chef-project/cookbooks/my-cookbook/files/default

हमारे नोड पर दूरस्थ स्थान पर इन फ़ाइलों को कॉपी करने का निर्देश रिमोट_निर्देशक संसाधन का उपयोग करके वर्णित है :

remote_directory '/home/bob/myapp' do
  source 'myapp' # This is the name of the folder containing our source code that we kept in ./my-cookbook/files/default/
  owner 'bob'
  group 'users'
  mode '0755'
  action :create
end

अजगर निर्भरता में खींच रहा है

में अजगर पैकेज स्थापित करने के लिए requirements.txt, हम एक अनियंत्रित कमांड को चलाने के लिए निष्पादित संसाधन का उपयोग कर सकते हैं । इस मामले में, हमें इसके ऊपर पाइप स्थापित कमांड को निष्पादित करने की आवश्यकता है:

execute 'install python dependencies' do
  command 'pip3 install -r requirements.txt'
  cwd '/home/bob/myapp'
end

नोट: यह ध्यान रखें कि यह रूट उपयोगकर्ता के रूप में निष्पादित होने वाला है और अजगर पुस्तकालयों को सिस्टम-वाइड स्थापित किया जाएगा। यदि हमारा नोड विशेष रूप से इस एक एकल अजगर ऐप को चलाने के लिए निर्दिष्ट है, तो यह अधिक समस्या नहीं है। इसके बावजूद, चीजों को साफ-सुथरा रखने के लिए एक बेहतर विकल्प एक सामुदायिक कुकबुक को ढूंढना और उसका उपयोग करना है जो अजगर स्थापना या 'वर्चुअनव्स' का प्रबंधन करता है। (या बहुत कम से कम, इसे दोहराने के लिए निष्पादित ब्लॉकों की एक श्रृंखला लिखें )। पायथन में virtualenvs का उपयोग यह सुनिश्चित करता है कि किसी भी अजगर आधारित प्रणाली उपकरण या अन्य अजगर परियोजनाएं प्रभावित नहीं होंगी

Gunicorn और NGINX की स्थापना

अब एनजीआईएनएक्स के साथ हमारे रिवर्स प्रॉक्सी के रूप में गुनिकॉर्न डब्ल्यूएसजीआई एचटीटीपी सर्वर तैयार करने का समय है। Django से सभी स्थिर संपत्तियों को संभालने के लिए Nginx का भी उपयोग किया जाता है।

उबंटू की सेवा के रूप में गुनिकॉर्न का पट्टा करने के लिए, सिस्टमड का उपयोग किया जा सकता है। Systemd_unit संसाधन संस्करण 12.11 के बाद से बावर्ची में शामिल है।

systemd_unit 'gunicorn.service' do
  content({
  Unit: {
    Description: 'Django on Gunicorn',
    After: 'network.target',
  },
  Service: {
    ExecStart: '/usr/local/bin/gunicorn --workers 3 --bind localhost:8080 myapp.wsgi:application',
    User: 'bob',
    Group: 'www-data',
    WorkingDirectory: '/home/bob/myapp'
    Restart: 'always',
  },
  Install: {
    WantedBy: 'multi-user.target',
  }
  })
  action [:create, :enable, :start]
end

अब हमें इस Gunicorn सर्वर में एक मानक NGINX प्रॉक्सी कॉन्फ़िगरेशन शामिल करना होगा जैसा कि नीचे दिखाया गया है। यह स्निपेट में जा सकता है ./my-cookbook/templates/nginx.conf.erb। यदि यह मौजूद नहीं है तो टेम्पलेट निर्देशिका बनाएं।

नोट: शेफ के टेम्पलेट एम्बेडेड रूबी फ़ाइलों का समर्थन करते हैं जिनमें चर, रूबी अभिव्यक्ति और कथन हो सकते हैं। हालाँकि इस फ़ाइल में 'erb' एक्सटेंशन है, लेकिन हमने रूबी स्टेटमेंट्स या एक्सप्रेशंस में से किसी का भी उपयोग नहीं किया। इसके अलावा, सादगी के लिए, हमारे पास केवल एक गैर एचटीपीएस एनजीएनएक्स कॉन्फिग है यहां (सौम्य रिमाइवर! कृपया उत्पादन में ऐसा न करें!)

server {
  listen 80;
  server_name http://example.com/;

  location = /favicon.ico { access_log off; log_not_found off; }
  location /static/ {
    root /home/bob/myapp/myapp/static;
  }

  location / {
  include proxy_params;
    proxy_pass http://localhost:8080/;
  }
}

नोट: एक विकल्प और एक बेहतर विन्यास भी है, जहां, उदाहरण के लिए, Gunicorn सर्वर एक TCP लूपबैक कनेक्शन के बजाय एक यूनिक्स डोमेन सॉकेट से जुड़ा है। प्रदर्शन कारणों से यह देखने लायक है।

नोड पर साइट्स-सक्षम फ़ोल्डर में इस कॉन्फ़िगरेशन को कॉपी करने के लिए, शेफ से टेम्पलेट संसाधन का उपयोग करें ।

template '/etc/nginx/sites-available/example.com.conf' do
  source 'nginx.conf.erb'
  owner 'root'
  group 'root'
  mode '0744'
end

Nginx पर कॉन्फिग को सक्रिय करना आमतौर पर sites-availablenginx के sites-enabledफोल्डर में कॉन्फिग को इंगित करते हुए सिमलिंक बनाकर किया जाता है । नीचे दिखाए अनुसार लिंक संसाधन के साथ शेफ कुकबुक में साइमलिंक घोषित किया जा सकता है :

link '/etc/nginx/sites-enabled/example.com.conf' do
  to '/etc/nginx/sites-available/example.com.conf'
end

और डिफ़ॉल्ट कॉन्फिग सिमलिंक को हटाने के लिए:

link '/etc/nginx/sites-enabled/default' do
  action :delete
end

NGINX शुरू

और अंत में, नगनेक्स सेवा को आग लगाने के लिए:

service 'nginx' do
  action :enable
  action :start
end

Runlists

शेफ में रन-लिस्ट एक कुकबुक में भूमिकाओं या व्यंजनों की एक क्रमबद्ध सूची है जो नोड पर अनुक्रम में निष्पादित की जाएगी। हमारे पास एक रसोई की किताब "मेरी-रसोई की किताब" और उसके अंदर "डिफ़ॉल्ट" नुस्खा है जिसे हमें उबंटू बॉक्स पर निष्पादित करने की आवश्यकता है, इसलिए हमारी परियोजना निर्देशिका ( ./my-chef-project/runlist.json) में runlist.json इस तरह दिखना चाहिए:

{
  "run_list": [
    "recipe[my-cookbook::default]"
  ]
}

अंतिम चरण

शेफ सोलो के लिए हमारी रसोई की किताब परोसने के लिए तैयार है। यह उबंटू 18.04 मशीन का प्रावधान करने और उस पर शेफडैक स्थापित करने का समय है:

$ ssh [email protected] 'apt-get update && yes | apt-get install curl && curl https://packages.chef.io/files/current/chefdk/4.7.45/ubuntu/18.04/chefdk_4.7.45-1_amd64.deb -o chefdk.deb && yes | dpkg -i chefdk.deb && rm chefdk.deb'

अपने शेफ वर्कस्टेशन पर वापस जा रहे हैं , हमें बस इतना करने की ज़रूरत है कि कुकबुक फोल्डर को एक टैरबॉल के अंदर रखा जाए, उस टार्बॉल को ट्रांसफर runlist.jsonकरने के साथ-साथ जिस रिमोट नोड को हमने ऊपर प्रावधान किया है और शेफ-सोलो कमांड को चलाएं:

(नीचे दिए गए आदेश को नोड या 'शेफ क्लाइंट' के अंदर चलाया जाना है कि शेफ वर्कस्टेशन)

$ chef-solo --recipe-url $(pwd)/chef-solo.tar.gz -j $(pwd)/runlist.json --chef-license=accept

या यहाँ एक-लाइनर ( ./my-chef-project/शेफ वर्कस्टेशन पर CWD से चलाया जाना है ):

tar zvcf chef-solo.tar.gz ./cookbooks &&\
scp chef-solo.tar.gz runlist.json [email protected]:~/ &&\
ssh [email protected] 'chef-solo --recipe-url $(pwd)/chef-solo.tar.gz -j $(pwd)/runlist.json --chef-license=accept'

बस! रसोइया में आपके द्वारा निर्दिष्ट किए गए अपने नोड को परिवर्तित करने की कोशिश करने वाले बावर्ची गतिविधि के साथ मानक आउटपुट भरें देखें। शेफ-सोल सभी कुकबुक के लिए आवश्यक सभी रत्नों को स्थापित करेगा। यदि शेफ-सोलो कमांड सफल होता है, तो हमारे पास उबंटू बॉक्स पर नग्नेक्स के पीछे काम करने वाला एक Django एप्लिकेशन होगा। इसे जांचने के लिए डोमेन / आईपी पर नेविगेट करें।

नोट: याद रखें कि django में आपको इस डोमेन / ip को ALLOWED_HOSTSसूची में सेट करना पड़ सकता है settings.py

परिवर्तनों के प्रति प्रतिक्रिया

जब भी हम अपनी प्रोजेक्ट डायरेक्टरी (रेसिपी, टेम्प्लेट या एप्लिकेशन सोर्स कोड इत्यादि) की सामग्री में बदलाव करते हैं, तो बस प्रोजेक्ट डायरेक्टरी से ऊपर का एक-लाइनर चलाएं।

युक्ति: यदि रसोई की किताब को गिट के साथ नियंत्रित किया जाता है (जैसा कि यह होना चाहिए), एक अच्छा सुझाव यह एक लाइनर चलाने के लिए गिट हुक स्थापित करना है।

टारबॉल की मेजबानी (वैकल्पिक)

यदि आप अंतिम शेफ-सोलो कमांड को देखते हैं, तो ध्यान दें कि --recipe-urlURL लेने के लिए है। इसका मतलब है कि आपके पास एक वर्कफ़्लो हो सकता है जहां एक सीआई आपके शेफ-सोलो टारबॉल का निर्माण करेगा, इसे कहीं अपलोड करेगा और समय-समय पर इसे खींचने के लिए अपने नोड को कॉन्फ़िगर करेगा।

युक्ति: परिवर्तित तारबॉल को समय-समय पर क्रोनजोब के रूप में खींचने के लिए कर्ल का उपयोग करें। हेडर curl -z $fileका सम्मान करेंगे If-Modified-Sinceऔर केवल टार बॉल को डाउनलोड करेंगे यदि मौजूदा स्थानीय पर टाइमस्टैम्प के बाद से रिमोट फाइल को बदल दिया गया है $file



Leave a Comment

Ubuntu 16.04 पर लाइटकार्ट शॉपिंग कार्ट प्लेटफ़ॉर्म कैसे स्थापित करें

Ubuntu 16.04 पर लाइटकार्ट शॉपिंग कार्ट प्लेटफ़ॉर्म कैसे स्थापित करें

LiteCart PHP, jQuery और HTML में लिखा गया एक स्वतंत्र और ओपन सोर्स शॉपिंग कार्ट प्लेटफॉर्म है। यह ई-कॉमर्स सॉफ्टवेअर का उपयोग करने के लिए एक सरल, हल���का और आसान है

डेबियन पर सेटअप NFS शेयर

डेबियन पर सेटअप NFS शेयर

एनएफएस एक नेटवर्क-आधारित फाइल सिस्टम है जो कंप्यूटरों को कंप्यूटर नेटवर्क पर फाइलों तक पहुंचने की अनुमति देता है। यह मार्गदर्शिका बताती है कि आप एनएफ पर फ़ोल्डर्स को कैसे उजागर कर सकते हैं

मोटोमो एनालिटिक्स को फेडोरा 28 पर कैसे स्थापित करें

मोटोमो एनालिटिक्स को फेडोरा 28 पर कैसे स्थापित करें

एक अलग प्रणाली का उपयोग? माटोमो (पूर्व में पिविक) एक ओपन सोर्स एनालिटिक्स प्लेटफॉर्म है, जो गूगल एनालिटिक्स का एक खुला विकल्प है। Matomo स्रोत को होस्ट किया गया है

Linux पर एक TeamTalk Server सेटअप करें

Linux पर एक TeamTalk Server सेटअप करें

टीमटॉक एक कॉन्फ्रेंसिंग प्रणाली है जो उपयोगकर्ताओं को उच्च-गुणवत्ता वाले ऑडियो / वीडियो वार्तालाप, टेक्स्ट चैट, स्थानांतरण फ़ाइलें और स्क्रीन साझा करने की अनुमति देती है। यह मैं

विंडोज सर्वर पर Garrys मॉड कैसे स्थापित करें

विंडोज सर्वर पर Garrys मॉड कैसे स्थापित करें

परिचय यह आलेख बताएगा कि विंडोज सर्वर 2012 पर गारस मोड सर्वर को कैसे डाउनलोड और इंस्टॉल किया जाए। यह गाइड गहराई में होने के लिए बनाया गया है।

कैसे स्थापित करें और अपने CentOS 7 सर्वर पर CyberPanel कॉन्फ़िगर करें

कैसे स्थापित करें और अपने CentOS 7 सर्वर पर CyberPanel कॉन्फ़िगर करें

एक अलग प्रणाली का उपयोग? परिचय CyberPanel बाजार पर पहला नियंत्रण पैनल है जो दोनों खुला स्रोत है और OpenLiteSpeed ​​का उपयोग करता है। क्या थी?

CentOS पर FFmpeg कैसे स्थापित करें

CentOS पर FFmpeg कैसे स्थापित करें

FFmpeg ऑडियो और वीडियो रिकॉर्ड करने, कन्वर्ट करने और स्ट्रीम करने के लिए एक लोकप्रिय ओपन सोर्स समाधान है, जो सभी प्रकार की ऑनलाइन स्ट्रीमिंग सेवाओं में व्यापक रूप से उपयोग किया जाता है। मैं

SSH का उपयोग करके LUKS डिस्क एन्क्रिप्शन पर LVM को दूरस्थ रूप से अनलॉक करने के लिए CentOS 7 स्थापित और सेटअप करें

SSH का उपयोग करके LUKS डिस्क एन्क्रिप्शन पर LVM को दूरस्थ रूप से अनलॉक करने के लिए CentOS 7 स्थापित और सेटअप करें

एलयूकेएस (लिनक्स यूनिफाइड की सेटअप) लिनक्स के लिए उपलब्ध विभिन्न डिस्क एन्क्रिप्शन प्रारूपों में से एक है जो प्लेटफॉर्म एग्नॉस्टिक है। यह ट्यूटोरियल आपको बुद्धि प्रदान करेगा

अपने Vultr VPS को कैसे एक्सेस करें

अपने Vultr VPS को कैसे एक्सेस करें

Vultr अपने VPS को कॉन्फ़िगर करने, स्थापित करने और उपयोग करने के लिए कई अलग-अलग तरीके प्रदान करता है। क्रेडेंशियल एक्सेस करें आपके VPS के लिए डिफ़ॉल्ट एक्सेस क्रेडेंशियल ar

CentOS 7 पर अक्टूबर CMS को कैसे स्थापित करें

CentOS 7 पर अक्टूबर CMS को कैसे स्थापित करें

अक्टूबर एक खुला स्रोत सामग्री प्रबंधन प्रणाली है जो लारवेल PHP फ्रेमवर्क पर आधारित है। एक सुरुचिपूर्ण इंटरफ़ेस और एक संक्षिप्त मॉड्यूलर वास्तुकला के साथ