जेफिरनेट लोगो

Gunicorn और Nginx के साथ AWS पर फ्लास्क का उपयोग करके मशीन लर्निंग मॉडल तैनात करना

दिनांक:

परिचय

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

आप पिछले लेख का अनुसरण कर सकते हैं फ्लास्क का उपयोग करके मशीन लर्निंग मॉडल कैसे तैनात करें?

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

Gunicorn और Nginx के साथ AWS पर फ्लास्क का उपयोग करके मशीन लर्निंग मॉडल तैनात करना

विषय - सूची

कदम शामिल करें

  • AWS EC2 इंस्टेंस सेट करें: ऑपरेटिंग सिस्टम के रूप में Ubuntu के साथ AWS EC2 इंस्टेंस लॉन्च करें। इनबाउंड ट्रैफ़िक की अनुमति देने के लिए सुरक्षा समूहों को कॉन्फ़िगर करें।
  • EC2 इंस्टेंस में SSH: अपने स्थानीय MacWeis से अपने EC2 इंस्टेंस से कनेक्ट करने के लिए SSH का उपयोग करें। आपके स्थानीय सिस्टम से जुड़ने के लिए हमें एक SSH कुंजी जोड़ी (सार्वजनिक और निजी) की आवश्यकता है।
  • फ्लास्क अनुप्रयोग तैनात करें: फ्लास्क एप्लिकेशन फ़ाइलों को EC2 इंस्टेंस में स्थानांतरित करें। यदि मॉडल पहले से ही Git हब पर है, तो इसे EC2 Ubuntu इंस्टेंस में क्लोन करें। फिर, एक वर्चुअल वातावरण सेट करें और पाइप का उपयोग करके निर्देशिका में आवश्यक पायथन पैकेज या आवश्यकता फ़ाइल स्थापित करें। परीक्षण करें कि फ्लास्क एप्लिकेशन EC2 वातावरण में सही ढंग से चलता है या नहीं।
  • निर्भरताएँ स्थापित करें: अपग्रेड के लिए पैकेज सूचियों को अपडेट करें और आवश्यक निर्भरताएँ स्थापित करें, जैसे कि पायथन, पिप, और आपके फ्लास्क एप्लिकेशन के लिए आवश्यक कोई अन्य लाइब्रेरी।
  • गुनिकॉर्न स्थापित और कॉन्फ़िगर करें: पायथन अनुप्रयोगों के लिए एक डब्लूएसजीआई HTTP सर्वर, गुनिकॉर्न स्थापित करें। एप्लिकेशन प्रक्रिया को प्रबंधित करने के लिए एक गुनिकॉर्न सेवा फ़ाइल बनाएं। गुनिकॉर्न सेवा को पृष्ठभूमि में चलाने के लिए प्रारंभ और सक्षम करें।
  • एनजीआईएनएक्स स्थापित और कॉन्फ़िगर करें: एनजीआईएनएक्स, एक उच्च-प्रदर्शन वेब सर्वर और रिवर्स प्रॉक्सी स्थापित करें। Gunicorn सर्वर पर आने वाले HTTP अनुरोधों को अग्रेषित करने के लिए NGINX कॉन्फ़िगर करें। अपने फ्लास्क एप्लिकेशन के लिए सर्वर ब्लॉक (वर्चुअल होस्ट) सेट करें।
  • डोमेन नाम कॉन्फ़िगर करें (वैकल्पिक): यदि आपके पास एक डोमेन नाम है, तो अपने EC2 इंस्टेंस के सार्वजनिक आईपी पते को इंगित करने के लिए DNS सेटिंग्स कॉन्फ़िगर करें। यदि नहीं, तो आप अपने फ्लास्क एप्लिकेशन को सीधे सार्वजनिक आईपी पते से एक्सेस कर सकते हैं।
  • एप्लिकेशन सुरक्षित करें: क्लाइंट और सर्वर के बीच सुरक्षित संचार के लिए HTTPS सक्षम करें। एक एसएसएल/टीएलएस प्रमाणपत्र प्राप्त करें (उदाहरण के लिए, आइए एन्क्रिप्ट करें) और इसका उपयोग करने के लिए एनजीआईएनएक्स को कॉन्फ़िगर करें।
  • परिनियोजन का परीक्षण करें: एक बार सब कुछ सेट हो जाने के बाद, अपने तैनात फ्लास्क एप्लिकेशन को वेब ब्राउज़र के माध्यम से एक्सेस करके या कर्ल या पोस्टमैन का उपयोग करके अनुरोध भेजकर परीक्षण करें।

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

