Computer >> कंप्यूटर >  >> प्रोग्रामिंग >> डेटाबेस

स्थानीय विकास से लेकर डॉकर मशीन और कंपोज़ के साथ दूरस्थ परिनियोजन तक

इस पोस्ट का लक्ष्य एक ऐसे वातावरण में एक एप्लिकेशन विकसित करना है जो आपके दूरस्थ परिनियोजन वातावरण के जितना संभव हो सके उतना करीब हो। आइए डॉकर मशीन का उपयोग करके ऐसा करें और ऐप को स्थानीय विकास से दूरस्थ परिनियोजन में स्थानांतरित करने के लिए लिखें।

Docker Docker Docker

स्थानीय विकास से लेकर डॉकर मशीन और कंपोज़ के साथ दूरस्थ परिनियोजन तक सबसे पहले हमें डॉकर इंस्टॉल करना होगा। लेखन के समय यह पोस्ट सभी नवीनतम और महानतम डॉकर घटकों का उपयोग करता है।

  1. डॉकर 1.7.0
  2. डॉकर मशीन 0.3.0
  3. डॉकर कंपोज़ 1.3.0

मुझे लगता है कि आप शेष पोस्ट के लिए वर्चुअलबॉक्स में डॉकर चला रहे हैं।

कृपया हमारी गेस्टबुक पर हस्ताक्षर करें

हम जिस एप्लिकेशन को तैनात करने जा रहे हैं वह एक साधारण गेस्टबुक है। यह एक बुनियादी 3 स्तरीय ऐप प्रदर्शित करने के लिए पर्याप्त है। हम एक स्थानीय विकास परिवेश से शुरुआत करेंगे जहां हम निम्नलिखित तकनीकों का उपयोग करके एक वेब ऐप विकसित करेंगे:

  • वेब सर्वर के लिए Nginx
  • ऐप सर्वर के लिए:
    • प्रोग्रामिंग भाषा के लिए पायथन
    • वेब ढांचे के लिए फ्लास्क
    • WSGI सर्वर के लिए Gunicorn
  • डेटाबेस के लिए MySQL

हम GitHub पर एक रेपो से काम कर रहे हैं, तो चलिए उस रेपो को क्लोन करके शुरू करते हैं।

git clone https://github.com/rackerlabs/guestbook.git -b dmc guestbook
cd guestbook

नीचे आप जिस डॉकर होस्ट का उपयोग कर रहे हैं, उसका ट्रैक खोना भी बहुत आसान है। मैं इस उपनाम को सेट करने की अनुशंसा करता हूं ताकि आप आसानी से पता लगा सकें कि आप किस होस्ट से बात कर रहे हैं।

alias de='env | grep DOCKER_'

अब आप बस de . टाइप कर सकते हैं यह देखने के लिए कि डॉकर पर्यावरण चर क्या सेट हैं।

हमारे एप्लिकेशन को स्थानीय विकास से दूरस्थ परिनियोजन में ले जाने का अंतिम परिणाम इस प्रकार दिखाई देगा।

स्थानीय विकास से लेकर डॉकर मशीन और कंपोज़ के साथ दूरस्थ परिनियोजन तक

स्थानीय विकास

हमारा स्थानीय विकास वातावरण (dev env) बहुत सरल है क्योंकि हमें क्रेडेंशियल सेट करने या सुरक्षा के बारे में चिंता करने की आवश्यकता नहीं है। हम अपने सभी dev env सामान को "-dev" के साथ जोड़ देंगे ताकि इसे हमारे दूरस्थ परिनियोजन से अलग रखा जा सके।

पर्यावरण प्रारंभ करें

हम अपने कंटेनरों के लिए डॉकर होस्ट बनाने के लिए डॉकर-मशीन का उपयोग करेंगे। फिर हम उस होस्ट का उपयोग करने के लिए डॉकर को कॉन्फ़िगर करते हैं। अंत में, docker-compose हमारे पूरे देव वातावरण को सामने लाएगा।

docker-machine create --driver virtualbox guestbook-dev
docker-machine ip guestbook-dev # note the Guestbook Dev IP Address
eval "$(docker-machine env guestbook-dev)"
docker-compose up

जब यह चल रहा हो, तो यह महसूस करने के लिए docker-compose.yml पढ़ें कि यह हमारे लिए क्या कर रहा है। यह अच्छी तरह से टिप्पणी की गई है इसलिए इसे आत्म-व्याख्यात्मक होना चाहिए। ध्यान दें कि यह सामान्य घटकों के आधार के रूप में docker-compose-common.yml का विस्तार कैसे करता है। आप docker-compose.yml संदर्भ में डॉकर कंपोज़ फ़ाइल स्वरूप का पूरा विवरण पा सकते हैं।

एक बार जब सब कुछ डाउनलोड हो गया और चल रहा है, तो हमें डेटाबेस को इनिशियलाइज़ करना होगा। हम अपने डेटाबेस में टेबल बनाने वाले अजगर कमांड को चलाने के लिए अपने ऐप के वन-ऑफ कंटेनर रन का उपयोग करेंगे।

