NodeJS के साथ InsideLoop डेवलपमेंट

1. खास जानकारी

यह लैब ऐसी सुविधाएं और क्षमताएं दिखाता है जो कंटेनर वाले एनवायरमेंट में NodeJS ऐप्लिकेशन डेवलप करने वाले सॉफ़्टवेयर इंजीनियर के लिए डेवलपमेंट वर्कफ़्लो को आसान बनाने के लिए डिज़ाइन की गई हैं. सामान्य कंटेनर डेवलपमेंट के लिए, उपयोगकर्ता को कंटेनर के ब्यौरे और कंटेनर बनाने की प्रोसेस को समझना ज़रूरी है. इसके अलावा, डेवलपर को आम तौर पर अपने काम करने का फ़्लो तोड़ना पड़ता है, ताकि वे रिमोट एनवायरमेंट में अपने ऐप्लिकेशन की जांच करने और उन्हें डीबग करने के लिए, अपने IDE को छोड़ दें. इस ट्यूटोरियल में बताए गए टूल और टेक्नोलॉजी की मदद से, डेवलपर अपने IDE को छोड़े बिना, कंटेनर वाले ऐप्लिकेशन के साथ असरदार तरीके से काम कर सकते हैं.

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

इस लैब में, आपको GCP में कंटेनर को डेवलप करने के तरीकों के बारे में जानकारी मिलेगी. जैसे:

  • स्टार्टर Nodejs ऐप्लिकेशन बनाना
  • कंटेनर डेवलपमेंट के लिए Nodejs ऐप्लिकेशन को कॉन्फ़िगर करना
  • CRUD के अंदर की जाने वाली रेस्टिंग की सेवा के लिए कोडिंग करना
  • GKE (जीकेई) में डिप्लॉय किया जा रहा है
  • किसी गड़बड़ी की स्थिति को डीबग करना
  • ब्रेकपॉइंट / लॉग का इस्तेमाल करना
  • GKE (जीकेई) में बदलावों को फिर से लागू करना
  • ज़रूरी नहीं: बैकएंड परसिस्टेंस के लिए, CloudSQL को इंटिग्रेट करना

2. सेटअप और ज़रूरी शर्तें

अपने हिसाब से एनवायरमेंट सेटअप करें

  1. Google Cloud Console में साइन इन करें और नया प्रोजेक्ट बनाएं या किसी मौजूदा प्रोजेक्ट का फिर से इस्तेमाल करें. अगर आपके पास पहले से Gmail या Google Workspace खाता नहीं है, तो आपको नया खाता बनाना होगा.

b35bf95b8bf3d5d8.png

a99b7ace416376c4.png

bd84a6d3004737c5.png

  • प्रोजेक्ट का नाम, इस प्रोजेक्ट में हिस्सा लेने वाले लोगों का डिसप्ले नेम होता है. यह एक वर्ण स्ट्रिंग है, जिसका इस्तेमाल Google API नहीं करता. साथ ही, आप इसे किसी भी समय अपडेट कर सकते हैं.
  • प्रोजेक्ट आईडी, Google Cloud के सभी प्रोजेक्ट के लिए यूनीक होना चाहिए. साथ ही, आईडी को बदला नहीं जा सकता. सेट अप के बाद इसे बदला नहीं जा सकता. Cloud Console, एक यूनीक स्ट्रिंग अपने-आप जनरेट करता है; आम तौर पर, आपको उसके होने की कोई परवाह नहीं होती. ज़्यादातर कोडलैब में, आपको प्रोजेक्ट आईडी का रेफ़रंस देना पड़ता है और आम तौर पर इसकी पहचान PROJECT_ID के रूप में की जाती है. इसलिए, अगर आपको यह पसंद नहीं आता है, तो कोई भी कोड जनरेट करें. इसके अलावा, खुद का भी कोड बनाकर देखा जा सकता है कि वह उपलब्ध है या नहीं. फिर यह "फ़्रोज़न" होता है प्रोजेक्ट बनने के बाद.
  • तीसरी वैल्यू, प्रोजेक्ट नंबर है, जिसका इस्तेमाल कुछ एपीआई करते हैं. दस्तावेज़ में इन तीनों वैल्यू के बारे में ज़्यादा जानें.
  1. इसके बाद, आपको क्लाउड संसाधनों/एपीआई का इस्तेमाल करने के लिए, Cloud Console में बिलिंग की सुविधा चालू करनी होगी. इस कोडलैब का इस्तेमाल करने पर, आपको ज़्यादा पैसे नहीं चुकाने होंगे. इस ट्यूटोरियल के अलावा किसी अन्य प्लैटफ़ॉर्म पर बिलिंग न करने के लिए, संसाधनों को बंद करने के लिए, "साफ़-सफ़ाई" का पालन करें कोडलैब के आखिर में दिए गए निर्देश देखें. Google Cloud के नए उपयोगकर्ता, 300 डॉलर के मुफ़्त ट्रायल वाले प्रोग्राम में हिस्सा ले सकते हैं.