व्यवहार में आने से पहले, आइए समझें कि यह कैसे किया जाता है।

संचार को समझना: फ्लास्क, गुनिकॉर्न, और नेग्नेक्स

             +-----------------------------+
             |           Client            |
             +-----------------------------+
                          |
                          |
             +------------v-------------+
             |        NGINX (Port 80)   |
             +------------+-------------+
                          |
                          |
             +------------v-------------+
             |       Gunicorn           |
             |     (WSGI Server)        |
             +------------+-------------+
                          |
                          |
             +------------v-------------+
             |   Flask Application      |
             |       (Python)           |
             +--------------------------+

फ्लास्क: अनुप्रयोग का केंद्र

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

हमने पिछले लेख में फ्लास्क एप्लिकेशन पहले ही बना लिया था। और कमांड का उपयोग करके इसे क्लोन करें।

https://github.com/Geek-shikha/Flask_model_sentiment_analysis.git

फ्लास्क अकेले एक समय में एकाधिक अनुरोधों को संभाल नहीं सकता है; तभी गुनिकॉर्न खेल में आता है।

गुनिकॉर्न: पायथन डब्लूएसजीआई HTTP सर्वर

गुनिकॉर्न एक मध्यस्थ परत के रूप में कार्य करता है जो फ्लास्क के साथ इंटरफेस करता है। यह एक Python WSGI HTTP सर्वर है जो UNIX सिस्टम के लिए डिज़ाइन किया गया है, जो Python वेब अनुप्रयोगों को तैनात करने का एक सरल लेकिन कुशल तरीका प्रदान करता है। जब आप अपना फ्लास्क ऐप गुनिकॉर्न के साथ चलाते हैं, तो यह एक डब्लूएसजीआई सर्वर बनाता है जो फ्लास्क एप्लिकेशन के साथ संचार करता है। गुनिकॉर्न आने वाले अनुरोधों को संभालने, लोड वितरित करने और समवर्ती उपयोगकर्ताओं को संभालने की क्षमता बढ़ाने के लिए कई कार्यकर्ता प्रक्रियाओं का प्रबंधन करता है। नहीं, श्रमिकों और धागों की संख्या सिस्टम के कोर की संख्या पर निर्भर करती है, 2*कोर +1।

जब तक आपके पास मल्टीथ्रेडिंग न हो, कोई अलग मेमोरी स्पेस नहीं है। एक एकल कार्यकर्ता समानांतर में ग्राहकों से एकाधिक अनुरोधों को संभाल सकता है।

गुनिकॉर्न की आवश्यकता क्यों है?

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

Nginx: फ्रंटलाइन रिवर्स प्रॉक्सी

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

नगनेक्स क्यों?

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

पूर्व आवश्यकताएँ

अपने मॉडल को तैनात करने के चरणों का उपयोग करने से पहले, आपको निम्नलिखित को समझना और समझना चाहिए।

एडब्ल्यूएस खाता: EC2 और अन्य AWS सेवाओं तक पहुँचने के लिए आपको AWS खाते की आवश्यकता है। यदि आपके पास कोई खाता नहीं है, तो आप AWS वेबसाइट पर एक के लिए साइन अप कर सकते हैं।

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

डब्लूएसजीआई फ़ाइल विनिर्देश और सर्वर, प्रॉक्सी और पोर्ट की समझ। थोड़ी सी समझ से भी मदद मिलेगी.

Gunicorn और Nginx के साथ AWS पर फ्लास्क का उपयोग करके मशीन लर्निंग मॉडल तैनात करना

चरण 1: AWS EC2 इंस्टेंस सेट करें

