MongoDB Atlas और Cloud Run पर बिना सर्वर वाला MEAN स्टैक ऐप्लिकेशन

1. परिचय

इस पोस्ट में, हम देखेंगे कि Cloud Run और MongoDB एक साथ मिलकर, बिना सर्वर के काम करने वाले MEAN स्टैक ऐप्लिकेशन को डेवलप करने का अनुभव कैसे देते हैं. हम Cloud Run और MongoDB के मल्टी-क्लाउड ऐप्लिकेशन डेटा प्लैटफ़ॉर्म MongoDB Atlas की मदद से, बिना सर्वर के काम करने वाला MEAN ऐप्लिकेशन बनाने का तरीका जानेंगे.

Cloud Run क्या है?

Cloud Run की मदद से, किसी भी भाषा (जैसे, Go, Python, Java, Node.js, .NET, और Ruby) में लिखे गए कंटेनर वाले ऐप्लिकेशन बनाए और डिप्लॉय किए जा सकते हैं. ये ऐप्लिकेशन, पूरी तरह से मैनेज किए गए प्लैटफ़ॉर्म पर बनाए और डिप्लॉय किए जाते हैं. Cloud Run हमें ये काम करने की सुविधा देता है:

  • पैकेज कोड को कई ऐसे कंटेनर में रखें जिनमें कोई स्टेटस नहीं होता. ये कंटेनर, अनुरोधों के बारे में जानते हैं और एचटीटीपी अनुरोधों के ज़रिए इसे चालू करते हैं
  • सिर्फ़ उन संसाधनों के लिए शुल्क लिया जाएगा जिनका इस्तेमाल किया गया है
  • अपनी पसंद की किसी भी प्रोग्रामिंग भाषा या ऑपरेटिंग सिस्टम लाइब्रेरी या किसी बाइनरी के साथ काम करता हो

ज़्यादा सुविधाओं के बारे में पूरी जानकारी पाने के लिए, यह लिंक देखें.

MongoDB Atlas के साथ सर्वरलेस डेटाबेस

इस समस्या को हल करने के लिए, MongoDB ने Atlas में सर्वरलेस इंस्टेंस लॉन्च किए हैं. यह पूरी तरह से मैनेज किया जाने वाला, सर्वरलेस डेटाबेस डिप्लॉयमेंट है. बिना सर्वर वाले इंस्टेंस में, आपको इंफ़्रास्ट्रक्चर के बारे में कभी नहीं सोचना पड़ता. बस अपने डेटाबेस को डिप्लॉय करें. इसके बाद, मांग के आधार पर यह अपने-आप स्केल अप और स्केल डाउन हो जाएगा. इसके लिए, आपको इसे मैनेज करने की ज़रूरत नहीं होगी. सबसे अच्छी बात यह है कि आपसे सिर्फ़ उन कार्रवाइयों के लिए शुल्क लिया जाएगा जिन्हें आपने चलाया है. अपने आर्किटेक्चर को पूरी तरह से सर्वरलेस बनाने के लिए, हम Cloud Run और MongoDB Atlas की सुविधाओं को एक साथ इस्तेमाल करेंगे.

MEAN स्टैक

MEAN स्टैक, एक टेक्नोलॉजी स्टैक है. इसका इस्तेमाल, फ़ुल-स्टैक वेब ऐप्लिकेशन बनाने के लिए किया जाता है. इन ऐप्लिकेशन को पूरी तरह से JavaScript और JSON की मदद से बनाया जाता है. MEAN स्टैक में चार मुख्य कॉम्पोनेंट होते हैं—MongoDB, Express, Angular, और Node.js.

  • डेटा स्टोरेज की ज़िम्मेदारी MongoDB की है.
  • Express.js, Node.js का वेब ऐप्लिकेशन फ़्रेमवर्क है. इसका इस्तेमाल एपीआई बनाने के लिए किया जाता है.
  • Angular एक क्लाइंट-साइड JavaScript प्लैटफ़ॉर्म है.
  • Node.js, सर्वर-साइड JavaScript रनटाइम एनवायरमेंट है. सर्वर, डेटाबेस से कनेक्ट होने के लिए MongoDB Node.js ड्राइवर का इस्तेमाल करता है. साथ ही, डेटा को वापस पाने और सेव करने के लिए भी इसका इस्तेमाल करता है.

