تطوير InnerLoop باستخدام NodeJS

1. نظرة عامة

يعرض هذا التمرين المعملي ميزات وقدرات مصممة لتبسيط سير عمل التطوير لمهندسي البرمجيات المكلفين بتطوير تطبيقات NodeJS في بيئة مدمجة. ويتطلّب تطوير الحاوية النموذجي من المستخدم فهم تفاصيل الحاويات وعملية إنشاء الحاوية. بالإضافة إلى ذلك، على المطوّرين إيقاف مسار العمل والخروج من بيئة التطوير المتكاملة (IDE) لاختبار تطبيقاتهم وتصحيح الأخطاء فيها في البيئات البعيدة. باستخدام الأدوات والتقنيات المذكورة في هذا البرنامج التعليمي، يستطيع المطورون العمل بفعالية مع التطبيقات المحوّلة بدون مغادرة بيئة التطوير المتكاملة (IDE).

ما سوف تتعلمه

ستتعلم في هذا التمرين المعملي طُرق التطوير باستخدام حاويات في Google Cloud Platform، بما في ذلك:

  • إنشاء تطبيق Nodejs للمبتدئين
  • إعداد تطبيق Nodejs لتطوير الحاوية
  • ترميز خدمة CRUD Rest بسيطة
  • النشر في GKE
  • تصحيح الأخطاء في حالة الخطأ
  • استخدام نقطة الإيقاف / السجلات
  • تغييرات شائعة في النشر مرة أخرى على GKE
  • اختياري: دمج CloudSQL للحفاظ على ثبات البيانات في الخلفية

2. الإعداد والمتطلبات

إعداد بيئة ذاتية

  1. سجِّل الدخول إلى Google Cloud Console وأنشئ مشروعًا جديدًا أو أعِد استخدام مشروع حالي. إذا لم يكن لديك حساب على Gmail أو Google Workspace، عليك إنشاء حساب.

b35bf95b8bf3d5d8.png

a99b7ace416376c4.png

bd84a6d3004737c5.png

  • اسم المشروع هو الاسم المعروض للمشاركين في هذا المشروع. وهي عبارة عن سلسلة أحرف لا تستخدمها Google APIs، ويمكنك تحديثها في أي وقت.
  • يجب أن يكون رقم تعريف المشروع فريدًا في جميع مشاريع Google Cloud وغير قابل للتغيير (لا يمكن تغييره بعد ضبطه). تنشئ Cloud Console سلسلة فريدة تلقائيًا. فعادةً لا تهتم بما هو. في معظم الدروس التطبيقية حول الترميز، يجب الرجوع إلى رقم تعريف المشروع (والذي يتم تحديده عادةً على أنّه PROJECT_ID). لذلك، إذا لم يعجبك، يمكنك إنشاء رقم تعريف عشوائي آخر أو يمكنك تجربة رقم تعريف المشروع الخاص بك ومعرفة ما إذا كان متاحًا. بعد ذلك تكون الحالة "مجمّدة". بعد إنشاء المشروع.
  • هناك قيمة ثالثة، وهي رقم المشروع الذي تستخدمه بعض واجهات برمجة التطبيقات. اطّلِع على مزيد من المعلومات حول هذه القيم الثلاث في المستندات.
  1. بعد ذلك، عليك تفعيل الفوترة في Cloud Console لاستخدام الموارد/واجهات برمجة التطبيقات في Cloud. إنّ تنفيذ هذا الدرس التطبيقي حول الترميز لن يكون مكلفًا أو مكلفًا على الإطلاق. لإيقاف تشغيل الموارد حتى لا تتحمل الفوترة بعد أكثر من هذا البرنامج التعليمي، اتبع أي عملية "تنظيف". التعليمات الموجودة في نهاية الدرس التطبيقي حول الترميز. يكون مستخدمو Google Cloud الجدد مؤهَّلون للانضمام إلى برنامج فترة تجريبية مجانية بقيمة 300 دولار أمريكي.

بدء محرِّر Cloudshell

تم تصميم هذا الدرس التطبيقي واختباره للاستخدام مع Google Cloud Shell Editor. للوصول إلى المحرر،

  1. انتقِل إلى مشروع Google على https://console.cloud.google.com.
  2. في أعلى يسار الشاشة، انقر على رمز محرِّر Cloud Shell

8560cc8d45e8c112.png

  1. سيتم فتح جزء جديد في أسفل النافذة.
  2. انقر على الزر Open Editor (فتح المحرر).

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 وستصل إلى البيانات المخزنة في قاعدة بيانات Spanner. يعمل النص البرمجي للإعداد أدناه على إعداد هذه البنية الأساسية من أجلك.

  1. فتح ملف setup.sh وتعديل قيم كلمات المرور التي يتم ضبطها حاليًا على changeME
  2. يمكنك تشغيل النص البرمجي للإعداد للوصول إلى مجموعة GKE وقاعدة بيانات CloudSQL ستستخدمها في هذا التمرين المعملي.
./setup.sh
  1. في Cloud Shell، أنشِئ دليلاً جديدًا باسم "mynodejsapp".
mkdir mynodejsapp
  1. يمكنك التغيير إلى هذا الدليل وفتحه كمساحة عمل. سيؤدي هذا إلى إعادة تحميل المحرّر من خلال إنشاء إعداد مساحة عمل في المجلد الذي تم إنشاؤه حديثًا.