एक नया टर्मिनल खोलें और गेस्टबुक डीआईआर में बदलें।

eval "$(docker-machine env guestbook-dev)"
docker-compose run --rm --no-deps app python app.py create_db

इसके लिए वन-ऑफ कंटेनर चलाने की परेशानी क्यों? क्योंकि docker-compose स्वचालित रूप से पर्यावरण चर को इंजेक्ट करता है जिसे हमें डेटाबेस से कनेक्ट करने की आवश्यकता होती है। हमारे करने के लिए कोई कॉन्फ़िगरेशन नहीं है।

अब अपना ब्राउजर खोलें और ऊपर नोट किए गए गेस्टबुक देव आईपी एड्रेस पर जाएं। कृपया हमारी अतिथि पुस्तिका पर हस्ताक्षर करें।

बदलाव करें

आइए सुनिश्चित करें कि हम अपना एप्लिकेशन कोड तेजी से विकसित करना जारी रख सकते हैं। docker-compose.yml में कुछ प्रमुख कॉन्फ़िगरेशन विकल्प हैं जो हमें ऐसा करने की अनुमति देते हैं। ऐप सेवा में वॉल्यूम और कमांड के लिए टिप्पणियों को दोबारा पढ़ें।

अपने पसंदीदा टेक्स्ट एडिटर में app/templates/index.html खोलें। एक बदलाव करें और इसे सेव करें। अपने ब्राउज़र पर वापस जाएं और पुनः लोड करें। वोइला!

दूरस्थ परिनियोजन

यह हिस्सा अधिक कठिन है क्योंकि हमें क्रेडेंशियल सेट करना है और सुरक्षा के बारे में चिंता करना है। यदि आपके पास रैकस्पेस खाता नहीं है, तो आप डेवलपर+ के लिए साइन अप करके निःशुल्क क्रेडिट प्राप्त कर सकते हैं। एक बार आपका खाता तैयार हो जाने के बाद, आपको अपनी एपीआई कुंजी ढूंढनी होगी। अपने टर्मिनल में निम्नलिखित पर्यावरण चर सेट करें।

export OS_USERNAME=your-rackspace-username
export OS_API_KEY=your-rackspace-api-key
export OS_REGION_NAME=IAD

पर्यावरण प्रारंभ करें

हम अपने कंटेनरों के लिए डॉकर होस्ट बनाने के लिए डॉकर-मशीन का उपयोग करेंगे।

docker-machine create --driver rackspace guestbook
docker-machine ip guestbook # note the Guestbook IP Address

पर्यावरण सुरक्षित करें

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

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

docker-machine ssh guestbook "apt-get update"
docker-machine ssh guestbook "apt-get -y install fail2ban"
docker-machine ssh guestbook "ufw default deny"
docker-machine ssh guestbook "ufw allow ssh"
docker-machine ssh guestbook "ufw allow http"
docker-machine ssh guestbook "ufw allow 2376" # Docker
docker-machine ssh guestbook "ufw --force enable"

पर्यावरण प्रारंभ करना जारी रखें

इससे पहले कि हम डॉकर कंपोज़ को अपने दूरस्थ परिनियोजन का निर्माण करें, हमें अपने डेटाबेस के लिए कुछ पर्यावरण चर सेट करने की आवश्यकता है। इन पर्यावरण चर का उपयोग docker-compose-prod.yml फ़ाइल द्वारा किया जाता है। हम ऐसा इसलिए करते हैं ताकि खुद को GitHub को संवेदनशील डेटा देने से रोका जा सके।

export MYSQL_USER=guestbook-admin
export MYSQL_PASSWORD=$(hexdump -v -e '1/1 "%.2x"' -n 32 /dev/random)
export MYSQL_ROOT_PASSWORD=$(hexdump -v -e '1/1 "%.2x"' -n 32 /dev/random)

echo "MYSQL_USER=$MYSQL_USER"
echo "MYSQL_PASSWORD=$MYSQL_PASSWORD"
echo "MYSQL_ROOT_PASSWORD=$MYSQL_ROOT_PASSWORD"

अब हम उस होस्ट का उपयोग करने के लिए डॉकर को कॉन्फ़िगर करते हैं। अंत में, docker-compose हमारे कंटेनरों को बैकग्राउंड में बनाएगा और चलाएगा ताकि हमें कोई रंगीन लॉग संदेश दिखाई न दे जैसा कि हमने स्थानीय विकास में किया था।

eval "$(docker-machine env guestbook)"
docker-compose --file docker-compose-prod.yml build
docker-compose --file docker-compose-prod.yml up -d

जब यह चल रहा हो, तो यह महसूस करने के लिए docker-compose-prod.yml पढ़ें कि यह हमारे लिए क्या कर रहा है। ध्यान दें कि इसे डिफ़ॉल्ट docker-compose.yml फ़ाइल नाम कैसे दिया जाता है, इसलिए हमें फ़ाइल नाम को docker-compose कमांड में शामिल करने की आवश्यकता नहीं है। यह अच्छी तरह से टिप्पणी की गई है इसलिए इसे आत्म-व्याख्यात्मक होना चाहिए। यह सामान्य घटकों के आधार के रूप में docker-compose-common.yml का भी विस्तार करता है।