आपको क्या बनाना है

आपको MongoDB, Express JS, Angular JS, और Node JS में, कर्मचारी की नौकरी की भूमिका के लिए फ़ुल स्टैक ऐप्लिकेशन लिखना होगा. इसमें ये चीज़ें शामिल हैं:

  • Node JS और Express JS में सर्वर ऐप्लिकेशन, कंटेनर में रखा गया
  • AngularJS में बनाया गया क्लाइंट ऐप्लिकेशन, कंटेनर में रखा गया है
  • दोनों ऐप्लिकेशन, Cloud Run में डिप्लॉय किए गए हैं
  • सर्वर ऐप्लिकेशन, MongoDB NodeJS ड्राइवर का इस्तेमाल करके सर्वरलेस MongoDB इंस्टेंस से कनेक्ट होता है
  • Server API, डेटाबेस के साथ रीड-राइट इंटरैक्शन करता है
  • क्लाइंट ऐप्लिकेशन, कर्मचारी की नौकरी की भूमिका वाले ऐप्लिकेशन के लिए यूज़र इंटरफ़ेस होता है

आपको क्या सीखने को मिलेगा

  • बिना सर्वर वाले MongoDB इंस्टेंस बनाने का तरीका
  • Cloud Run प्रोजेक्ट सेट अप करने का तरीका
  • Google Cloud Run में वेब ऐप्लिकेशन डिप्लॉय करने का तरीका
  • MEAN स्टैक ऐप्लिकेशन बनाने और उसे डिप्लॉय करने का तरीका

2. ज़रूरी शर्तें

  • कोई ब्राउज़र, जैसे कि Chrome या Firefox
  • Google Cloud Platform प्रोजेक्ट, जिसमें आपका Cloud Run और MongoDB Atlas इंस्टेंस शामिल हो
  • अगले सेक्शन में, MEAN स्टैक ऐप्लिकेशन बनाने का तरीका बताया गया है

3. MongoDB Serverless इंस्टेंस और डेटाबेस बनाना

e5cc775a49f2fb0.png

  • साइन अप करने के बाद, नया सर्वरलेस इंस्टेंस बनाने के लिए, "डेटाबेस बनाएं" बटन पर क्लिक करें. यह कॉन्फ़िगरेशन चुनें:

fca10bf6f031af7a.png

  • सर्वरलेस इंस्टेंस चालू होने के बाद, आपको यह चालू दिखेगा

d13c4b8bdd9569fd.png

  • कनेक्शन का आईपी पता और डेटाबेस उपयोगकर्ता जोड़ने के लिए, "कनेक्ट करें" बटन पर क्लिक करें
  • इस कोडलैब के लिए, हम "कहीं से भी ऐक्सेस करने की अनुमति दें" सेटिंग का इस्तेमाल करेंगे. MongoDB Atlas में सुरक्षा और ऐक्सेस से जुड़ी कई सुविधाएं मिलती हैं. सुरक्षा से जुड़ी सुविधाओं के बारे में ज़्यादा जानने के लिए, सुरक्षा से जुड़ी सुविधाओं के बारे में जानकारी देने वाला लेख पढ़ें
  • डेटाबेस के उपयोगकर्ता नाम और पासवर्ड के लिए, अपनी पसंद के क्रेडेंशियल इस्तेमाल करें. इन चरणों को पूरा करने के बाद, आपको यह दिखेगा:

bffeef16de1d1cd2.png

  • "कनेक्शन का तरीका चुनें" बटन पर क्लिक करें. इसके बाद, "अपना ऐप्लिकेशन कनेक्ट करें" को चुनें

