वैग्रैंट और साल्टस्टैक के साथ वेब डेवलपमेंट ऑटोमेशन

वेब डेवलपर्स को सर्वर को कॉन्फ़िगर करने की आवश्यकता है। आमतौर पर प्रत्येक परियोजना के लिए। जब से मैंने Google की मदद के बिना ऐसा करना सीखा, कॉन्फ़िगरेशन कुछ दिलचस्प हो गया है, और मैं इसे जितना संभव हो उतना स्वचालित करना चाहता था।

पहला विचार यह था कि वर्चुअल मशीन बनाई जाए और यदि आवश्यक हो तो उसे कॉपी किया जाए। समान कॉन्फ़िगरेशन को कॉन्फ़िगर करना आसान हो गया, लेकिन हर बार जब कॉन्फ़िगरेशन में कुछ बदल जाता है, तो मुझे सर्वर पर जाकर इसे कॉन्फ़िगर करना पड़ता था। मुझे और चाहिए था।

परीक्षण और त्रुटि के माध्यम से, मैं Vagrant



+ SaltStack



एक समूह में आया, जहाँ Vagrant



वातावरण के अलगाव का ध्यान रखता है, और SaltStack



- कॉन्फ़िगरेशन प्रबंधन।



Vagrant।



Vagrantfile



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

वैग्रांत में पर्यावरण को तैनात करने के लिए पैकेज प्रारूप .box



। बक्से के आदान-प्रदान के लिए एक सेवा है - https://vagrantcloud.com/ । फिलहाल यह बीटा में है, लेकिन, बक्से के "टूटे" लिंक के अपवाद के साथ, मुझे कोई त्रुटि नहीं दिखाई दी।



Vagrantfile



Vagrantfile



बनाना आसान है। विवरण दस्तावेज़ीकरण में हैं , लेकिन मैं सूची दूंगा कि उदाहरण में क्या आवश्यक है।

सर्वर पूर्व-स्थापित SaltStack



घटकों के बिना debian



पर चलेगा। Https://vagrantcloud.com/ पर आप .box



पा सकते हैं।

 config.vm.box = "mokote/debian-7"
      
      





मैं एक निजी नेटवर्क का उपयोग करता हूं जिसके भीतर प्रत्येक वर्चुअल मशीन को अपना IP



मिलेगा। इससे आप कई मशीनों को एक साथ चला सकते हैं और उन तक पहुंच बना सकते हैं।

 config.vm.network "private_network", ip: "192.168.56.107"
      
      





वर्चुअल मशीन सेटिंग्स:

 config.vm.provider "virtualbox" do |v| v.name = "demostand" v.memory = 1024 v.customize ["modifyvm", :id, "--natdnshostresolver1", "on"] v.customize ["setextradata", :id, "--VBoxInternal2/SharedFoldersEnableSymlinksCreate/v-root", "1"] end
      
      





हम निर्देशिकाओं को SaltStack



सेटिंग्स के साथ और उस परियोजना के साथ सिंक्रनाइज़ करते हैं जो बनाई गई मशीन पर तैनात की जाएगी। प्रोजेक्ट के लिए, मैंने nfs



को सिंक्रोनाइज़ेशन विधि के रूप में उपयोग किया। यह VirtualBox shared folders



तुलना में तेजी से काम करता है, और इसे केवल एक पैरामीटर से कॉन्फ़िगर किया गया है :nfs => true



, लेकिन root



एक्सेस की आवश्यकता root





 config.vm.synced_folder "salt/roots/", "/srv/" config.vm.synced_folder "~/Development/web/demostand", "/var/www/demostand", id: "vagrant-root", :nfs => true
      
      





यह SaltStack



कॉन्फ़िगरेशन के साथ होस्ट के प्रावधान को कॉन्फ़िगर करने के लिए बना हुआ है।

salt.minion_config



- वह फ़ाइल जिसमें से सर्वर कॉन्फ़िगरेशन शुरू होता है।

salt.run_highstate = true