ऑपरेटिंग सिस्टम के रूप में Ubuntu के साथ AWS EC2 इंस्टेंस लॉन्च करें। एक माइक्रो सेवा बिल्कुल ठीक काम करेगी। हम इंस्टेंस का नाम सेंटीमेंट_एनालिसिस_सर्वर रख रहे हैं। आप जो चाहें उसे चुनने के लिए स्वतंत्र हैं। लेकिन याद रखें, इंस्टेंस की सेवा का चयन उस एप्लिकेशन के पैमाने पर निर्भर करता है जिसे आप होस्ट करने का प्रयास कर रहे हैं।

AWS EC2 इंस्टेंस सेट करें

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

  1. मुख्य युग्म बनाएँ: कुंजी जोड़ी बनाने के लिए "कुंजी जोड़ी बनाएं" बटन पर क्लिक करें।
  2. निजी कुंजी डाउनलोड करें: एक बार कुंजी जोड़ी बन जाने के बाद, एक निजी कुंजी फ़ाइल (.pem) स्वचालित रूप से आपकी स्थानीय मशीन पर डाउनलोड हो जाएगी। यह निजी कुंजी फ़ाइल आपके EC2 इंस्टेंसेस के लिए SSH कनेक्शन को प्रमाणित करती है।
AWS EC2 इंस्टेंस सेट करें

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

उदाहरण से कनेक्ट करें

चरण 2: EC2 इंस्टेंस में SSH

अपने कंप्यूटर का टर्मिनल खोलें. यदि आपकी निजी कुंजी फ़ाइल (.pem) किसी निर्देशिका में स्थित है, तो आपको अपने EC2 इंस्टेंस से कनेक्ट करने के लिए SSH कमांड का उपयोग करते समय कुंजी फ़ाइल का पूरा पथ निर्दिष्ट करना होगा। यहां बताया गया है कि आप यह कैसे कर सकते हैं:

मान लीजिए कि आपकी कुंजी (.pem फ़ाइल) डाउनलोड में है। फिर, आपको अपना SSH कमांड वहां रखना होगा। तो, आपको बस अपना टर्मिनल खोलना है, डाउनलोड निर्देशिका पर नेविगेट करना है, और वहां अपना कमांड पेस्ट करना है।

cd ~/Downloads

अब अपना SSH कमांड पेस्ट करें, जो उदाहरण जैसा दिख सकता है: ssh -i "sentiment_analyskey.pem" [ईमेल संरक्षित]

EC2 इंस्टेंस में SSH

चरण 3: उबंटू रिपॉजिटरी से आवश्यक घटक स्थापित करना

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

sudo apt update 
sudp apt upgrade 

फिर, पिप और वर्चुअल वातावरण स्थापित करने के लिए पायथन-पिप कमांड स्थापित करें।

sudo apt install python3-pip
sudo apt install python3-venv

फिर, नेट स्टेट पैकेज स्थापित करें। नेट-टूल्स पैकेज नेटवर्क से संबंधित जानकारी प्रदर्शित करता है, जैसे सक्रिय नेटवर्क कनेक्शन, रूटिंग टेबल, इंटरफ़ेस आँकड़े, आदि।

sudo apt नेट-टूल्स स्थापित करें

sudo apt install net-tools

netstat tuln #after installing run this command 

यह सिस्टम पर सक्रिय नेटवर्क कनेक्शन और श्रवण पोर्ट की एक सूची प्रदर्शित करता है:

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

  • सुडो यूएफडब्ल्यू सक्षम करें: फ़ायरवॉल सक्षम करता है.
  • सूडो यूएफडब्ल्यू अनुमति /: यह कमांड एक विशिष्ट पोर्ट और प्रोटोकॉल पर आने वाले कनेक्शन की अनुमति देता है (उदाहरण के लिए, sudo ufw SSH कनेक्शन को सक्षम करने के लिए 22/TCP की अनुमति देता है)।
  • सूडो यूएफडब्ल्यू स्थिति: फ़ायरवॉल की वर्तमान स्थिति और नियम प्रदर्शित करता है।
sudo apt install ufw #
sudo ufw allow 22 #ssh access
sudo ufw allow 5000  #5000 port for flask app test 