cd mynodejsapp && cloudshell workspace .
  1. تثبيت عقدة وNPM باستخدام NVM.
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 في النص البرمجي "start": "node src/index.js",. بعد إجراء التغيير، من المفترض أن تبدو النصوص البرمجية على النحو التالي مقتطف الرمز أدناه:

"scripts": {
    "start": "node src/index.js",
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  1. إضافة تبعية Express

الرمز الذي سنضيفه يستخدم أيضًا 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}/`);

});

يُرجى العلم أنّه تم ضبط المنفذ على القيمة 8080.

إنشاء ملفات بيانات

توفّر شركة Skaffold أدوات متكاملة لتبسيط عملية تطوير الحاويات. في هذه الخطوة، ستقوم بتهيئة skaffold الذي سيقوم تلقائيًا بإنشاء ملفات kubernetes 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 مع Saffold لتبسيط عملية التطوير. عند النشر على GKE باتّباع الخطوات التالية، ستنشئ خدمة Cloud Code وSkaffold صورة الحاوية تلقائيًا وترسلها إلى Container Registry ثم تنشر تطبيقك على GKE. يحدث هذا وراء الكواليس في استخلاص التفاصيل بعيدًا عن تدفق المطور. تُحسّن Cloud Code أيضًا عملية التطوير من خلال توفير إمكانات تقليدية لتصحيح الأخطاء والمزامنة من أجل التطوير المستند إلى الحاوية.

النشر على Kubernetes

  1. في الجزء السفلي من "محرِّر Cloud Shell"، اختَر 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: Run/Debug". من القائمة المنسدلة
  2. عند الانتهاء من عملية الإنشاء والاختبار، تعرض علامة التبويب "الإخراج" ما يلي: Resource deployment/mynodejsapp status completed successfully، ويظهر عنوان URL: "عنوان URL تمت إعادة توجيهه من تطبيق تجريبي للخدمة: http://localhost:8080"
  3. في الوحدة الطرفية لرمز السحابة الإلكترونية، مرِّر مؤشر الماوس فوق عنوان URL في الإخراج (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. انقر على Cloud Code في القائمة في أسفل الشاشة واختَر Debug on Kubernetes لتشغيل التطبيق في وضع "debug".
  • في عرض Kubernetes Run/Debug - Detailed لنافذة Output، لاحظ أن 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. انقر مرّتين على اسم المتغيّر "target". وفي النافذة المنبثقة، غيِّر القيمة إلى قيمة مختلفة، مثل "Hello from Node".
  9. انقر على الزر "متابعة" في لوحة تحكم تصحيح الأخطاء.
  10. يمكنك مراجعة الردّ في متصفّحك الذي يعرض الآن القيمة المعدّلة التي أدخلتها للتو.
  11. إيقاف "تصحيح الأخطاء" بالضغط على زر الإيقاف 647213126d7a4c7b.png وإزالة نقطة الإيقاف من خلال النقر على نقطة الإيقاف مرة أخرى.

5- تطوير خدمة CRUD Rest بسيطة

في هذه المرحلة، تم ضبط تطبيقك بالكامل للتطوير المجمّع، وقد اطّلعت على خطوات سير عمل التطوير الأساسي باستخدام Cloud Code. تتدرب في الأقسام التالية على ما تعلمته عن طريق إضافة نقاط نهاية خدمة غير مكتملة متصلة بقاعدة بيانات مُدارة في Google Cloud.

إعداد التبعيات

يستخدم رمز التطبيق قاعدة بيانات للاحتفاظ بباقي بيانات الخدمة. تأكَّد من توفُّر الاعتماديات من خلال إضافة ما يلي في ملف package.json.

  1. أضف تبعيتين إضافيتين pg وsequelize إلى ملف package.json لإنشاء تطبيق CRUD Postgres. نشر التغييرات سيظهر قسم التبعيات على هذا النحو.
    "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

يحتوي هذا الرمز على

  • المجلد models مع نموذج الكيان لـ item.
  • controllers بالرمز الذي يجري عمليات CRUD
  • توجيه مجلد يوجِّه أنماط عناوين URL معيّنة إلى مكالمات مختلفة
  • مجلد الضبط يحتوي على تفاصيل اتصال قاعدة البيانات
  1. يُرجى العلم أنّ إعداد قاعدة البيانات في ملف db.config.js يشير إلى متغيّرات البيئة التي يجب توفيرها للاتصال بقاعدة البيانات. عليك أيضًا تحليل الطلب الوارد لترميز عناوين URL.
  2. أضف مقتطف الرمز التالي في src/index.js لتتمكن من الاتصال برمز CRUD من ملف JavaScript الرئيسي مباشرة قبل القسم الأخير الذي يبدأ بـ 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);
  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 Shell"، اختَر Cloud Code ثم اختَر Debug on Kubernetes في أعلى الشاشة.
  2. عند الانتهاء من عملية الإنشاء والاختبار، تعرض علامة التبويب "الإخراج" ما يلي: Resource deployment/mynodejsapp status completed successfully، ويظهر عنوان URL: "عنوان URL تمت إعادة توجيهه من الخدمة mynodejsapp: http://localhost:8080"
  3. يمكنك إضافة عنصرين.

من Cloudshell 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. اختبر GET عن طريق تشغيل $URL/items في المتصفح. يمكنك أيضًا تشغيل الضفير من سطر الأوامر
curl -X GET $URL/items
  1. اختبار الحذف: حاول الآن حذف عنصر عن طريق التشغيل. غيِّر قيمة معرّف السلعة إذا لزم الأمر.
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. حذف المشروع لإزالة جميع البنية التحتية والموارد ذات الصلة