1. खास जानकारी
इस लैब में, ऐसी सुविधाओं और क्षमताओं के बारे में बताया गया है जिन्हें कंटेनर वाले एनवायरमेंट में NodeJS ऐप्लिकेशन डेवलप करने का काम करने वाले सॉफ़्टवेयर इंजीनियर के डेवलपमेंट वर्कफ़्लो को बेहतर बनाने के लिए डिज़ाइन किया गया है. कंटेनर को डेवलप करने के लिए, उपयोगकर्ता को कंटेनर और कंटेनर बनाने की प्रोसेस के बारे में जानकारी होनी चाहिए. इसके अलावा, डेवलपर को आम तौर पर अपने फ़्लो को रोकना पड़ता है. साथ ही, रिमोट एनवायरमेंट में अपने ऐप्लिकेशन की जांच करने और उन्हें डीबग करने के लिए, उन्हें अपने आईडीई से बाहर निकलना पड़ता है. इस ट्यूटोरियल में बताए गए टूल और टेक्नोलॉजी की मदद से, डेवलपर अपने आईडीई को छोड़े बिना, कंटेनर वाले ऐप्लिकेशन पर असरदार तरीके से काम कर सकते हैं.
आपको क्या सीखने को मिलेगा
इस लैब में, Google Cloud में कंटेनर का इस्तेमाल करके डेवलपमेंट करने के तरीके बताए गए हैं. जैसे:
- Nodejs ऐप्लिकेशन बनाना
- कंटेनर डेवलपमेंट के लिए Nodejs ऐप्लिकेशन को कॉन्फ़िगर करना
- आसान CRUD Rest Service को कोड करना
- GKE पर डिप्लॉय करना
- गड़बड़ी की स्थिति को डीबग करना
- ब्रेकपॉइंट / लॉग का इस्तेमाल करना
- बदलावों को GKE में वापस डिप्लॉय करना
- ज़रूरी नहीं: बैकएंड पर डेटा सेव करने के लिए CloudSQL को इंटिग्रेट करना

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



- प्रोजेक्ट का नाम, इस प्रोजेक्ट में हिस्सा लेने वाले लोगों के लिए डिसप्ले नेम होता है. यह एक वर्ण स्ट्रिंग है, जिसका इस्तेमाल Google API नहीं करते. इसे कभी भी अपडेट किया जा सकता है.
- प्रोजेक्ट आईडी, सभी Google Cloud प्रोजेक्ट के लिए यूनीक होता है. साथ ही, इसे बदला नहीं जा सकता. Cloud Console, यूनीक स्ट्रिंग अपने-आप जनरेट करता है. आम तौर पर, आपको इससे कोई फ़र्क़ नहीं पड़ता. ज़्यादातर कोडलैब में, आपको प्रोजेक्ट आईडी का रेफ़रंस देना होगा. आम तौर पर, इसे
PROJECT_IDके तौर पर पहचाना जाता है. अगर आपको जनरेट किया गया आईडी पसंद नहीं है, तो कोई दूसरा रैंडम आईडी जनरेट किया जा सकता है. इसके अलावा, आपके पास अपना नाम आज़माने का विकल्प भी है. इससे आपको पता चलेगा कि वह नाम उपलब्ध है या नहीं. इस चरण के बाद, इसे बदला नहीं जा सकता. यह प्रोजेक्ट की अवधि तक बना रहेगा. - आपकी जानकारी के लिए बता दें कि एक तीसरी वैल्यू भी होती है, जिसे प्रोजेक्ट नंबर कहते हैं. इसका इस्तेमाल कुछ एपीआई करते हैं. इन तीनों वैल्यू के बारे में ज़्यादा जानने के लिए, दस्तावेज़ देखें.
- इसके बाद, आपको Cloud Console में बिलिंग चालू करनी होगी, ताकि Cloud संसाधनों/एपीआई का इस्तेमाल किया जा सके. इस कोडलैब को पूरा करने में ज़्यादा खर्च नहीं आएगा. इस ट्यूटोरियल के बाद बिलिंग से बचने के लिए, बनाए गए संसाधनों को बंद किया जा सकता है. इसके लिए, बनाए गए संसाधनों को मिटाएं या पूरे प्रोजेक्ट को मिटाएं. Google Cloud के नए उपयोगकर्ताओं को, मुफ़्त में आज़माने के लिए 300 डॉलर का क्रेडिट मिलता है.
Cloud Shell Editor शुरू करना
इस लैब को Google Cloud Shell Editor के साथ इस्तेमाल करने के लिए डिज़ाइन और टेस्ट किया गया है. एडिटर को ऐक्सेस करने के लिए,
- https://console.cloud.google.com पर जाकर, अपने Google प्रोजेक्ट को ऐक्सेस करें.
- सबसे ऊपर दाएं कोने में मौजूद, Cloud Shell एडिटर आइकॉन पर क्लिक करें

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