sudo ufw status 
  1. सूडो यूएफडब्ल्यू 5000 की अनुमति देता है: यह पोर्ट 5000 पर आने वाले कनेक्शन की अनुमति देता है। डिफ़ॉल्ट रूप से, यह इस पोर्ट पर टीसीपी और यूडीपी दोनों ट्रैफ़िक की अनुमति देता है। हम अपना फ्लास्क ऐप 5000 पर चलाएंगे, इसलिए पोर्ट 5000 पर चलने वाली फ्लास्क ऐप सेवा को नेटवर्क से एक्सेस करने की आवश्यकता है।
  2. सूडो यूएफडब्ल्यू 22 की अनुमति देता है: यह कमांड पोर्ट 22 पर आने वाले एसएसएच कनेक्शन को सक्षम बनाता है। एसएसएच का उपयोग आपके सिस्टम तक रिमोट एक्सेस के लिए किया जाता है, और पोर्ट 22 पर कनेक्शन की अनुमति आपको एसएसएच के माध्यम से अपने सर्वर से सुरक्षित रूप से कनेक्ट करने में सक्षम बनाती है। यह महत्वपूर्ण है; आपको इसे बंद नहीं करना चाहिए, क्योंकि आप दूर से अपने SSH तक नहीं पहुंच पाएंगे।

चरण 4: फ्लास्क एप्लिकेशन को तैनात करें और एप्लिकेशन को सेट करें

फ्लास्क एप्लिकेशन परिनियोजित करें: फ्लास्क एप्लिकेशन फ़ाइलों को EC2 इंस्टेंस में स्थानांतरित करें। यदि मॉडल पहले से ही Git हब पर है, तो इसे EC2 Ubuntu इंस्टेंस में क्लोन करें। फिर, एक नया वर्चुअल वातावरण सेट करें और पाइप का उपयोग करके निर्देशिका में आवश्यक पायथन पैकेज या आवश्यकता फ़ाइल स्थापित करें। फिर, टेस्ट फ्लास्क एप्लिकेशन EC2 वातावरण में सही ढंग से चलता है।

हमारे मामले में, हम एक गिट रिपॉजिटरी की क्लोनिंग कर रहे हैं, जिसका उपयोग हमने पिछले लेख में एक ट्वीट की भावना का विश्लेषण करने के लिए किया था।

लेकिन पहले, सुनिश्चित करें कि git स्थापित है। यदि यह स्थापित है, तो कमांड चलाएँ: git क्लोन -बी मास्टर -सिंगल-ब्रांच https://github.com/Geek-shikha/Flask_model_sentiment_analyss.git

git --version # if this exists you need not to sudo apt install git 
git clone -b master --single-branch 
https://github.com/Geek-shikha/Flask_model_sentiment_analysis.git #same line 

#after cloning the repository go tot the directory and list all the files 
cd Flask_model_sentiment_analysis
ls 

नोट: जब आप रिपॉजिटरी को क्लोन करते हैं, तो आपको कोई ऐप.पी फ़ाइल नहीं दिखाई देगी; इसके बजाय, myproject.py मौजूद है, जिसकी हमें आवश्यकता है।

एक मौजूदा आभासी वातावरण है जिसे हमने पहले स्थानीय स्तर पर फ्लास्क ऐप बनाते समय बनाया था। त्रुटियों या विसंगतियों से बचने के लिए हमें एक नया आभासी वातावरण बनाने की आवश्यकता है। नए आभासी वातावरण का नाम "myprojectenv" है और इसे सक्रिय किया जाना चाहिए।

python -m venv myprojectenv #virtual env named as myprojectenv
source myprojectenv/bin/activate #activate the virtual environment

आवश्यकताओं.txt में संग्रहीत पायथन लाइब्रेरी स्थापित करें

pip install -r requirements.txt #install the dependencies like flask, nltk etc.

अब अपने पायथन फ्लास्क एप्लिकेशन का परीक्षण करें और चलाएं

python3 myproject.py

इसे चलाकर, आप टर्मिनल में इस तरह एक आउटपुट देख सकते हैं:

यह देखने के लिए कि क्या यह काम कर रहा है। अपने सर्वर के आईपी पते पर जाएँ और उसके बाद अपने वेब ब्राउज़र में:5000 पर जाएँ। आपके वेब ब्राउज़र पर, आपका सर्वर आईपी 5000 है, जैसे http://server_pub_ip:5000। मान लीजिए कि सर्वर आईपी है  23.124.09.133. फिर रखें http://23.124.09.133:5000 