Cloudshell एडिटर शुरू करें

इस लैब को Google Cloud Shell Editor के साथ इस्तेमाल करने के लिए डिज़ाइन और टेस्ट किया गया था. एडिटर को ऐक्सेस करने के लिए,

  1. https://console.cloud.google.com पर जाकर, अपना Google प्रोजेक्ट ऐक्सेस करें.
  2. सबसे ऊपर दाएं कोने में मौजूद, Cloud Shell एडिटर आइकॉन पर क्लिक करें

8560cc8d45e8c112.png

  1. आपकी विंडो के सबसे नीचे एक नया पैनल खुलेगा
  2. 'एडिटर' बटन पर क्लिक करें

9e504cb98a6a8005.png

  1. दाईं ओर एक्सप्लोरर और बीच वाले हिस्से में एडिटर खुलेगा
  2. स्क्रीन के सबसे नीचे टर्मिनल पैनल भी उपलब्ध होना चाहिए
  3. अगर टर्मिनल खुला नहीं है, तो नई टर्मिनल विंडो खोलने के लिए `ctrl+`` के कुंजी कॉम्बिनेशन का इस्तेमाल करें

gcloud सेट अप करें

Cloud Shell में, अपना प्रोजेक्ट आईडी और वह इलाका सेट करें जहां आपको अपना ऐप्लिकेशन डिप्लॉय करना है. उन्हें PROJECT_ID और REGION वैरिएबल के तौर पर सेव करें.

export PROJECT_ID=$(gcloud config get-value project)
export PROJECT_NUMBER=$(gcloud projects describe $PROJECT_ID --format='value(projectNumber)')

GKE (जीकेई) क्लस्टर और डेटाबेस सेट अप करें

  1. सेटअप स्क्रिप्ट डाउनलोड करें और इसे एक्ज़ीक्यूटेबल बनाएं.
wget https://raw.githubusercontent.com/GoogleCloudPlatform/container-developer-workshop/main/labs/nodejs/setup.sh
chmod +x setup.sh

इस लैब में इस्तेमाल किए जा रहे इन्फ़्रास्ट्रक्चर का प्रावधान करें

इस लैब में, आपको GKE (जीकेई) पर कोड डिप्लॉय करना होगा. साथ ही, स्पैनर डेटाबेस में स्टोर किए गए डेटा को ऐक्सेस करना होगा. नीचे दी गई सेटअप स्क्रिप्ट आपके लिए यह इन्फ़्रास्ट्रक्चर तैयार करती है.

  1. setup.sh फ़ाइल खोलें और वर्तमान में CHANGEME पर सेट पासवर्ड के मानों में बदलाव करें
  2. इस लैब में इस्तेमाल किए जाने वाले GKE (जीकेई) क्लस्टर और CloudSQL डेटाबेस को सेट अप करने के लिए, सेटअप स्क्रिप्ट चलाएं
./setup.sh
  1. Cloud Shell में, mynodejsapp नाम वाली नई डायरेक्ट्री बनाएं
mkdir mynodejsapp
  1. इस डायरेक्ट्री में बदलाव करें और इसे फ़ाइल फ़ोल्डर के तौर पर खोलें. इससे, नए फ़ोल्डर में फ़ाइल फ़ोल्डर का कॉन्फ़िगरेशन बन जाएगा और एडिटर फिर से लोड हो जाएगा.
cd mynodejsapp && cloudshell workspace .
  1. NVM का इस्तेमाल करके, Node और NPM इंस्टॉल करें.
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.1/install.sh | bash
        
        # This loads nvm bash_completion
export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"  # This loads nvm
[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion"  

nvm install stable

nvm alias default stable

3. नया स्टार्टर ऐप्लिकेशन बनाएं

  1. ऐप्लिकेशन शुरू करना

नीचे दिए गए निर्देश को चलाकर, package.json फ़ाइल बनाई जा रही है

npm init
    Choose the entry point: (index.js) src/index.js and default values for the rest of the parameters. This will create the file with following contents
{
  "name": "mynodejsapp",
  "version": "1.0.0",
  "description": "",
  "main": "src/index.js",,
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "",
  "license": "ISC"
}
  1. एंट्री पॉइंट जोड़ें

"start": "node src/index.js", स्क्रिप्ट में शुरुआती निर्देश शामिल करने के लिए, इस फ़ाइल में बदलाव करें. बदलाव के बाद, स्क्रिप्ट नीचे दिए गए कोड स्निपेट की तरह दिखनी चाहिए:

"scripts": {
    "start": "node src/index.js",
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  1. एक्सप्रेस डिपेंडेंसी जोड़ना

हम जो कोड जोड़ने जा रहे हैं वह express का भी इस्तेमाल करता है. इसलिए, हमें इस package.json फ़ाइल पर उस डिपेंडेंसी को जोड़ने दें. इसलिए, सभी बदलावों के बाद, package.json फ़ाइल को नीचे बताए गए तरीके से देखना चाहिए.

​​{
  "name": "mynodejsapp",
  "version": "1.0.0",
  "description": "",
  "main": "src/index.js",
  "scripts": {
    "start": "node src/index.js",
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "Your Name",
  "license": "ISC",
  "dependencies": {
    "express": "^4.16.4"
  }
}
  1. index.js फ़ाइल बनाना

src नाम की एक सोर्स डायरेक्ट्री बनाना

इस कोड का इस्तेमाल करके, src/index.js बनाएं

const express = require('express');
const app = express();
const PORT = 8080;

app.get('/', (req, res) => {
    var message="Greetings from Node";
    res.send({ message: message });
  });

app.listen(PORT, () => {
  console.log(`Server running at: http://localhost:${PORT}/`);

});