75771e64427acd5e.png

  • आपको जो कनेक्शन स्ट्रिंग दिख रही है उसे कॉपी करें और पासवर्ड को अपने पासवर्ड से बदलें. हम इस स्ट्रिंग का इस्तेमाल, यहां दिए गए सेक्शन में अपने डेटाबेस से कनेक्ट करने के लिए करेंगे

4. Cloud Run प्रोजेक्ट सेट अप करना

  • सबसे पहले, Cloud Console में साइन इन करें. इसके बाद, नया प्रोजेक्ट बनाएं या किसी मौजूदा प्रोजेक्ट का फिर से इस्तेमाल करें
  • आपने जो प्रोजेक्ट बनाया है उसका प्रोजेक्ट आईडी याद रखें
  • यहां एक इमेज दी गई है. इसमें नया प्रोजेक्ट पेज दिखाया गया है. इस पेज पर, प्रोजेक्ट बनाते समय आपको अपना प्रोजेक्ट आईडी दिखेगा

f32dbd4eb2b7501e.png

  • इसके बाद, Cloud Shell से Cloud Run API चालू करें:
  • Cloud Console से Cloud Shell चालू करें. Cloud Shell चालू करें पर क्लिक करें
  • Cloud Shell से कनेक्ट होने के बाद, आपको दिखेगा कि आपकी पुष्टि पहले ही हो चुकी है और प्रोजेक्ट पहले से ही आपके प्रोजेक्ट आईडी पर सेट है. अगर किसी वजह से प्रोजेक्ट सेट नहीं है, तो यह कमांड दें:
gcloud config set project PROJECT_ID

3da173210a016316.png

  • नीचे दिए गए कमांड का इस्तेमाल करें:
gcloud services enable run.googleapis.com
  • हम कोड के रेफ़रंस के लिए, Cloud Shell और Cloud Shell Editor का इस्तेमाल करेंगे. Cloud Shell Editor को ऐक्सेस करने के लिए, Cloud Shell टर्मिनल में जाकर, 'एडिटर खोलें' पर क्लिक करें:

83793a577f08e4d4.png

5. MEAN स्टैक प्रोजेक्ट का क्लोन बनाना

  • हम कर्मचारी मैनेजमेंट के लिए एक वेब ऐप्लिकेशन डिप्लॉय करेंगे. REST API को Express और Node.js की मदद से बनाया गया है. वेब इंटरफ़ेस को Angular की मदद से बनाया गया है. साथ ही, डेटा को MongoDB Atlas इंस्टेंस में सेव किया जाएगा. इसे हमने पहले बनाया था
  • Cloud Shell टर्मिनल में यह कमांड चलाकर, प्रोजेक्ट रिपॉज़िटरी को क्लोन करें:
git clone https://github.com/mongodb-developer/mean-stack-example.git

6. Express और Node.js REST API को डिप्लॉय करना

Docker कॉन्फ़िगरेशन फ़ाइल

  • सबसे पहले, हम Express REST API के लिए Cloud Run सेवा डिप्लॉय करेंगे. डप्लॉयमेंट के लिए, सबसे ज़रूरी फ़ाइल Docker कॉन्फ़िगरेशन फ़ाइल होती है. आइए, इस पर एक नज़र डालें:

mean-stack-example/server/Dockerfile

# Use the official lightweight Node.js 12 image.
# https://hub.docker.com/_/node
FROM node:17-slim
 
WORKDIR /usr/app
COPY ./ /usr/app
 
# Install dependencies and build the project.
RUN npm install
RUN npm run build
 
# Run the web service on container startup.
CMD ["node", "dist/server.js"]
  • इस कॉन्फ़िगरेशन से Node.js सेट अप होता है. साथ ही, प्रोजेक्ट को कॉपी और बिल्ड किया जाता है. कंटेनर शुरू होने पर, नीचे दी गई कमांड सेवा शुरू करती है
node dist/server.js
  • Cloud Run का नया डिप्लॉयमेंट शुरू करने के लिए, बाईं ओर मौजूद साइडबार में Cloud Run आइकॉन पर क्लिक करें:

