
पहला विचार यह था कि वर्चुअल मशीन बनाई जाए और यदि आवश्यक हो तो उसे कॉपी किया जाए। समान कॉन्फ़िगरेशन को कॉन्फ़िगर करना आसान हो गया, लेकिन हर बार जब कॉन्फ़िगरेशन में कुछ बदल जाता है, तो मुझे सर्वर पर जाकर इसे कॉन्फ़िगर करना पड़ता था। मुझे और चाहिए था।
परीक्षण और त्रुटि के माध्यम से, मैं
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
। अब कई घंटे पहले लग सकते थे अब मिनट लगते हैं, जिनमें से अधिकांश सर्वर खुद पैकेज स्थापित करता है।