ध्यान दें कि PORT को 8080 वैल्यू पर सेट किया गया है

मेनिफ़ेस्ट जनरेट करें

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

टर्मिनल में नीचे दिया गया निर्देश चलाएं

skaffold init --generate-manifests

जब कहा जाए, तब:

  • पोर्ट के लिए 8080 डालें
  • कॉन्फ़िगरेशन सेव करने के लिए, y डालें

फ़ाइल फ़ोल्डर विज़, skaffold.yaml और deployment.yaml में दो फ़ाइलें जोड़ी गई हैं

ऐप्लिकेशन का नाम अपडेट करें

कॉन्फ़िगरेशन में शामिल डिफ़ॉल्ट मान वर्तमान में आपके ऐप्लिकेशन के नाम से मेल नहीं खाते. फ़ाइलों को डिफ़ॉल्ट मानों की बजाय अपने ऐप्लिकेशन के नाम का संदर्भ देने के लिए अपडेट करें.

  1. Skaffold कॉन्फ़िगरेशन में एंट्री बदलें
  • skaffold.yaml खोलें
  • इमेज के उस नाम को चुनें जो फ़िलहाल package-json-image के तौर पर सेट है
  • राइट क्लिक करें और 'सभी घटनाएं बदलें' को चुनें
  • नया नाम, mynodejsapp के तौर पर लिखें
  1. Kubernetes कॉन्फ़िगरेशन में एंट्री बदलें
  • deployment.yaml फ़ाइल खोलें
  • इमेज के उस नाम को चुनें जो फ़िलहाल package-json-image के तौर पर सेट है
  • राइट क्लिक करें और 'सभी घटनाएं बदलें' को चुनें
  • नया नाम, mynodejsapp के तौर पर लिखें

