Computer >> कंप्यूटर >  >> प्रोग्रामिंग >> Ruby

डॉकर में Amazons EC2 कंटेनर सेवा में सिनात्रा ऐप कैसे तैनात करें

स्वीकारोक्ति का समय। हनीबैगर पर मैंने जिन चार वर्षों में काम किया है, उनमें मेरे विकास का माहौल बहुत ज्यादा नहीं बदला है। लेकिन उस समय में काम करने के लिए लगभग दस सेवाओं के आधार पर हनीबैगर बहुत अधिक परिष्कृत हो गया है।

इसलिए हम स्थानीय विकास के लिए डॉकर की ओर बढ़ रहे हैं। पोस्टग्रेज, कैसेंड्रा, मेमकैच्ड और बाकी को स्थापित करने वाले प्रत्येक डेवलपर के बजाय, हम पूर्व-निर्मित वातावरण को स्पिन करने के लिए डॉकर-कंपोज़ का उपयोग कर सकते हैं। यह कमाल है।

स्वाभाविक रूप से, मुझे आश्चर्य होने लगा कि डॉकराइज़्ड एप्लिकेशन को तैनात करना कितना आसान होगा।

डॉकर के साथ परिनियोजन

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

इसलिए मैंने Amazon की ECS (EC2 कंटेनर सर्विस) पर ध्यान देना चुना।

ईसीएस क्या है?

ECS एक तरह से बड़े हो चुके, डॉकटर-कंपोज़ और डॉकर-स्वार्म के प्रोडक्शन-रेडी मैशअप की तरह है।

ईसीएस के साथ आप कह सकते हैं "मेरे वेब ऐप की तीन प्रतियां चलाएं" और यह समझदारी से आपके ईसी 2 उदाहरणों के क्लस्टर के अंदर उपयुक्त डॉकर कंटेनरों को स्पिन कर देगा।

यह आपके कंटेनरों में लोड-बैलेंस अनुरोध कर सकता है, और लोड के आधार पर आपके क्लस्टर को ऊपर या नीचे बढ़ा सकता है।

डॉकराइज़्ड सिनात्रा ऐप बनाना

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

ऐप

मैं आपको जो डॉकराइज़्ड सिनात्रा ऐप दिखाने जा रहा हूँ, वह tcnksm-sample/docker-sinatra का भारी पुनर्लेखित संस्करण है।

require 'sinatra'
require 'sinatra/base'

class App < Sinatra::Base
  get '/' do
    "Hello from sinatra! The time is #{ Time.now.to_i } on #{ `hostname` }!"
  end
end

यह रहा Gemfile :

# Gemfile
source 'https://rubygems.org'
gem 'sinatra'
gem 'thin'

...और यह रहा config.ru फ़ाइल:

$:.unshift(File.dirname(__FILE__))
require 'app'
run App

डॉकरफ़ाइल

इस ऐप के लिए डॉकर इमेज बनाने के लिए हमें डॉकरफाइल की आवश्यकता होगी। यह ऐप के लिए निर्देशिका बनाता है, फाइलों को कॉपी करता है, और पोर्ट 80 पर एक वेब सर्वर चलाता है।

FROM ruby:2.3.1-slim
RUN apt-get update -qq && apt-get install -y build-essential

ENV APP_ROOT /var/www/docker-sinatra
RUN mkdir -p $APP_ROOT
WORKDIR $APP_ROOT
ADD Gemfile* $APP_ROOT/
RUN bundle install
ADD . $APP_ROOT

EXPOSE 80
CMD ["bundle", "exec", "rackup", "config.ru", "-p", "80", "-s", "thin", "-o", "0.0.0.0"]

इमेज बनाना और चलाना

सबसे पहले, हम डॉकर को वर्तमान निर्देशिका में डॉकर फ़ाइल से एक छवि बनाने के लिए कहेंगे। फिर हम कंटेनर के पोर्ट 80 को लोकलहोस्ट:4000 में मैप करते हुए इसे चलाएंगे।

docker build -t docker-sinatra .
docker run -p 4000:80 docker-sinatra

यह जांचने के लिए कि क्या यह काम करता है, अपने वेब ब्राउज़र में लोकलहोस्ट:4000 खोलें। आपको कुछ इस तरह दिखना चाहिए:

डॉकर में Amazons EC2 कंटेनर सेवा में सिनात्रा ऐप कैसे तैनात करें

ईसीएस में परिनियोजन

अब ईसीएस पर तैनात करते हैं। हम उनके सेटअप विज़ार्ड का उपयोग करने जा रहे हैं। क्या यह धोखा है? मुझे परवाह नहीं है। :) तो ईसीएस कंट्रोल पैनल पर जाएं।

डॉकर में Amazons EC2 कंटेनर सेवा में सिनात्रा ऐप कैसे तैनात करें

"आरंभ करें" पर क्लिक करें। फिर अगली स्क्रीन पर "जारी रखें" पर क्लिक करें।"

डॉकर में Amazons EC2 कंटेनर सेवा में सिनात्रा ऐप कैसे तैनात करें

अपनी डॉकर रजिस्ट्री बनाना

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

मैं अपनी रजिस्ट्री का नाम "docker-sinatra" रखूंगा:

डॉकर में Amazons EC2 कंटेनर सेवा में सिनात्रा ऐप कैसे तैनात करें

अपनी छवि को रजिस्ट्री में धकेलना

फिर, मुझे अपनी छवि बनाने और उसे रजिस्ट्री में धकेलने के लिए चलाने के लिए आदेशों की एक सूची दी गई है।

पहली बार मैंने यह कोशिश की, मेरे ब्राउज़र के विज्ञापन-अवरोधक ने आदेशों को सही ढंग से प्रदर्शित होने से रोक दिया। अजीब - मुझे पता है।