48c73bda3aa4ea02.png

  • इसके बाद, Cloud Run पर डिप्लॉय करें आइकॉन पर क्लिक करें:

cde124ba8ec23b34.png

  • सेवा के कॉन्फ़िगरेशन की जानकारी इस तरह डालें:
  • सेवा का नाम: node-express-api
  • डिप्लॉयमेंट प्लैटफ़ॉर्म: Cloud Run (पूरी तरह से मैनेज किया गया)
  • रीजन: कम समय में डेटा ट्रांसफ़र करने के लिए, अपने डेटाबेस के आस-पास का कोई रीजन चुनें
  • पुष्टि: पुष्टि न किए गए अनुरोधों को अनुमति दें
  • बदलाव की सेटिंग में जाकर, ऐडवांस सेटिंग दिखाने के लिए, 'ऐडवांस सेटिंग दिखाएं' पर क्लिक करें:
  • कंटेनर पोर्ट: 5200
  • एनवायरमेंट वैरिएबल. नीचे दिए गए की-वैल्यू पेयर को जोड़ें. साथ ही, पक्का करें कि आपने अपने MongoDB Atlas डिप्लॉयमेंट के लिए कनेक्शन स्ट्रिंग जोड़ी हो:
ATLAS_URI:mongodb+srv:/<username>:<password>@sandbox.pv0l7.mongodb.net/meanStackExample?retryWrites=true&w=majority
  • बिल्ड एनवायरमेंट के लिए, Cloud Build को चुनें
  • आखिर में, 'बिल्ड सेटिंग' सेक्शन में जाकर, यह चुनें:
  • बिल्डर: Docker
  • Docker: mean-stack-example/server/Dockerfile
  • Cloud Run की पहली सेवा को डिप्लॉय करने के लिए, डिप्लॉय करें बटन पर क्लिक करें. इसके बाद, ज़्यादा जानकारी वाले लॉग दिखाएं पर क्लिक करें!
  • बिल्ड पूरा होने के बाद, आपको डिप्लॉय की गई सेवा का यूआरएल दिखेगा:

759c69ba52a85b10.png

  • यूआरएल खोलें और उसके आखिर में ‘/employees' जोड़ें
  • आपको एक खाली कलेक्शन दिखेगा, क्योंकि फ़िलहाल डेटाबेस में कोई दस्तावेज़ नहीं है.

आइए, यूज़र इंटरफ़ेस को डिप्लॉय करें, ताकि हम कुछ जोड़ सकें!

7. Angular वेब ऐप्लिकेशन को डिप्लॉय करना

हमारा Angular ऐप्लिकेशन, क्लाइंट डायरेक्ट्री में है. इसे डिप्लॉय करने के लिए, हम Nginx सर्वर और Docker का इस्तेमाल करेंगे. आपके पास Angular ऐप्लिकेशन को डिप्लॉय करने के लिए, Firebase होस्टिंग का इस्तेमाल करने का विकल्प भी है. ऐसा इसलिए, क्योंकि अपने कॉन्टेंट को सीधे सीडीएन (कॉन्टेंट डिलीवरी नेटवर्क) पर उपलब्ध कराया जा सकता है.

कॉन्फ़िगरेशन फ़ाइलें

आइए, कॉन्फ़िगरेशन फ़ाइलों पर एक नज़र डालें:

mean-stack-example/client/nginx.conf

events{}
 
http {
   include /etc/nginx/mime.types;
   server {
       listen 8080;
       server_name 0.0.0.0;
       root /usr/share/nginx/html;
       index index.html;
 
       location / {
           try_files $uri $uri/ /index.html;
       }
   }
}
  • Nginx कॉन्फ़िगरेशन में, हम डिफ़ॉल्ट पोर्ट—8080 और शुरुआती फ़ाइल—index.html के बारे में बताते हैं

mean-stack-example/client/Dockerfile

FROM node:17-slim AS build
 
WORKDIR /usr/src/app
COPY package.json package-lock.json ./
 
# Install dependencies and copy them to the container
RUN npm install
COPY . .
 