ध्यान दें कि skaffold.yaml फ़ाइल के build सेक्शन में, ऐप्लिकेशन को कंटेनर बनाने के लिए buildpacks का इस्तेमाल किया गया है. इस कोड में Dockerfile मौजूद नहीं है. साथ ही, इस ऐप्लिकेशन को कंटेनर बनाने के लिए, डेवलपर को Docker की जानकारी की ज़रूरत नहीं है.

इसके अलावा, इस स्केलोल्ड कॉन्फ़िगरेशन से एडिटर और चल रहे कंटेनर के बीच हॉट सिंक अपने-आप चालू हो जाता है. हॉट सिंक को चालू करने के लिए, किसी और कॉन्फ़िगरेशन की ज़रूरत नहीं होती.

4. डेवलपमेंट प्रोसेस की जानकारी

इस सेक्शन में, आपको बुनियादी प्रोसेस जानने और स्टार्टर ऐप्लिकेशन के कॉन्फ़िगरेशन और सेटअप की पुष्टि करने के लिए, Cloud Code प्लगिन का इस्तेमाल करने के कुछ चरणों के बारे में बताया जाएगा.

Cloud Code, आपके डेवलपमेंट की प्रोसेस को आसान बनाने के लिए skaffold के साथ इंटिग्रेट होता है. जब इन चरणों को GKE (जीकेई) पर डिप्लॉय किया जाता है, तो Cloud Code और Skaffold, आपके कंटेनर की इमेज अपने-आप बनाएंगे, उसे कंटेनर रजिस्ट्री में पुश करेंगे, और आपके ऐप्लिकेशन को GKE (जीकेई) पर डिप्लॉय कर देंगे. ऐसा, पर्दे के पीछे की गतिविधियों और डेवलपर फ़्लो से जुड़ी जानकारी को समझकर किया जा सकता है. Cloud Code, कंटेनर पर आधारित डेवलपमेंट के लिए पारंपरिक डीबग और हॉटसिंक क्षमताएं देकर आपकी डेवलपमेंट प्रोसेस को बेहतर बनाता है.

Kubernetes में डिप्लॉय करें

  1. Cloud Shell Editor में सबसे नीचे मौजूद पैनल में, Cloud Code फ़ाॅर्म चुनें

fdc797a769040839.png

  1. सबसे ऊपर दिखने वाले पैनल में, Kubernetes पर चलाएं को चुनें. अगर पूछा जाए, तो मौजूदा Kubernetes संदर्भ इस्तेमाल करने के लिए 'हां' चुनें.

cfce0d11ef307087.png

  1. पहली बार निर्देश चलाने पर स्क्रीन के सबसे ऊपर एक प्रॉम्प्ट दिखेगा, जिसमें पूछा जाएगा कि क्या आपको मौजूदा kubernetes कॉन्टेक्स्ट चाहिए या नहीं. इसके लिए, "हां" चुनें और उसका इस्तेमाल मौजूदा संदर्भ के तौर पर करें.