- मशीन स्टार्टअप पर प्रावधान शुरू करना है या नहीं।

salt.pillar



- pillar



भंडारण से डेटा।

 config.vm.provision :salt do |salt| salt.minion_config = 'salt/minion' salt.run_highstate = true salt.pillar({ "database" => { "withUser" => true, "name" => "demostand", "password" => "fm2QTqimWUrk" } }) salt.pillar({"projectName" => "demostand"}) end
      
      





पूर्ण Vagrantfile



को यहाँ देखा जा सकता है: https://github.com/ligser/salt-vagrant-demostand/blob/master/Vagrantfile



SaltStack



SaltStack



आपको master



-> minion



का एक गुच्छा बनाने की अनुमति देता है और ताजा minion



साथ minion



प्रदान करने के लिए एक विज़ार्ड शुरू करता है। मुझे ऐसी कोई आवश्यकता नहीं थी, इसलिए प्रावधान बिना master



किया जाएगा।

SaltStack



लिए कॉन्फ़िगरेशन विवरण स्टेटमेंट ( SaltStack



शब्दावली में राज्यों) का एक सेट है, जिसे सफलतापूर्वक कॉन्फ़िगर किए minion



लिए संतुष्ट होना चाहिए।

मैं SaltStack



की विशेषताओं का वर्णन SaltStack



जो मेरे लिए उपयोगी थे।



नमक / मिनियन



सबसे पहले, Vagrantfile



में निर्दिष्ट salt/minion



फ़ाइल Vagrantfile



। यह वह फ़ाइल है जिसमें से मशीन कॉन्फ़िगरेशन शुरू होती है।

इसकी सामग्री अत्यंत संक्षिप्त है: file_client: local



। यह बताता है कि कॉन्फ़िगरेशन स्थानीय रूप से minion



पर संग्रहीत किया जाता है, डिफ़ॉल्ट रूप से, /srv/salt



निर्देशिका में, जिसमें हमने सिंक्रनाइज़ेशन कॉन्फ़िगर किया था।



राज्यों



स्थिति पर एक पूर्ण मैनुअल परियोजना की वेबसाइट पर है: http://docs.saltstack.com/en/latest/topics/tutorials/index.html#states

स्टेट्स को .sls



फ़ाइलों में संग्रहीत किया .sls



है। आमतौर पर .sls



प्रारूप में राज्यों का वर्णन होता है।

 apache: # ID pkg: #  - installed # 
      
      





एक फ़ंक्शन की कॉल को कम किया जा सकता है:

 apache: pkg.installed
      
      





इसके अलावा, अगर ID



राज्य वस्तु के नाम से मेल नहीं खाती है, तो आप एक नाम निर्दिष्ट कर सकते हैं।

 apache_pkg: pkg: - name: apache - installed
      
      





pkg



पैकेज मैनेजर की स्थिति है। installed



इस राज्य के सबसे अधिक इस्तेमाल किए जाने वाले कार्यों में से एक है, जिसका अर्थ है कि सिस्टम पर इस नाम के साथ एक पैकेज स्थापित होना चाहिए।

service



- सेवाओं की स्थिति। इसके साथ, आप सेवाओं को शुरू या बंद कर सकते हैं। apache2



रोकने वाला राज्य:

 apache2: service.dead
      
      





file



- फाइल सिस्टम की स्थिति।

आमतौर पर, managed



फ़ंक्शन का उपयोग FS के साथ काम करने के लिए किया जाता है।

यदि ID



फ़ाइल नाम से मेल खाती है, तो हमें name



पैरामीटर को निर्दिष्ट करने की आवश्यकता नहीं है।

source



- वह स्थान जहाँ फ़ाइल की सामग्री ली गई है। salt://



- सूचक को /srv/salt



, या Vagrantfile



सापेक्ष: salt/roots/salt





डिफ़ॉल्ट रूप से, फ़ाइलें jinja



टेम्पलेट नहीं हैं, इसलिए उनके अंदर pillar