# Build the Angular application for production
RUN npm run build --prod
 
# Configure the nginx web server
FROM nginx:1.17.1-alpine
COPY nginx.conf /etc/nginx/nginx.conf
COPY --from=build /usr/src/app/dist/client /usr/share/nginx/html
 
# Run the web service on container startup.
CMD ["nginx", "-g", "daemon off;"]
  • Docker कॉन्फ़िगरेशन में, हम Node.js की डिपेंडेंसी इंस्टॉल करते हैं और प्रोजेक्ट बनाते हैं. इसके बाद, हम बनाई गई फ़ाइलों को कंटेनर में कॉपी करते हैं, उन्हें कॉन्फ़िगर करते हैं, और Nginx सेवा को चालू करते हैं
  • आखिर में, हमें REST API के लिए यूआरएल कॉन्फ़िगर करना होगा, ताकि हमारा क्लाइंट ऐप्लिकेशन उसे अनुरोध भेज सके. हम प्रोजेक्ट में सिर्फ़ एक फ़ाइल में यूआरएल का इस्तेमाल कर रहे हैं. इसलिए, हम यूआरएल को हार्डकोड करेंगे. इसके अलावा, एनवायरमेंट वैरिएबल को विंडो ऑब्जेक्ट से अटैच किया जा सकता है और वहां से इसे ऐक्सेस किया जा सकता है.

mean-stack-example/client/src/app/employee.service.ts

...
@Injectable({
 providedIn: 'root'
})
export class EmployeeService {
 // Replace with the URL of your REST API
 private url = 'https://node-express-api-vsktparjta-uc.a.run.app'; 
...
  • हम Cloud Run पर डिप्लॉय करने के लिए तैयार हैं! नीचे दी गई कॉन्फ़िगरेशन सेटिंग के साथ नया डिप्लॉयमेंट शुरू करें:
      - Service Settings: Create a service
    
  • सेवा का नाम: angular-web-app
  • डिप्लॉयमेंट प्लैटफ़ॉर्म: Cloud Run (पूरी तरह से मैनेज किया गया)
  • पुष्टि: पुष्टि न किए गए अनुरोधों को अनुमति दें
  • बिल्ड एनवायरमेंट के लिए, Cloud Build को चुनें
  • आखिर में, 'बिल्ड सेटिंग' सेक्शन में जाकर, यह चुनें:
  • बिल्डर: Docker
  • Docker: mean-stack-example/client/Dockerfile
  • 'डिप्लॉय करें' बटन पर फिर से क्लिक करें. इसके बाद, अपने ऐप्लिकेशन को क्लाउड पर शिप करते समय लॉग देखें! डप्लॉयमेंट पूरा होने पर, आपको क्लाइंट ऐप्लिकेशन का यूआरएल दिखेगा

5da1d7defc1082fc.png

  • यूआरएल खोलें और अपने ऐप्लिकेशन का इस्तेमाल करें!

db154f1cd57e38f0.png

8. व्यवस्थित करें

इस पोस्ट में इस्तेमाल किए गए संसाधनों के लिए, अपने Google Cloud खाते से शुल्क न लिए जाने के लिए, यह तरीका अपनाएं.

MongoDB इंस्टेंस बंद करना

  1. MongoDB इंस्टेंस क्लस्टर पर जाएं
  2. बनाया गया क्लस्टर या इंस्टेंस चुनें
  3. क्लस्टर के नाम के बगल में मौजूद तीन बिंदु वाले आइकॉन पर क्लिक करें. इसके बाद, सूची से खत्म करें को चुनें

Cloud Run डिप्लॉयमेंट मिटाएं

  1. Google Cloud Console में Cloud Run पेज पर जाएं
  2. वह Cloud Run सेवा चुनें जिसे आपको मिटाना है
  3. कंसोल में सबसे ऊपर मौजूद, 'मिटाएं' आइकॉन पर क्लिक करें

9. बधाई हो

बधाई हो, आपने Cloud Run पर MEAN स्टैक वेब ऐप्लिकेशन बना लिया है!