- एडिटर खुलेगा. इसमें दाईं ओर एक्सप्लोरर और बीच में एडिटर दिखेगा
- स्क्रीन पर सबसे नीचे एक टर्मिनल पैन भी उपलब्ध होना चाहिए
- अगर टर्मिनल खुला नहीं है, तो नई टर्मिनल विंडो खोलने के लिए `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 पर कोड डिप्लॉय करना होगा. साथ ही, CloudSQL डेटाबेस में सेव किए गए डेटा को ऐक्सेस करना होगा. नीचे दी गई सेटअप स्क्रिप्ट, आपके लिए इस इन्फ़्रास्ट्रक्चर को तैयार करती है.
- सेटअप स्क्रिप्ट डाउनलोड करें और उसे एक्ज़ीक्यूटेबल बनाएं.
wget https://raw.githubusercontent.com/GoogleCloudPlatform/container-developer-workshop/main/labs/nodejs/setup_with_cw.sh
chmod +x setup_with_cw.sh
setup_with_cw.shफ़ाइल खोलें और उन पासवर्ड की वैल्यू में बदलाव करें जो फ़िलहाल CHANGEME पर सेट हैं- सेटअप स्क्रिप्ट चलाकर, GKE क्लस्टर और CloudSQL डेटाबेस सेट अप करें. इनका इस्तेमाल इस लैब में किया जाएगा
./setup_with_cw.sh &
Cloud Workstations क्लस्टर
- Cloud Console में Cloud Workstations खोलें. क्लस्टर के
READYस्थिति में आने का इंतज़ार करें.
वर्कस्टेशन कॉन्फ़िगरेशन बनाना
- अगर आपका Cloud Shell सेशन डिसकनेक्ट हो गया है, तो "फिर से कनेक्ट करें" पर क्लिक करें. इसके बाद, प्रोजेक्ट आईडी सेट करने के लिए gcloud cli कमांड चलाएं. कमांड चलाने से पहले, यहां दिए गए सैंपल प्रोजेक्ट आईडी की जगह अपना Qwiklabs प्रोजेक्ट आईडी डालें.
gcloud config set project qwiklabs-gcp-project-id
- Cloud Workstations कॉन्फ़िगरेशन बनाने के लिए, टर्मिनल में नीचे दी गई स्क्रिप्ट डाउनलोड करें और चलाएं.
wget https://raw.githubusercontent.com/GoogleCloudPlatform/container-developer-workshop/main/labs/nodejs/workstation_config_setup.sh
chmod +x workstation_config_setup.sh
./workstation_config_setup.sh
- कॉन्फ़िगरेशन सेक्शन में जाकर, नतीजों की पुष्टि करें. READY स्टेटस पर स्विच करने में दो मिनट लगेंगे.

- Console में Cloud Workstations खोलें और नया इंस्टेंस बनाएं.

- नाम बदलकर
my-workstationकरें और मौजूदा कॉन्फ़िगरेशन चुनें:codeoss-js.

- वर्कस्टेशन सेक्शन में जाकर, नतीजों की पुष्टि करें.

Workstation लॉन्च करना
- वर्कस्टेशन शुरू करें और लॉन्च करें. वर्कस्टेशन शुरू होने में कुछ मिनट लगेंगे.

- पता बार में मौजूद आइकॉन पर क्लिक करके, तीसरे पक्ष की कुकी को अनुमति दें.


- "साइट काम नहीं कर रही है?" पर क्लिक करें.

- "कुकी को अनुमति दें" पर क्लिक करें.

- वर्कस्टेशन लॉन्च होने के बाद, आपको Code OSS IDE दिखेगा. वर्कस्टेशन आईडीई के 'शुरू करें' पेज पर, "हो गया के तौर पर मार्क करें" पर क्लिक करें

3. नया Nodejs स्टार्टर ऐप्लिकेशन बनाना
इस सेक्शन में, आपको एक नया Nodejs ऐप्लिकेशन बनाना होगा.
- नया टर्मिनल खोलें.

- Cloud Shell में,
mynodejsappनाम की नई डायरेक्ट्री बनाएं
mkdir mynodejsapp
अगर आपको यह मैसेज दिखता है, तो 'अनुमति दें' बटन पर क्लिक करें, ताकि आप इसे वर्कस्टेशन में कॉपी करके चिपका सकें.

- इस डायरेक्ट्री पर जाएं और इसे वर्कस्पेस के तौर पर खोलें. इससे, नए फ़ोल्डर में वर्कस्पेस कॉन्फ़िगरेशन बनाकर एडिटर को फिर से लोड किया जाएगा.
cd mynodejsapp && code-oss-cloud-workstations -r --folder-uri="$PWD"
- फिर से एक नया टर्मिनल खोलें. NVM का इस्तेमाल करके, Node और NPM इंस्टॉल करें.
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.2/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
4. स्टार्टर ऐप्लिकेशन का नया वर्शन बनाना
- ऐप्लिकेशन शुरू करना
नीचे दिए गए कमांड को चलाकर package.json फ़ाइल बनाना
npm init
Choose the `entry point: (index.js) src/index.js` and leave default values for the rest of the parameters. This will create the `package.json` 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"
}
- कोई एंट्री पॉइंट जोड़ना
स्क्रिप्ट "start": "node src/index.js", में स्टार्ट कमांड शामिल करने के लिए, IDE में package.json फ़ाइल खोलें और उसमें बदलाव करें. बदलाव के बाद स्क्रिप्ट, नीचे दिए गए कोड स्निपेट की तरह दिखनी चाहिए:
"scripts": {
"start": "node src/index.js",
"test": "echo \"Error: no test specified\" && exit 1"
},
- Express Dependency जोड़ना
हम जो कोड जोड़ने जा रहे हैं वह भी 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": "",
"license": "ISC",
"dependencies": {
"express": "^4.17.3"
}
}
- 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, कंटेनर डेवलपमेंट को आसान बनाने के लिए इंटिग्रेटेड टूल उपलब्ध कराता है. इस चरण में, Skaffold को शुरू किया जाएगा. इससे Kubernetes की बुनियादी YAML फ़ाइलें अपने-आप बन जाएंगी. प्रोसेस शुरू करने के लिए, नीचे दिए गए निर्देश को चलाएं.
टर्मिनल में यह कमांड चलाएं
skaffold init --generate-manifests
जब कहा जाए, तब:
- पोर्ट के लिए 8080 डालें
- कॉन्फ़िगरेशन सेव करने के लिए, y डालें
फ़ाइल फ़ोल्डर में दो फ़ाइलें जोड़ी गई हैं. जैसे, skaffold.yaml और deployment.yaml
ऐप्लिकेशन का नाम अपडेट करना
कॉन्फ़िगरेशन में शामिल डिफ़ॉल्ट वैल्यू, फ़िलहाल आपके ऐप्लिकेशन के नाम से मेल नहीं खाती हैं. फ़ाइलों को अपडेट करें, ताकि वे डिफ़ॉल्ट वैल्यू के बजाय आपके ऐप्लिकेशन के नाम का रेफ़रंस दें.
- Skaffold कॉन्फ़िगरेशन में एंट्री बदलना
skaffold.yamlखोलें- फ़िलहाल
package-json-imageके तौर पर सेट की गई इमेज का नाम चुनें - राइट क्लिक करें और 'सभी बदलावों को बदलें' चुनें
mynodejsappके तौर पर नया नाम डालें
- Kubernetes कॉन्फ़िगरेशन में एंट्री बदलना
deployment.yamlफ़ाइल खोलो- फ़िलहाल
package-json-imageके तौर पर सेट की गई इमेज का नाम चुनें - राइट क्लिक करें और 'सभी बदलावों को बदलें' चुनें
mynodejsappके तौर पर नया नाम डालें
ध्यान दें कि skaffold.yaml फ़ाइल में, build सेक्शन ऐप्लिकेशन को कंटेनर में रखने के लिए buildpacks का इस्तेमाल करता है. इस कोड में Dockerfile नहीं है. साथ ही, डेवलपर को इस ऐप्लिकेशन को कंटेनर में बदलने के लिए, डॉकर के बारे में कोई जानकारी नहीं चाहिए.
साथ ही, इस skaffold कॉन्फ़िगरेशन की मदद से, एडिटर और रनिंग कंटेनर के बीच हॉट सिंक की सुविधा अपने-आप चालू हो जाती है. हॉट सिंक की सुविधा चालू करने के लिए, किसी अन्य कॉन्फ़िगरेशन की ज़रूरत नहीं होती.
5. डेवलपमेंट प्रोसेस के बारे में जानकारी
इस सेक्शन में, Cloud Code प्लगिन का इस्तेमाल करके कुछ चरणों को पूरा करने का तरीका बताया गया है. इससे आपको बुनियादी प्रोसेस के बारे में जानने में मदद मिलेगी. साथ ही, आपको अपने स्टार्टर ऐप्लिकेशन के कॉन्फ़िगरेशन और सेटअप की पुष्टि करने का तरीका भी पता चलेगा.
Cloud Code, Skaffold के साथ इंटिग्रेट होता है, ताकि आपकी डेवलपमेंट प्रोसेस को आसान बनाया जा सके. नीचे दिए गए चरणों में GKE पर डिप्लॉय करने पर, Cloud Code और Skaffold आपकी कंटेनर इमेज को अपने-आप बना देंगे. इसके बाद, वे इसे Container Registry में पुश कर देंगे. इसके बाद, वे आपके ऐप्लिकेशन को GKE पर डिप्लॉय कर देंगे. यह प्रोसेस बैकग्राउंड में होती है. इससे डेवलपर को जानकारी नहीं मिलती. Cloud Code, कंटेनर पर आधारित डेवलपमेंट के लिए, डीबग करने और हॉटसिंक करने की सुविधाएं उपलब्ध कराता है. इससे डेवलपमेंट की प्रोसेस को बेहतर बनाया जा सकता है.
Google Cloud में साइन इन करें
- क्लाउड कोड आइकॉन पर क्लिक करें और "Google Cloud में साइन इन करें" चुनें:

- "साइन इन करने के लिए आगे बढ़ें" पर क्लिक करें.

- टर्मिनल में आउटपुट देखें और लिंक खोलें:

- Qwiklabs के छात्र-छात्राओं के क्रेडेंशियल से लॉग इन करें.

- "अनुमति दें" को चुनें:

- पुष्टि करने वाले कोड को कॉपी करें और Workstation टैब पर वापस जाएं.

- पुष्टि करने के लिए कोड चिपकाएं और Enter दबाएं.

Kubernetes क्लस्टर जोड़ना
- कोई क्लस्टर जोड़ना

- Google Kubernetes Engine चुनें:

- प्रोजेक्ट चुनें.

- शुरुआती सेटअप में बनाए गए "mycluster" को चुनें.

- अब यह क्लस्टर, Cloud Code में Kubernetes क्लस्टर की सूची में दिखेगा. यहां से क्लस्टर पर जाएं और उसे एक्सप्लोर करें.

gcloud cli का इस्तेमाल करके, मौजूदा प्रोजेक्ट आईडी सेट करना
- Qwiklabs पेज से, इस लैब के लिए प्रोजेक्ट आईडी कॉपी करें.

- प्रोजेक्ट आईडी सेट करने के लिए, टर्मिनल से gcloud cli कमांड चलाएं. कमांड चलाने से पहले, सैंपल प्रोजेक्ट आईडी बदलें. यहां दिए गए निर्देश को चलाने से पहले, प्रोजेक्ट आईडी को बदलें.
gcloud config set project qwiklabs-gcp-project-id
Kubernetes पर डिप्लॉय करें
- Cloud Shell Editor में सबसे नीचे मौजूद पैनल में, Cloud Code  चुनें

- DEVELOPMENT SESSIONS में सबसे ऊपर दिखने वाले पैनल में, Run on Kubernetes को चुनें. अगर कहा जाए, तो मौजूदा Kubernetes कॉन्टेक्स्ट का इस्तेमाल करने के लिए, 'हां' चुनें.

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

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

- प्रोग्रेस और सूचनाएं देखने के लिए, नीचे वाले पैन में मौजूद आउटपुट टैब और ड्रॉपडाउन में Kubernetes: Run/Debug चुनें

- ज़्यादा जानकारी और कंटेनर से लाइव स्ट्रीम किए जा रहे लॉग देखने के लिए, दाईं ओर मौजूद चैनल ड्रॉप-डाउन में "Kubernetes: Run/Debug - Detailed" चुनें

- ड्रॉपडाउन से "Kubernetes: Run/Debug" चुनकर, सरल बनाए गए व्यू पर वापस जाएं
- बिल्ड और टेस्ट पूरे होने पर, आउटपुट टैब में यह दिखता है:
Resource deployment/mynodejsapp status completed successfully. साथ ही, एक यूआरएल दिखता है: "Forwarded URL from service demo-app: http://localhost:8080" - Cloud Code टर्मिनल में, आउटपुट (http://localhost:8080) में मौजूद यूआरएल पर कर्सर घुमाएं. इसके बाद, दिखने वाले टूलटिप में, 'लिंक फ़ॉलो करें' को चुनें.
जवाब यह होगा:
{"message":"Greetings from Node"}
हॉट रीलोड
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
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/
- अपडेट किए गए नतीजे देखने के लिए, अपने ब्राउज़र को रीफ़्रेश करें.
डीबग करना
- डीबग व्यू पर जाएं और मौजूदा थ्रेड
को रोकें. - सबसे नीचे मौजूद मेन्यू में,
Cloud Codeपर क्लिक करें. इसके बाद, ऐप्लिकेशन कोdebugमोड में चलाने के लिए,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.
- सबसे नीचे मौजूद स्टेटस बार का रंग नीले से बदलकर नारंगी हो जाता है. इससे पता चलता है कि यह डीबग मोड में है.

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 ***********************************
ब्रेकपॉइंट का इस्तेमाल करना
src/index.jsखोलेंvar message="Hello from Node";स्टेटमेंट ढूंढें- लाइन नंबर के बाईं ओर मौजूद खाली जगह पर क्लिक करके, उस लाइन में ब्रेकपॉइंट जोड़ें. ब्रेकपॉइंट सेट होने पर, लाल रंग का इंडिकेटर दिखेगा
- अपने ब्राउज़र को फिर से लोड करें और ध्यान दें कि डीबगर, ब्रेकपॉइंट पर प्रोसेस को रोक देता है. साथ ही, आपको उन वैरिएबल और ऐप्लिकेशन की स्थिति की जांच करने की अनुमति देता है जो GKE में रिमोटली चल रहा है
- वैरिएबल सेक्शन में नीचे की ओर तब तक क्लिक करें, जब तक आपको
"message"वैरिएबल न मिल जाए. - लाइन को चलाने के लिए, Step over
पर क्लिक करें "message"वैरिएबल की मौजूदा वैल्यू को"Hello from Node"में बदलते हुए देखें- वैरिएबल के नाम "target" पर दो बार क्लिक करें. इसके बाद, पॉप-अप में वैल्यू को
"Hi from Node"जैसे किसी दूसरे मान में बदलें - डीबग कंट्रोल पैनल में मौजूद, जारी रखें बटन पर क्लिक करें
- अपने ब्राउज़र में जवाब देखें. इसमें अब वह अपडेट की गई वैल्यू दिखेगी जिसे आपने अभी डाला है.
- स्टॉप बटन
दबाकर, "डीबग" मोड बंद करें. इसके बाद, ब्रेकपॉइंट पर फिर से क्लिक करके, ब्रेकपॉइंट हटाएं.
6. सामान्य CRUD रेस्ट सर्विस डेवलप करना
इस समय, आपका ऐप्लिकेशन कंटेनर में डेवलपमेंट के लिए पूरी तरह से कॉन्फ़िगर हो गया है. साथ ही, आपने Cloud Code की मदद से डेवलपमेंट के बुनियादी वर्कफ़्लो को समझ लिया है. यहां दिए गए सेक्शन में, आपने जो सीखा है उसे लागू करने का तरीका बताया गया है. इसके लिए, Google Cloud में मैनेज किए गए डेटाबेस से कनेक्ट होने वाले REST सेवा एंडपॉइंट जोड़े जाते हैं.
डिपेंडेंसी कॉन्फ़िगर करना
ऐप्लिकेशन कोड, बाकी सेवा से जुड़े डेटा को सेव करने के लिए डेटाबेस का इस्तेमाल करता है. पक्का करें कि डिपेंडेंसी उपलब्ध हों. इसके लिए, package.json फ़ाइल में यह कोड जोड़ें
- Postgres में CRUD ऐप्लिकेशन बनाने के लिए,
package.jsonफ़ाइल में दो और डिपेंडेंसीpgऔरsequelizeजोड़ें. बदलाव के बाद, डिपेंडेंसी सेक्शन ऐसा दिखेगा.
"dependencies": {
"express": "^4.17.3",
"pg": "^8.8.0",
"sequelize": "^6.25.7"
}
REST सेवा को कोड करना
- इस ऐप्लिकेशन में CRUD ऐप्लिकेशन कोड जोड़ें
wget -O app.zip https://github.com/GoogleCloudPlatform/container-developer-workshop/raw/main/labs/nodejs/app.zip
unzip app.zip
इस कोड में
itemके लिए, models फ़ोल्डर में मौजूद इकाई मॉडल- सीआरयूडी ऑपरेशन करने वाले कोड के साथ controllers फ़ोल्डर
- routes फ़ोल्डर, जो यूआरएल पैटर्न को अलग-अलग कॉल पर रूट करता है
- डेटाबेस कनेक्टिविटी की जानकारी वाला config फ़ोल्डर
- ध्यान दें कि
db.config.jsफ़ाइल में डेटाबेस कॉन्फ़िगरेशन, एनवायरमेंट वैरिएबल को दिखाता है. डेटाबेस से कनेक्ट करने के लिए, इन वैरिएबल को उपलब्ध कराना ज़रूरी है. साथ ही, यूआरएल को कोड में बदलने के लिए, आपको आने वाले अनुरोध को पार्स करना होगा. src/index.jsमें यहां दिया गया कोड स्निपेट जोड़ें, ताकि अपनी मुख्य JavaScript फ़ाइल से CRUD कोड को कनेक्ट किया जा सके. ऐसा,app.listen(PORT, () => {से शुरू होने वाले आखिरी सेक्शन से ठीक पहले करें
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);
- डेटाबेस कनेक्टिविटी की जानकारी देने के लिए, एनवायरमेंट वैरिएबल जोड़ने के लिए
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
- 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
ऐप्लिकेशन डिप्लॉय करना और उसकी पुष्टि करना
- Cloud Shell Editor के सबसे नीचे मौजूद पैनल में,
Cloud Codeचुनें. इसके बाद, स्क्रीन पर सबसे ऊपर मौजूदDebug on Kubernetesचुनें. - बिल्ड और टेस्ट पूरे होने पर, आउटपुट टैब में यह मैसेज दिखता है:
Resource deployment/mynodejsapp status completed successfully. साथ ही, एक यूआरएल दिखता है: "Forwarded URL from service mynodejsapp: http://localhost:8080" - कुछ आइटम जोड़ें.
Cloud Shell टर्मिनल में, यहां दिए गए निर्देश चलाएं
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"
- ब्राउज़र में $URL/items चलाकर, GET की जांच करें. कमांड लाइन से भी कर्ल चलाया जा सकता है
curl -X GET $URL/items
- टेस्ट के तौर पर मिटाएं: अब नीचे दिए गए निर्देश को चलाकर, किसी आइटम को मिटाने की कोशिश करें. अगर ज़रूरी हो, तो item-id की वैल्यू बदलें.
curl -X DELETE $URL/items/1
This throws an error message
{"message":"Could not delete Item with id=[object Object]"}
समस्या का पता लगाना और उसे ठीक करना
- ऐप्लिकेशन, डीबग मोड में चल रहा है. इसलिए, समस्या का पता लगाने के लिए ब्रेकपॉइंट का इस्तेमाल करें. इसके लिए, यहां कुछ सुझाव दिए गए हैं:
- हमें पता है कि DELETE कमांड में कोई गड़बड़ी है, क्योंकि इससे मनमुताबिक नतीजे नहीं मिल रहे हैं. इसलिए, आपको
itemcontroller.js->exports.deleteतरीके में ब्रेकपॉइंट सेट करना होगा. - एक-एक करके कोड चलाएं और हर चरण में वैरिएबल देखें. इससे आपको बाईं ओर मौजूद विंडो में लोकल वैरिएबल की वैल्यू दिखेंगी.
request.paramsजैसी खास वैल्यू देखने के लिए, इस वैरिएबल को वॉच विंडो में जोड़ें.
- ध्यान दें कि
idएट्रिब्यूट को असाइन की गई वैल्यूundefinedहै. समस्या ठीक करने के लिए, कोड बदलें.
ठीक किया गया कोड स्निपेट ऐसा दिखेगा.
// Delete a Item with the specified id in the request
exports.delete = (req, res) => {
const id = req.params.id;
- ऐप्लिकेशन को रीस्टार्ट करने के बाद, मिटाने की कोशिश करके फिर से टेस्ट करें.
- डीबग टूलबार में मौजूद लाल रंग के स्क्वेयर पर क्लिक करके, डीबग सेशन बंद करें

7. साफ़-सफ़ाई सेवा
बधाई हो! इस लैब में, आपने स्क्रैच से एक नया Nodejs ऐप्लिकेशन बनाया है. साथ ही, इसे कंटेनर के साथ हॉट डिप्लॉयमेंट मोड में काम करने के लिए कॉन्फ़िगर किया है. इसके बाद, आपने अपने ऐप्लिकेशन को रिमोट GKE क्लस्टर पर डिप्लॉय किया और उसे डीबग किया. इसके लिए, आपने डेवलपर के उसी फ़्लो का इस्तेमाल किया जो ऐप्लिकेशन के ट्रेडिशनल स्टैक में मिलता है.
लैब पूरा होने के बाद, साफ़-सफ़ाई करने के लिए:
- लैब में इस्तेमाल की गई फ़ाइलें मिटाएं
cd ~ && rm -rf mynodejsapp && rm -f setup.sh
- प्रोजेक्ट मिटाकर, उससे जुड़े सभी इन्फ़्रास्ट्रक्चर और संसाधन हटाएं