डेटा का उपयोग नहीं किया जा सकता है। किसी फ़ाइल को टेम्प्लेट बनाने के लिए, आपको template: jinja



निर्दिष्ट करने की आवश्यकता होती है template: jinja



पैरामीटर में template: jinja



। उसके बाद, फ़ाइल को टेम्पलेट इंजन द्वारा संसाधित किया जाएगा। jinja



का उपयोग खुद .sls



फाइलों में भी किया जाता है।

SaltStack



राज्य निर्भरता का समर्थन करता है।

watch_in



इंगित करता है कि फ़ाइल को बदलते समय पुनरारंभ करने के लिए किस सेवा का उपयोग किया जाता है।

require



pkg



की स्थिति द्वारा बनाए रखा जाता है और एक विशिष्ट पैकेज की स्थापना की आवश्यकता होती है।

 /etc/nginx/sites-available/default: file.managed: - source: salt://nginx/default - template: jinja - user: root - group: root - mode: 644 - watch_in: - service: nginx
      
      







डेटा



SaltStack



में डेटा स्टोर करने के लिए दो सिस्टम हैं।

pillar



- डेटा जो कि विन्यास फाइल में नहीं होना चाहिए। Vagrantfile



मैंने pillar



में 2 चाबियाँ Vagrantfile



: database



- database



पैरामीटर और प्रोजेक्टनेम - प्रोजेक्ट नाम।

grains



- स्थैतिक जानकारी जो minion



अपलोड की जाएगी जब यह शुरू होगी।

मैं व्यावहारिक रूप से grains



उपयोग नहीं करता था, इसलिए मुझे इस प्रणाली की पेचीदगियों में कोई दिलचस्पी नहीं थी, अगर आपको अधिक जानकारी की आवश्यकता है, तो यह SaltStack



वेबसाइट पर उपलब्ध है: http://docs.saltstack.com/en/latest/topics/targeting/grains.html

डिफ़ॉल्ट रूप से, किसी भी .sls



फ़ाइल को टेम्पलेट इंजन द्वारा संसाधित किया जाता है, इसलिए आप इसमें निर्माणों का उपयोग कर सकते हैं:

{{ }}



- आउटपुट।

{% %}



- स्थितियां, या चक्र।

 {{ pillar['database']['name'] }}: {% if (pillar['database']['withUser']) %} mysql_user.present: - host: localhost - password: {{ pillar['database']['password'] }} - require: - service: mysql - pkg: python-mysqldb {% endif %}
      
      





ऊपर के उदाहरण में, Vagrantfile



में दर्ज मूल्य [database][name]



, pillar



से लिया गया है और mysql_user.present



राज्य के लिए ID



रूप में सौंपा गया है।

मान ['database']['password']



पासवर्ड के रूप में उपयोग किया जाएगा।



Top.sls



top.sls



- फ़ाइल जिसमें से SaltStack



राज्यों को पढ़ना शुरू कर देगा।

इसमें .sls



की एक सूची है, जिसमें इस विन्यास के लिए फाइलें शामिल हैं।



तैयार विन्यास



SaltStack



और SaltStack



का तैयार कॉन्फ़िगरेशन SaltStack



पर GitHub



। यह आपको एक कमांड के साथ PHP



, nginx



और mysql



एक सर्वर को तैनात करने की अनुमति देता है:

 vagrant up --provision
      
      





जब आप एक ही समय में कई छवियां तैनात करते हैं, तो आपको निजी नेटवर्क में IP



को बदलना नहीं भूलना चाहिए।



निष्कर्ष



स्वचालन छोटे कार्यों के लिए नियमित कार्य की मात्रा को कम करता है। पारंपरिक सर्वरों की तैनाती विशिष्ट सेटिंग्स की कॉपी-पेस्ट और vagrant up



के लॉन्च vagrant up



। अब कई घंटे पहले लग सकते थे अब मिनट लगते हैं, जिनमें से अधिकांश सर्वर खुद पैकेज स्थापित करता है।



All Articles