817ee33b5b412ff8.png

  1. इसके बाद एक प्रॉम्प्ट दिखेगा, जिसमें पूछा जाएगा कि किस कंटेनर रजिस्ट्री का इस्तेमाल करना है. दी गई डिफ़ॉल्ट वैल्यू को स्वीकार करने के लिए, Enter दबाएं

eb4469aed97a25f6.png

  1. प्रोग्रेस और सूचनाएं देखने के लिए, सबसे नीचे मौजूद पैनल में आउटपुट टैब चुनें

f95b620569ba96c5.png

  1. "Kubernetes: रन/डीबग - ज़्यादा जानकारी" चुनें अतिरिक्त विवरण और कंटेनर से लाइव स्ट्रीमिंग लॉग देखने के लिए दाईं ओर दिए गए चैनल ड्रॉप-डाउन में

94acdcdda6d2108.png

  1. "Kubernetes: रन/डीबग" चुनकर, आसान बनाए गए व्यू पर वापस जाएं ड्रॉपडाउन से
  2. बिल्ड और टेस्ट पूरे होने के बाद, आउटपुट टैब में यह मैसेज दिखता है: Resource deployment/mynodejsapp status completed successfully और एक यूआरएल दिखता है: "सर्विस डेमो-ऐप्लिकेशन से फ़ॉरवर्ड किया गया यूआरएल: http://localhost:8080"
  3. Cloud Code टर्मिनल में, आउटपुट (http://localhost:8080) में मौजूद यूआरएल पर कर्सर घुमाएं. इसके बाद, दिखने वाले टूल टिप में 'वेब झलक खोलें' चुनें.

जवाब यह होगा:

{"message":"Greetings from Node"}

फिर से लोड करें

  1. src/index.js पर नेविगेट करें. वेलकम मैसेज में मौजूद कोड में बदलाव करके, 'Hello from Node' करें

ध्यान दें कि Output विंडो Kubernetes: Run/Debug व्यू में, वॉचर अपडेट की गई फ़ाइलों को Kubernetes के कंटेनर के साथ सिंक करता है

Update initiated
File sync started for 1 files for gcr.io/myproject/mynodejsapp:latest@sha256:f554756b3b4d6c301c4b26ef96102227cfa2833270db56241248ae42baa1971a
File sync succeeded for 1 files for gcr.io/myproject/mynodejsapp:latest@sha256:f554756b3b4d6c301c4b26ef96102227cfa2833270db56241248ae42baa1971a
Update succeeded
  1. Kubernetes: Run/Debug - Detailed व्यू पर स्विच करने पर, आपको दिखेगा कि यह फ़ाइल में हुए बदलावों को पहचानकर नोड को रीस्टार्ट कर रहा है
files modified: [src/index.js]
Copying files:map[src/index.js:[/workspace/src/index.js]]togcr.io/myproject/mynodejsapp:latest@sha256:f554756b3b4d6c301c4b26ef96102227cfa2833270db56241248ae42baa1971a
Syncing 1 files for gcr.io/myproject/mynodejsapp:latest@sha256:f554756b3b4d6c301c4b26ef96102227cfa2833270db56241248ae42baa1971a
Watching for changes...
[mynodejsapp]
[mynodejsapp]> mynodejsapp@1.0.0 start /workspace
[mynodejsapp]> node src/index.js
[mynodejsapp]
[mynodejsapp]Server running at: http://localhost:8080/
  1. अपडेट किए गए नतीजे देखने के लिए, अपना ब्राउज़र रीफ़्रेश करें.

डीबग करना

  1. डीबग व्यू पर जाएं और मौजूदा थ्रेड 647213126d7a4c7b.png को रोकें.
  2. ऐप्लिकेशन को debug मोड में चलाने के लिए, सबसे नीचे मौजूद मेन्यू में Cloud Code पर क्लिक करें और Debug on Kubernetes को चुनें.
  • Output विंडो के Kubernetes Run/Debug - Detailed व्यू में, ध्यान दें कि skaffold, इस ऐप्लिकेशन को डीबग मोड में डिप्लॉय करेगा.
  • ऐप्लिकेशन को बनाने और डिप्लॉय करने में कुछ मिनट लगेंगे. इस बार आपको एक डीबगर अटैच दिखेगा.
Port forwarding pod/mynodejsapp-6bbcf847cd-vqr6v in namespace default, remote port 9229 -> http://127.0.0.1:9229
[mynodejsapp]Debugger attached.
  1. सबसे नीचे मौजूद स्टेटस बार का रंग नीले से नारंगी रंग में बदल जाता है. इससे पता चलता है कि यह डीबग मोड में है.
  2. Kubernetes Run/Debug व्यू में, देखें कि डीबग किया जा सकने वाला कंटेनर शुरू हो गया है
**************URLs*****************
Forwarded URL from service mynodejsapp-service: http://localhost:8080
Debuggable container started pod/mynodejsapp-deployment-6bc7598798-xl9kj:mynodejsapp (default)
Update succeeded
***********************************

ब्रेकपॉइंट इस्तेमाल करें

  1. src/index.js खोलें
  2. var message="Greetings from Node"; वाला स्टेटमेंट ढूंढें
  3. लाइन नंबर की बाईं ओर मौजूद खाली जगह पर क्लिक करके, उस लाइन में एक ब्रेकपॉइंट जोड़ें. ब्रेकपॉइंट सेट होने का पता लगाने के लिए, लाल रंग का इंंडिकेटर दिखेगा
  4. अपने ब्राउज़र को फिर से लोड करें और ध्यान दें कि डीबगर, ब्रेकपॉइंट पर प्रोसेस को रोक देता है. साथ ही, इससे आपको GKE (जीकेई) में रिमोट तरीके से चल रहे ऐप्लिकेशन के वैरिएबल और स्थिति की जांच करने की अनुमति मिलती है
  5. जब तक आपको "message" वैरिएबल नहीं मिल जाता, तब तक वैरिएबल सेक्शन में नीचे की ओर क्लिक करते रहें.
  6. 7cfdee4fd6ef5c3a.png पर चरण को दबाकर, लाइन चलाएं
  7. "message" वैरिएबल की मौजूदा वैल्यू बदलकर "Greetings from Node" करें
  8. वैरिएबल के नाम "टारगेट" पर दो बार क्लिक करें और पॉप-अप में, वैल्यू को बदलकर "Hello from Node" जैसा कुछ करें
  9. डीबग कंट्रोल पैनल में 'जारी रखें' बटन पर क्लिक करें
  10. अपने ब्राउज़र में उस जवाब की समीक्षा करें जो अब आपकी डाली गई अपडेट की गई वैल्यू दिखाता है.
  11. "डीबग" बंद करना मोड चालू करने के लिए, 'रोकें' बटन 647213126d7a4c7b.png को दबाएं. इसके बाद, ब्रेकपॉइंट पर फिर से क्लिक करके ब्रेकपॉइंट हटाएं.

5. सीआरयूडी रेस्ट सर्विस की सुविधा आसानी से बनाई जा रही है

इस समय आपका ऐप्लिकेशन कंटेनर वाले डेवलपमेंट के लिए पूरी तरह से कॉन्फ़िगर हो गया है और आपने Cloud Code के साथ बेसिक डेवलपमेंट वर्कफ़्लो को समझ लिया है. नीचे दिए गए सेक्शन में, Google Cloud में मैनेज किए जा रहे डेटाबेस से कनेक्ट करके अन्य सर्विस एंडपॉइंट को जोड़कर, उन चीज़ों की प्रैक्टिस की जाती है जो आपने सीखी हैं.

डिपेंडेंसी कॉन्फ़िगर करें

ऐप्लिकेशन कोड, बाकी सेवा से जुड़े डेटा को बनाए रखने के लिए, डेटाबेस का इस्तेमाल करता है. यह पक्का करें कि package.json फ़ाइल में ये डिपेंडेंसी उपलब्ध हों

  1. CRUD ऐप्लिकेशन के Postgres बनाने के लिए, दो और डिपेंडेंसी pg और sequelize को package.json फ़ाइल में जोड़ें. बदलाव अपलोड करें, लेकिन डिपेंडेंसी सेक्शन ऐसा दिखेगा.
    "dependencies": {
    "express": "^4.16.4",
    "pg": "^8.7.3",
    "sequelize": "^6.17.0"
  }

REST सेवा को कोड करें

  1. इस ऐप्लिकेशन में CRUD ऐप्लिकेशन कोड जोड़ें
wget -O app.zip https://github.com/GoogleCloudPlatform/container-developer-workshop/raw/main/labs/nodejs/app.zip

unzip app.zip

इस कोड में ये शामिल हैं

  • item के लिए, इकाई मॉडल के साथ मॉडल फ़ोल्डर
  • CRUD से जुड़ी कार्रवाइयां करने वाले कोड के साथ controllers फ़ोल्डर
  • रूट फ़ोल्डर, जो खास यूआरएल पैटर्न को अलग-अलग कॉल पर रूट करता है
  • डेटाबेस कनेक्टिविटी की जानकारी वाला config फ़ोल्डर
  1. ध्यान दें कि db.config.js फ़ाइल का डेटाबेस कॉन्फ़िगरेशन, ऐसे एनवायरमेंट वैरिएबल के बारे में बताता है जिन्हें डेटाबेस से कनेक्ट करने के लिए दिया जाना ज़रूरी है. इसके अलावा, आपको यूआरएल एन्कोडिंग के लिए आने वाले अनुरोध को भी पार्स करना होगा.
  2. src/index.js में नीचे दिया गया कोड स्निपेट जोड़ें, ताकि app.listen(PORT, () => { से शुरू होने वाले आखिरी सेक्शन से ठीक पहले, अपनी मुख्य JavaScript फ़ाइल के सीआरयूडी कोड से कनेक्ट किया जा सके
const bodyParser = require('body-parser')
app.use(bodyParser.json())
app.use(
 bodyParser.urlencoded({
   extended: true,
 })
)
const db = require("../app/models");
db.sequelize.sync();
require("../app/routes/item.routes")(app);
  1. डेटाबेस कनेक्टिविटी की जानकारी देने के लिए, एनवायरमेंट वैरिएबल जोड़ें. इसके लिए, deployment.yaml फ़ाइल में डिप्लॉयमेंट में बदलाव करें.

नीचे दी गई परिभाषा से मेल खाने के लिए फ़ाइल के आखिर में खास जानकारी एंट्री अपडेट करें

    spec:
      containers:
      - name: mynodejsapp
        image: mynodejsapp
        env:
        - name: DB_HOST
          value: ${DB_INSTANCE_IP}        
        - name: DB_PORT
          value: "5432"  
        - name: DB_USER
          valueFrom:
            secretKeyRef:
              name: gke-cloud-sql-secrets
              key: username
        - name: DB_PASS
          valueFrom:
            secretKeyRef:
              name: gke-cloud-sql-secrets
              key: password
        - name: DB_NAME
          valueFrom:
            secretKeyRef:
              name: gke-cloud-sql-secrets
              key: database
  1. DB_Host वैल्यू को अपने डेटाबेस के पते से बदलें
export DB_INSTANCE_IP=$(gcloud sql instances describe mytest-instance \
    --format=json | jq \
    --raw-output ".ipAddresses[].ipAddress")

envsubst < deployment.yaml > deployment.new && mv deployment.new deployment.yaml

ऐप्लिकेशन डिप्लॉय करें और उसकी पुष्टि करें

  1. क्लाउड शेल एडिटर में सबसे नीचे मौजूद पैनल में, Cloud Code को चुनें. इसके बाद, स्क्रीन पर सबसे ऊपर मौजूद Debug on Kubernetes को चुनें.
  2. बिल्ड और टेस्ट पूरे हो जाने के बाद, आउटपुट टैब में Resource deployment/mynodejsapp status completed successfully दिखेगा और एक यूआरएल दिखेगा: "mynodejsapp से फ़ॉरवर्ड किया गया यूआरएल: http://localhost:8080"
  3. कुछ आइटम जोड़ें.

Cloud Shell Terminal से, यहां दिए गए कमांड चलाएं

URL=localhost:8080
curl -X POST $URL/items -d '{"itemName":"Body Spray", "itemPrice":3.2}' -H "Content-Type: application/json"
curl -X POST $URL/items -d '{"itemName":"Nail Cutter", "itemPrice":2.5}' -H "Content-Type: application/json"
  1. ब्राउज़र में $URL/items चलाकर जीईटी की जांच करें. कमांड लाइन से भी कर्ल चलाया जा सकता है
curl -X GET $URL/items
  1. परीक्षण हटाएं: अब चलाकर किसी आइटम को हटाने का प्रयास करें. अगर ज़रूरी हो, तो item-id की वैल्यू बदलें.
curl -X DELETE $URL/items/1
    This throws an error message
{"message":"Could not delete Item with id=[object Object]"}

समस्या की पहचान करना और उसे ठीक करना

  1. डीबग मोड में ऐप्लिकेशन को रीस्टार्ट करें और समस्या को ढूंढें. इसके लिए, यहां कुछ सुझाव दिए गए हैं:
  • हमें पता है कि DELETE में कुछ गड़बड़ी है, क्योंकि यह मनचाहा नतीजा नहीं दे रहा है. इसलिए, आपको itemcontroller.js->exports.delete तरीके में ब्रेकपॉइंट सेट करना होगा.
  • सिलसिलेवार तरीके से एक्ज़ीक्यूशन करें और बाईं विंडो में लोकल वैरिएबल की वैल्यू देखने के लिए, हर चरण पर वैरिएबल देखें.
  • request.params जैसी किसी खास वैल्यू को देखने के लिए, इस वैरिएबल को वॉच विंडो में जोड़ें.
  1. ध्यान दें कि id के लिए असाइन की गई वैल्यू undefined है. समस्या ठीक करने के लिए कोड बदलें.

तय कोड स्निपेट ऐसा दिखेगा.

// Delete a Item with the specified id in the request
exports.delete = (req, res) => {
    const id = req.params.id;
  1. एक बार ऐप्लिकेशन के रीस्टार्ट होने पर, उसे मिटाने की कोशिश करके दोबारा जांच करें.
  2. डीबग टूलबार में लाल रंग के स्क्वेयर पर क्लिक करके, डीबग करने वाले सेशन को रोकें 647213126d7a4c7b.png

6. साफ़-सफ़ाई सेवा

बधाई हो! इस लैब में, आपने शुरुआत से एक नया Nodejs ऐप्लिकेशन बनाया है और उसे कंटेनर के साथ हॉट डिप्लॉयमेंट मोड में काम करने के लिए कॉन्फ़िगर किया है. इसके बाद, आपने पुराने ऐप्लिकेशन स्टैक में मिलने वाले डेवलपर फ़्लो का इस्तेमाल करके, अपने ऐप्लिकेशन को किसी रिमोट GKE क्लस्टर में डिप्लॉय और डीबग किया.

लैब पूरा होने के बाद, स्टोरेज खाली करने के लिए:

  1. लैब में इस्तेमाल की गई फ़ाइलें मिटाना
cd ~ && rm -rf mynodejsapp && rm -f setup.sh
  1. प्रोजेक्ट को मिटाएं, ताकि उससे जुड़े सभी इन्फ़्रास्ट्रक्चर और संसाधनों को हटाया जा सके