एक बार सब कुछ बन जाने और चलने के बाद, हमें डेटाबेस को इनिशियलाइज़ करना होगा। हम अपने डेटाबेस में टेबल बनाने वाले अजगर कमांड को चलाने के लिए अपने ऐप के वन-ऑफ कंटेनर रन का उपयोग करेंगे।

docker-compose --file docker-compose-prod.yml run --rm --no-deps app python app.py create_db

अब अपना ब्राउजर खोलें और ऊपर नोट किए गए गेस्टबुक आईपी एड्रेस पर जाएं। कृपया हमारी अतिथि पुस्तिका पर हस्ताक्षर करें।

बदलाव करें

हम अपने एप्लिकेशन कोड को दूरस्थ वातावरण में विकसित नहीं करना चाहते हैं, लेकिन हम वहां आसानी से परिवर्तन लागू करना चाहते हैं।

अपने पसंदीदा टेक्स्ट एडिटर में app/templates/index.html खोलें। एक बदलाव करें और इसे सेव करें। अपने ब्राउज़र पर वापस गेस्टबुक देव . पर जाएं आईपी ​​​​पता और पुनः लोड। सुनिश्चित करें कि यह आपके स्थानीय विकास परिवेश में अपेक्षित रूप से बदल गया है।

अब हम कुछ परिचित आदेशों को चलाकर उस परिवर्तन को दूरस्थ परिवेश में परिनियोजित करते हैं।

docker-compose --file docker-compose-prod.yml build
docker-compose --file docker-compose-prod.yml up -d

अपने ब्राउज़र पर वापस गेस्टबुक आईपी एड्रेस पर जाएं और पुनः लोड करें। वोइला! आपका परिवर्तन प्रकट हो गया है और आपका डेटा बूट करने के लिए बरकरार है।

आगे क्या है?

इसे एक कदम और आगे ले जाने के लिए आप आगे क्या करेंगे?

आपका डेटा आपके आवेदन का सबसे महत्वपूर्ण हिस्सा है। आपको यह सुनिश्चित करने की ज़रूरत है कि यह सुरक्षित है। एक बैकअप योजना के साथ शुरू करें। आप अपना समाधान रोल कर सकते हैं और क्लाउड फाइलों में क्रॉन जॉब स्टोर डेटाबेस डंप कर सकते हैं। या आप आसान रास्ता अपना सकते हैं और क्लाउड बैकअप का उपयोग कर सकते हैं। अंत में, आप पूरी तरह से बाहर जा सकते हैं और एक अत्यधिक उपलब्ध क्लाउड डेटाबेस बना सकते हैं और इसके बजाय इसका उपयोग करने के लिए docker-compose.yml को बदल सकते हैं।

निष्कर्ष

मुझे आशा है कि आपने एक ऐसे वातावरण में एप्लिकेशन विकसित करना सीख लिया है जो आपके दूरस्थ परिनियोजन वातावरण के जितना संभव हो सके उतना करीब हो। यदि आपको कोई समस्या आती है, तो कृपया हमें नीचे टिप्पणी में बताएं।


  1. RoboMongo और ObjectRocket के साथ MongoDB को विज़ुअलाइज़ करना

    MongoDB Inc. ने MongoDB के रिलीज़ 2.6 के साथ कई बेहतरीन नई एंटरप्राइज़ सुविधाएँ पेश की हैं, हालाँकि, एक चीज़ जो अभी भी अनुपस्थित है, वह है आपके डेटाबेस को प्रबंधित करने के लिए एक डेस्कटॉप एप्लिकेशन। पेश है रोबोमोंगो, क्रॉस-प्लेटफ़ॉर्म और ओपन सोर्स मोंगोडीबी मैनेजमेंट टूल। निम्नलिखित निर्देशों के साथ

  1. ऑब्जेक्टरॉकेट इलास्टिक्स खोज पर किबाना 4 के साथ ऊपर और चल रहा है

    यदि आप अपने लाखों (या अरबों!) इलास्टिक्स खोज दस्तावेज़ों को आकर्षक चार्ट, ग्राफ़ और तालिकाओं में बदलना चाहते हैं, तो किबाना इसका उत्तर है। इलास्टिक उत्पाद के रूप में, यह इलास्टिक्स खोज के साथ निकटता से जुड़ता है और डेटा के ढेर को समझने के लिए उपयोग में आसान इंटरफ़ेस प्रदान करता है। वर्तमान में, सभी

  1. Bluefish और KompoZer के साथ वेब डेवलपमेंट आसान हुआ

    एक वेबसाइट का निर्माण? पता नहीं कहाँ से शुरू करें? मुझे अपनी मदद करने दें। शुरुआत से वेबसाइट बनाना एक गंभीर व्यवसाय है। आपके पास एक विचार होना चाहिए। आपके पास एक डिज़ाइन होना चाहिए। और आपको साइटों को बनाने के लिए उपकरणों की आवश्यकता है। फिर, इससे पहले कि आप वास्तव में काम करना शुरू कर सकें, आपको HTM