चरण 5: डब्लूएसजीआई फ़ाइल

इसके बाद, एक फ़ाइल बनाएं जो आपके एप्लिकेशन के लिए प्रवेश बिंदु के रूप में काम करेगी। यह फ़ाइल गुनिकॉर्न सर्वर को एप्लिकेशन के साथ इंटरैक्ट करने का निर्देश देगी।

फ्लास्क_मॉडल_सेंटिमेंट_एनालिसिस फ़ोल्डर में एक wsgi.py फ़ाइल बनाएं

nano ~/Flask_model_sentiment_analysis/wsgi.py 

इस फ़ाइल में, हमारे एप्लिकेशन से फ्लास्क इंस्टेंस आयात करें, जिसे हमने myproject.py नाम दिया है, और फिर इसे चलाएं:

from myproject import app

if __name__ == "__main__":
    app.run()

यदि कोई त्रुटि हो तो आप sudo apt और unicorn भी इंस्टॉल कर सकते हैं।

चरण 6: गुनिकॉर्न कॉन्फ़िगरेशन

आइए गुनिकॉर्न को कॉन्फ़िगर करके और डब्ल्यूएसजीआई ऐप को पोर्ट 5000 पर बाइंड करके शुरुआत करें

यूनिकॉर्न कॉन्फ़िगर कमांड एक गुनिकॉर्न सर्वर शुरू करता है जो किसी भी आईपी पते से पोर्ट 5000 पर आने वाले कनेक्शन को सुनता है और wsgi.py फ़ाइल में परिभाषित ऐप नामक डब्लूएसजीआई एप्लिकेशन को कार्यान्वित करता है।

gunicorn --bind 0.0.0.0:5000 wsgi:app

आउटपुट:

जांचें कि क्या यह काम कर रहा है। अपने सर्वर के आईपी पते पर जाएँ और उसके बाद अपने वेब ब्राउज़र में:5000 पर जाएँ: आपके वेब ब्राउज़र पर, आपके सर्वर का आईपी 5000 है, जैसे http://server_pub_ip:5000; मान लीजिए कि सर्वर आईपी है  23.124.09.133. फिर रखें http://23.124.09.133:5000 

इसे आपको इस तरह का आउटपुट देना चाहिए:

यदि आपको सही प्रतिक्रिया मिलती है, तो सेवा बंद कर दें; आप ctrl+c दबा सकते हैं और फिर कमांड देकर अपने वर्चुअल वातावरण को निष्क्रिय कर सकते हैं। इसके बाद, सिस्टम और सर्विस यूनिट फ़ाइल बनाएं। यह क्रिया उबंटू के इनिट सिस्टम को स्वचालित रूप से गुनिकॉर्न आरंभ करने और सर्वर बूट पर फ्लास्क एप्लिकेशन को होस्ट करने में सक्षम करेगी।

sudo nano /etc/systemd/system/myproject.service

निम्नलिखित सामग्री जोड़ें:

[Unit]
Description=Gunicorn instance to serve myproject
After=network.target