डॉकर में Amazons EC2 कंटेनर सेवा में सिनात्रा ऐप कैसे तैनात करें

अपनी कार्य परिभाषा बनाना

AWS को नई, भ्रमित करने वाली, शब्दावली बनाना पसंद है। एक "कार्य परिभाषा" केवल कंटेनरों की एक सूची है जिसे एक साथ चलना चाहिए। यह एक तरह से एक Procfile, या एक docker-compose कॉन्फ़िगरेशन जैसा है।

इसलिए, यदि आपके एप्लिकेशन में एक कंटेनर Nginx चल रहा है, एक यूनिकॉर्न चल रहा है, और एक साइडकीक चल रहा है तो तीनों आपकी "कार्य परिभाषा" के भीतर समाहित हो सकते हैं।

हमारा ऐप बहुत आसान है। हमारे पास केवल एक कंटेनर है। तो कॉन्फ़िगरेशन न्यूनतम है।

  1. मैं सुनिश्चित करूंगा कि हमारी रजिस्ट्री से सही छवि निकले
  2. मैं कंटेनर को चलाने वाले ईसी2 इंस्टेंस पर कंटेनर से पोर्ट 80 को पोर्ट 80 पर मैप करूंगा।

डॉकर में Amazons EC2 कंटेनर सेवा में सिनात्रा ऐप कैसे तैनात करें

अपनी सेवा बनाना

अधिक भ्रमित शब्दावली! "सेवा" कॉन्फ़िगरेशन आपको यह निर्दिष्ट करने देता है कि कितने "कार्य" (आपके ऐप की उर्फ ​​​​कॉपी) चलने चाहिए, और वे संतुलित कैसे लोड होते हैं।

यहां, मैं चाहता हूं कि मेरे ऐप की तीन प्रतियां पोर्ट 80 पर लोड बैलेंसिंग के साथ चले।

डॉकर में Amazons EC2 कंटेनर सेवा में सिनात्रा ऐप कैसे तैनात करें

अपना क्लस्टर स्पिन करना

क्लस्टर विशिष्ट EC2 उदाहरणों का एक समूह है जो Amazon के ECS सॉफ़्टवेयर चला रहे हैं। आप उनके साथ कुछ भी कर सकते हैं जो आप किसी अन्य ईसी 2 इंस्टेंस के साथ कर सकते हैं। इस मामले में, मैंने निर्दिष्ट किया कि मुझे तीन t2.micro इंस्टेंस चाहिए थे।

कुछ पुष्टिकरण चरणों और लगभग 5 मिनट के इंतजार के बाद, सब कुछ तैयार था।

आपकी सेवा के काम करने के बाद, आपको एक स्क्रीन दिखाई देगी जो कुछ इस तरह दिखाई देगी:

डॉकर में Amazons EC2 कंटेनर सेवा में सिनात्रा ऐप कैसे तैनात करें

एप्लिकेशन का परीक्षण करना

आप लोड बैलेंसर के नाम पर क्लिक करके उसका विवरण प्राप्त कर सकते हैं। वहां, आपको इसका सार्वजनिक डोमेन नाम खोजना चाहिए। इसे अपने ब्राउज़र में रखें और आपको हमारा नमूना ऐप दिखाई देगा।

डॉकर में Amazons EC2 कंटेनर सेवा में सिनात्रा ऐप कैसे तैनात करें

यदि आप कुछ बार रीफ्रेश करते हैं, तो आप देखेंगे कि होस्टनाम बदल जाता है। ऐसा इसलिए है क्योंकि लोड बैलेंसर तीनों मेजबानों में आपके अनुरोधों को संतुलित कर रहा है।

सफाई करना

ECS विज़ार्ड ने अभी-अभी आपके AWS खाते में बहुत सारे संसाधन बनाए हैं। आप शायद उन्हें वहां नहीं छोड़ना चाहते। वे चीजों को अव्यवस्थित कर देंगे, और आपको पैसे खर्च करने पड़ सकते हैं।

सौभाग्य से, ECS विज़ार्ड अपने सभी संसाधनों को बनाने के लिए CloudFormation का उपयोग करता है। इसका मतलब है कि आप केवल CloudFormation स्टैक को हटाकर सब कुछ हटा सकते हैं।

डॉकर में Amazons EC2 कंटेनर सेवा में सिनात्रा ऐप कैसे तैनात करें


  1. पीसी पर क्लब हाउस का उपयोग कैसे करें

    क्लबहाउस इंटरनेट पर नए और अधिक परिष्कृत सोशल मीडिया प्लेटफॉर्म में से एक है। ऑडियो चैट एप्लिकेशन केवल आमंत्रण के आधार पर काम करता है और उपयोगकर्ताओं को तर्कों और चर्चाओं में भाग लेने देता है। जबकि क्लबहाउस मोबाइल ऐप छोटी बैठकों के लिए अच्छा काम करता है, छोटे स्क्रीन के माध्यम से बड़े दर्शकों को प्रब

  1. विंडोज 10 पर किसी ऐप को म्यूट कैसे करें

    आपके सभी ऑडियो डिवाइस और आपके द्वारा इंस्टॉल किए गए कई ऐप का विंडोज 10 में शानदार ऑडियो कंट्रोल है। क्या आप सोच रहे हैं कि विंडोज 10 पर ऐप्स को कैसे म्यूट किया जाए? तो यह लेख आपकी मदद करेगा। आप अपने हेडफ़ोन के लिए एक अलग स्तर का चयन कर सकते हैं, और जब आप उन्हें कनेक्ट करते हैं तो Windows 10 स्वचालित

  1. कैसे बताएं कि VPN वैध है या नहीं | नकली वीपीएन ऐप (2022) का पता लगाने के लिए 5 युक्तियाँ

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