[Service]
User=ubuntu
Group=www-data
WorkingDirectory=/home/ubuntu/Flask_model_sentiment_analysis
Environment="PATH=/ubuntu/Flask_model_sentiment_analysis/myprojectenv/bin"
ExecStart=/home/ubuntu/Flask_model_sentiment_analysis/myprojectenv/bin/gunicorn 
--workers 3 --bind unix:myproject.sock -m 007 w>
[Install]
WantedBy=multi-user.target
  • [इकाई]: यह अनुभाग इकाई के लिए मेटाडेटा और निर्भरताएँ निर्दिष्ट करता है।
  • विवरण: सेवा का वर्णन करता है.
  • = Network.target के बाद: यह इंगित करता है कि यह इकाई नेटवर्क चालू होने के बाद शुरू होती है, सेवा शुरू होने से पहले नेटवर्क कनेक्टिविटी सुनिश्चित करती है।
  • [सेवा]: यह अनुभाग सेवा के लिए पैरामीटर परिभाषित करता है.
  • उपयोगकर्ता=यूबुयूनिट: यह उस उपयोगकर्ता खाते को निर्दिष्ट करता है जिसके अंतर्गत सेवा चलनी चाहिए।
  • समूह=www-डेटा: सेवा के लिए समूह सेट करता है.
  • कार्यकारी डाइरेक्टरी: सेवा के लिए कार्यशील निर्देशिका निर्दिष्ट करता है।
  • पर्यावरण='पथ=/उबंटू/फ्लास्क_मॉडल_सेंटिमेंट_एनालिसिस/मायप्रोजेक्टेनव/बिन': यह वैरिएबल सेवा के पर्यावरण वैरिएबल को परिभाषित करता है, वर्चुअल वातावरण की बाइनरी निर्देशिका को शामिल करने के लिए PATH वैरिएबल को स्पष्ट रूप से सेट करता है।
  • निष्पादन प्रारंभ करें: सेवा प्रारंभ करने के लिए आदेश निर्दिष्ट करता है. इस मामले में, यह विशिष्ट विकल्पों के साथ गुनिकॉर्न शुरू करता है:
  • -श्रमिक 3: तीन कार्यकर्ता प्रक्रियाओं का उपयोग करने के लिए गुनिकॉर्न को कॉन्फ़िगर करता है।
  • -बाइंड यूनिक्स: मेरा प्रोजेक्ट.सॉक: सॉकेट फ़ाइल निर्दिष्ट करता है जिसके माध्यम से गुनिकॉर्न वेब सर्वर (उदाहरण के लिए, Nginx या Apache) के साथ संचार करेगा।
  • -एम 007: गुनिकॉर्न द्वारा बनाई गई फ़ाइलों की अनुमतियों को नियंत्रित करते हुए, मास्क को 007 पर सेट करता है।
  • डब्ल्यूएसजीआई: ऐप: सेवा के लिए WSGI एप्लिकेशन का स्थान इंगित करता है।
  • [स्थापित करना]: यह अनुभाग इकाई के लिए स्थापना जानकारी को परिभाषित करता है।
  • वांटेडबाय=बहु-उपयोगकर्ता.लक्ष्य: उस लक्ष्य को निर्दिष्ट करता है जिसमें यह इकाई स्थापित की जानी चाहिए। इस स्थिति में, यह बहु-उपयोगकर्ता पर सेट है। लक्ष्य, उपयोगकर्ता सिस्टम के लिए एक मानक लक्ष्य, इंगित करता है कि सिस्टम बूट के दौरान सेवा स्वचालित रूप से शुरू होनी चाहिए।

संक्षेप में, यह सिस्टम यूनिट फ़ाइल विशिष्ट कॉन्फ़िगरेशन के साथ फ्लास्क एप्लिकेशन की सेवा के लिए गुनिकॉर्न को सेट करती है और यह सुनिश्चित करती है कि सिस्टम बूट पर सेवा स्वचालित रूप से शुरू हो जाती है।

आपके द्वारा बनाई गई गुनिकॉर्न सेवा शुरू करने और इसे सक्षम करने का समय आ गया है ताकि यह बूट पर शुरू हो जाए:

sudo systemctl start myproject
sudo systemctl enable myproject
sudo systemctl status myproject#check the status of your service file for errors, ifany

 यदि कमांड विरोध करता है, तो "sudo systemctl डेमॉन-रीलोड" को पुनः लोड करने के लिए इसका उपयोग करें।

यदि आपने प्रत्येक चरण का पालन किया है, तो कोई त्रुटि नहीं होनी चाहिए; हालाँकि, यदि त्रुटि बनी रहती है, तो त्रुटि का समाधान करें। सेवा फ़ाइल में पथ या वातावरण में कोई त्रुटि हो सकती है। ध्यान से जांचें

चरण 7: एनजीआईएनएक्स को स्थापित और कॉन्फ़िगर करें

गुनिकॉर्न एप्लिकेशन सर्वर चालू है और प्रोजेक्ट निर्देशिका में सॉकेट फ़ाइल के माध्यम से अनुरोधों की प्रतीक्षा कर रहा है। अब, हम इसकी कॉन्फ़िगरेशन फ़ाइल में मामूली संशोधन लागू करके इस सॉकेट पर वेब अनुरोधों को निर्देशित करने के लिए Nginx को कॉन्फ़िगर करेंगे। इसके लिए हमें सबसे पहले nginx इंस्टॉल करना होगा

sudo apt install nginx

Nginx की साइट-उपलब्ध निर्देशिका के भीतर एक ताज़ा सर्वर ब्लॉक कॉन्फ़िगरेशन फ़ाइल बनाकर प्रारंभ करें। इस फ़ाइल को "प्रोजेक्ट" नाम दें ताकि भ्रमित न हों। हम पहले myproject.py नाम का उपयोग करते रहे हैं

sudo nano /etc/nginx/sites-available/myproject

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

server {
    listen 80;
    server_name 3.110.196.110; #your server public ip 

    location / {
        include proxy_params;
        proxy_pass http://unix:/home/ubuntu/Flask_model_sentiment_analysis/myproject.sock;
    }
}
  • सर्वर {… }: यह ब्लॉक Nginx के भीतर एक सर्वर कॉन्फ़िगरेशन को परिभाषित करता है। यह किसी विशिष्ट सर्वर के अनुरोधों को संभालने के लिए कॉन्फ़िगरेशन सेटिंग्स को समाहित करता है।
  • सुनो 80: यह निर्देश निर्दिष्ट करता है कि Nginx को HTTP ट्रैफ़िक के लिए डिफ़ॉल्ट पोर्ट पोर्ट 80 पर आने वाले HTTP अनुरोधों को सुनना चाहिए।
  • सर्वर_नाम 3.110.196.110: यह निर्देश सर्वर का होस्टनाम या आईपी पता सेट करता है। इस स्थिति में, यह 3.110.196.110 पर सेट है, जिसे आपके सर्वर के सार्वजनिक आईपी पते से बदला जाना चाहिए।
  • स्थान / {… }: यह ब्लॉक परिभाषित करता है कि Nginx को सर्वर की रूट डायरेक्टरी / के लिए अनुरोधों को कैसे संभालना चाहिए।
  • प्रॉक्सी_पैराम्स शामिल करें: यह निर्देश proxy_params फ़ाइल से कॉन्फ़िगरेशन सेटिंग्स प्रदान करता है। इन सेटिंग्स में आमतौर पर प्रॉक्सी-संबंधित कॉन्फ़िगरेशन होते हैं, जैसे प्रॉक्सी हेडर।
  • प्रॉक्सी_पास http://unix:/home/ubuntu/Flask_model_sentiment_analysis/myproject.sock: यह निर्देश निर्दिष्ट करता है कि Nginx को आने वाले अनुरोधों को /home/ubuntu/Flask_model_sentiment_analysis/myproject.sock पर स्थित निर्दिष्ट यूनिक्स सॉकेट फ़ाइल पर अग्रेषित करना चाहिए। यहीं पर गुनिकॉर्न अनुरोधों को सुनता है। Nginx एक रिवर्स प्रॉक्सी के रूप में कार्य करेगा, गुनिकॉर्न को अनुरोध पास करेगा और क्लाइंट को प्रतिक्रियाएं लौटाएगा।

अब त्रुटियों के लिए सक्षम करें और परीक्षण करें

sudo ln -s /etc/nginx/sites-available/myproject /etc/nginx/sites-enabled
sudo nginx -t
  • sudo ln -s /etc/nginx/sites-available/myproject /etc/nginx/sites-enabled: यह कमांड साइट-सक्षम निर्देशिका में myproject नामक एक प्रतीकात्मक लिंक बनाता है, जो साइट-उपलब्ध निर्देशिका में स्थित कॉन्फ़िगरेशन फ़ाइल की ओर इशारा करता है। ऐसा करके, आप अपने प्रोजेक्ट के लिए सर्वर ब्लॉक कॉन्फ़िगरेशन को सक्षम करते हैं।
  • सुडो nginx -t: यह कमांड सिंटैक्स त्रुटियों के लिए Nginx कॉन्फ़िगरेशन का परीक्षण करता है। यह जाँचता है कि नए सक्षम myproject सर्वर ब्लॉक सहित Nginx कॉन्फ़िगरेशन फ़ाइलें सही ढंग से लिखी गई हैं और वैध हैं। यदि कोई त्रुटि है, तो इस परीक्षण के दौरान उनकी सूचना दी जाएगी।

जैसे ही हमने कॉन्फ़िगरेशन अपडेट किया है, nginx को पुनरारंभ करें

sudo systemctl restart nginx

nginx के लिए फ़ायरवॉल को अपडेट करना

sudo ufw allow 'Nginx Full'

चूँकि हमें 5000 पोर्ट की आवश्यकता नहीं है, हम इसे "sudo ufw deleteallow 5000" कमांड का उपयोग करके अक्षम कर सकते हैं, लेकिन हमें पोर्ट 22 को अक्षम करने की आवश्यकता नहीं है।

अब अपने वेब ब्राउज़र में अपने सर्वर के डोमेन नाम (या आईपी पते) पर जाएँ, और आपको आउटपुट दिखाई देगा:

यदि आपको 502 गेटवे जैसी कोई त्रुटि दिखाई देती है, तो आपको कुछ अनुमतियाँ बदलनी होंगी। आदेश का प्रयोग करें

sudo chmod 755 /home/ubuntu

इसके अलावा, जब आप एप्लिकेशन के लिए अपने सर्वर का परीक्षण करते हैं, तो आपको http://... का उपयोग करना चाहिए, न कि https का, क्योंकि एप्लिकेशन सुरक्षित नहीं है।

यदि त्रुटियाँ हैं, तो आप उन्हें निम्न आदेशों के माध्यम से जाँच सकते हैं:

चरण 7: एनजीआईएनएक्स को स्थापित और कॉन्फ़िगर करें

यदि आप सेवा बंद करना चाहते हैं, तो आप कमांड का उपयोग कर सकते हैं

sudo systemctl stop nginx #stop the service 
sudo systemctl start nginx# to start the service 

एप्लिकेशन को सुरक्षित करने के लिए आगे के कदम

एप्लिकेशन को सुरक्षित करने के लिए और भी कदम हैं।  

क्लाइंट और सर्वर के बीच सुरक्षित संचार के लिए HTTPS सक्षम करें। एक एसएसएल/टीएलएस प्रमाणपत्र प्राप्त करें (उदाहरण के लिए, आइए एन्क्रिप्ट करें) और इसका उपयोग करने के लिए एनजीआईएनएक्स को कॉन्फ़िगर करें। एप्लिकेशन को सुरक्षित करने के लिए हम Certbot का उपयोग कर सकते हैं।

सर्टिबोट का उपयोग करके अपने वेब सर्वर को एसएसएल/टीएलएस से सुरक्षित करने के लिए, आपको आमतौर पर एक पंजीकृत डोमेन नाम की आवश्यकता होती है। SSL प्रमाणपत्र जारी करने के लिए Certbot को एक डोमेन नाम की आवश्यकता होती है क्योंकि यह प्रमाणपत्र जारी करने से पहले डोमेन स्वामित्व की पुष्टि करता है। हालाँकि डोमेन नाम के बजाय सार्वजनिक आईपी पते का उपयोग करना तकनीकी रूप से संभव है, लेकिन कई कारणों से इसकी अनुशंसा नहीं की जाती है। एक है सर्टिफिकेट अथॉरिटी (सीए) आवश्यकताएँ: लेट्स एनक्रिप्ट (जो सर्टबोट उपयोग करता है) जैसे सर्टिफिकेट अथॉरिटी (सीए) के पास ऐसी नीतियां हैं जिनके लिए डोमेन सत्यापन की आवश्यकता होती है। वे आईपी पते के लिए एसएसएल प्रमाणपत्र जारी नहीं करेंगे।

यदि आप इसे सुरक्षित करना चाहते हैं, तो आप sudo apt install Python3-certbot-nginx का उपयोग कर सकते हैं और इसके दस्तावेज़ में इसके बारे में अधिक जान सकते हैं।

निष्कर्ष

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

स्पॉट_आईएमजी

नवीनतम खुफिया

स्पॉट_आईएमजी