نشر حاوية وتشغيلها باستخدام السحابة الإلكترونية في Node.js

Cloud Run هو نظام أساسي للحوسبة يديره ويتيح لك تشغيل حاويات بلا حالة يمكن استدعاءها عن طريق طلبات HTTP. ويُذكر أن تشغيل السحابة الإلكترونية بدون خادم، يلغي الحاجة إلى إدارة البنية الأساسية، حتى يمكنك التركيز على الأمور الأكثر أهمية، ألا وهي إنشاء تطبيقات رائعة. إنه مُصمَّم من Knative، ما يتيح لك اختيار تشغيل حاوياتك باستخدام Cloud Run (مُدار بالكامل) أو Cloud Run for Anthos. والهدف من هذا الدرس التطبيقي هو إنشاء صورة حاوية ونشرها على Cloud Run.

المتطلبات الأساسية

لا ينطبق

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

إذا لم يكن لديك حساب على Google (Gmail أو Google Apps)، يجب إنشاء حساب. تسجيل الدخول إلى وحدة تحكُّم Google Cloud Platform (console.cloud.google.com) وإنشاء مشروع جديد:

لقطة شاشة من 2016-02-10 الساعة 12:45:26.png

عذرًا! وسيُشار إليه لاحقًا في هذا الدرس التطبيقي بعنوان PROJECT_ID.

بعد ذلك، ستحتاج إلى تفعيل الفوترة في Cloud Console لاستخدام موارد Google Cloud.

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

يكون المستخدمون الجدد لخدمة Google Cloud Platform مؤهَّلين للاستفادة من فترة تجريبية مجانية تبلغ 300 دولار أمريكي.

Cloud Shell

على الرغم من إمكانية تشغيل Google Cloud عن بُعد من الكمبيوتر المحمول، إلا أنك ستستخدم Cloud Shell، وهو بيئة سطر أوامر تعمل في Google Cloud.

يتم تحميل هذا الجهاز الافتراضي الذي يعمل بنظام التشغيل Debian بكل أدوات التطوير التي ستحتاج إليها. وتوفِّر هذه الآلة دليلاً رئيسيًا دائمًا بسعة 5 غيغابايت ويتمّ تشغيله على Google Cloud، ما يحسّن كثيرًا أداء الشبكة والمصادقة. ويعني ذلك أنّ كل ما ستحتاج إليه في هذا الدرس التطبيقي هو متصفّح (نعم، يعمل على جهاز Chromebook).

لتفعيل Google Cloud Shell، من وحدة تحكّم مطوّري البرامج، انقر على الزر في أعلى يسار الصفحة (من المفترض أن تستغرق إدارة الحسابات والاتصال بضع لحظات فقط):

تفعيلCloudShell.png

انقر على الزر &بدء؛ Cloud Shell &&quot:

لقطة شاشة يوم 14-06-2017 الساعة 10.13.43 مساءً.png

بعد الاتصال بواجهة السحابة الإلكترونية، من المفترض أن ترى أنه قد تمت المصادقة عليك وأن المشروع قد سبق وتم ضبطه على PROJECT_ID:

gcloud auth list

مخرجات الأوامر

Credentialed accounts:
 - <myaccount>@<mydomain>.com (active)
gcloud config list project

مخرجات الأوامر

[core]
project = <PROJECT_ID>

تضبط Cloud Shell أيضًا بعض متغيّرات البيئة تلقائيًا والتي قد تكون مفيدة عند تشغيل الأوامر المستقبلية.

echo $GOOGLE_CLOUD_PROJECT

مخرجات الأوامر

<PROJECT_ID>

إذا لم يتم إعداد المشروع لسبب ما، فما عليك سوى إصدار الأمر التالي :

gcloud config set project <PROJECT_ID>

هل تبحث عن PROJECT_ID؟ تحقق من رقم التعريف الذي استخدمته في خطوات الإعداد أو ابحث عنه في لوحة بيانات وحدة التحكم:

Project_ID.png

ملاحظة مهمة: وأخيرًا، يمكنك ضبط المنطقة التلقائية وإعدادات المشروع:

gcloud config set compute/zone us-central1-f

يمكنك اختيار مجموعة متنوعة من المناطق المختلفة. اطّلع على مزيد من المعلومات في وثائق المناطق والمناطق؛

تفعيل Cloud Run API

من Cloud Shell، فعِّل Cloud Run API.

gcloud services enable run.googleapis.com

يُفترض أن ينتج عن ذلك رسالة ناجحة مشابهة لهذه الرسالة:

Operation "operations/acf.cc11852d-40af-47ad-9d59-477a12847c9e" finished successfully.

ستنشئ تطبيق Node.js بسيطًا ومستندًا إلى التعبير ويستجيب لطلبات HTTP.

لإنشاء تطبيقك، يمكنك استخدام Cloud Shell لإنشاء دليل جديد باسم helloworld-nodejs وتغيير الدليل إليه.

mkdir helloworld-nodejs
cd helloworld-nodejs

أنشئ ملف package.json يتضمن المحتوى التالي:

{
  "name": "cloudrun-helloworld",
  "version": "1.0.0",
  "description": "Simple hello world sample in Node",
  "main": "index.js",
  "scripts": {
    "start": "node index.js"
  },
  "author": "",
  "license": "Apache-2.0",
  "dependencies": {
    "express": "^4.17.1"
  }
}

الأهم من ذلك هو أن الملف أعلاه يحتوي على أمر بدء النص البرمجي والاعتمادية على إطار عمل تطبيق الويب Express.

بعد ذلك، في الدليل نفسه، أنشئ ملف index.js وانسخ المحتوى التالي إليه:

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

app.get('/', (req, res) => {
  console.log('Hello world received a request.');

  const target = process.env.TARGET || 'World';
  res.send(`Hello ${target}!`);
});

const port = process.env.PORT || 8080;
app.listen(port, () => {
  console.log('Hello world listening on port', port);
});

ينشئ ذلك الرمز خادم ويب أساسيًا يستجيب من خلال المتغيّر المحدَّد في متغير بيئة PORT. تطبيقك جاهز الآن لتقديم الحاويات واختباره وتحميله إلى سجل الحاوية.

لإنشاء عيّنة من التطبيق النموذجي، أنشِئ ملفًا جديدًا باسم Dockerfile في الدليل نفسه كملف المصدر وانسخ المحتوى التالي فيه:

# Use the official lightweight Node.js 12 image.
# https://hub.docker.com/_/node
FROM node:12-slim

# Create and change to the app directory.
WORKDIR /usr/src/app

# Copy application dependency manifests to the container image.
# A wildcard is used to ensure both package.json AND package-lock.json are copied.
# Copying this separately prevents re-running npm install on every code change.
COPY package*.json ./

# Install production dependencies.
RUN npm install --only=production

# Copy local code to the container image.
COPY . ./

# Run the web service on container startup.
CMD [ "npm", "start" ]

والآن، أنشئ صورة الحاوية باستخدام Cloud Build من خلال تشغيل الأمر التالي من الدليل الذي يحتوي على dockerfile:

gcloud builds submit --tag gcr.io/$GOOGLE_CLOUD_PROJECT/helloworld

$GOOGLE_CLOUD_PROJECT هو متغيِّر بيئة يحتوي على رقم تعريف مشروع Google Cloud عند التشغيل في Cloud Shell. ويمكنك أيضًا الحصول عليه من خلال تشغيل gcloud config get-value project.

بعد الدفع إلى قاعدة بيانات المسجّلين، ستظهر لك رسالة SUCCESS تحتوي على اسم الصورة (gcr.io/$GOOGLE_CLOUD_PROJECT/helloworld). يتم تخزين الصورة في سجلّ الحاويات ويمكن إعادة استخدامها إذا كنت ترغب في ذلك.

يمكنك إدراج جميع صور الحاوية المرتبطة بمشروعك الحالي باستخدام هذا الأمر:

gcloud container images list

إذا كنت تريد تشغيل التطبيق واختباره محليًا من Cloud Shell، يمكنك تشغيله باستخدام أمر docker العادي هذا:

docker run -d -p 8080:8080 gcr.io/$GOOGLE_CLOUD_PROJECT/helloworld

في Cloud Shell، انقر على معاينة الويب واختَر معاينة على المنفذ 8080.

وسيؤدي ذلك إلى فتح نافذة متصفّح تعرض رسالة مرحبًا العالم .

يمكنك أيضًا استخدام curl localhost:8080.

يتم نشر التطبيق الذي تم تطبيق حاوية عليه إلى Cloud Run باستخدام الأمر التالي (تأكّد من تعديله وفقًا لاسم الصورة الصحيح للتطبيق الذي أنشأته أو استخدِم الصورة gcr.io/cloudrun/hello المصمّمة مسبقًا):

gcloud run deploy helloworld \
  --image gcr.io/$GOOGLE_CLOUD_PROJECT/helloworld \
  --platform managed \
  --region us-central1 \
  --allow-unauthenticated

يتيح لك خيار نشر --allow-unauthenticated الوصول إلى التطبيق بدون مصادقة. يعني خيار النشر --platform managed \ أنك تطلب البيئة المُدارة بالكامل (وليس البنية الأساسية Kubernetes من خلال Anthos).

انتظِر بضع لحظات حتى تكتمل عملية النشر. وعند الانتهاء، يعرض سطر الأوامر عنوان URL للخدمة.

Service [helloworld] revision [helloworld-00001] has been deployed
and is serving traffic at https://helloworld-wdl7fdwaaa-uc.a.run.app

يمكنك الآن الانتقال إلى الحاوية التي تم نشرها عن طريق فتح عنوان URL للخدمة في متصفح الويب:

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

في حين لا يتم شحن Cloud Run أثناء عدم استخدام الخدمة، قد يستمر تحصيل رسوم منك مقابل تخزين صورة الحاوية المدمجة.

يمكنك حذف مشروعك على Google Cloud لتجنّب تكبد أي رسوم، ما سيؤدي إلى إيقاف الفوترة لجميع الموارد المستخدمة لهذا المشروع، أو ببساطة حذف صورتك في helloworld باستخدام هذا الأمر:

gcloud container images delete gcr.io/$GOOGLE_CLOUD_PROJECT/helloworld

لحذف خدمة Cloud Run، يمكنك استخدام الأمر التالي:

gcloud run services delete helloworld \
  --platform managed \
  --region us-central1

تهانينا. نشرت تطبيقًا مجمّعًا في صورة حاوية في Cloud Storage.

مزيد من المعلومات

قد تتمثل إحدى الخطوات التالية في الاطّلاع على Quickstart: النشر على Cloud Run for Anthos على Google Cloud.

لمزيد من المعلومات عن إنشاء حاوية HTTP بلا حالة مناسبة للتشغيل على السحابة الإلكترونية من مصدر الرمز ودفعها إلى Registry Registry، يُرجى الاطّلاع على المراجع التالية:

للتعرّف على مزيد من المعلومات حول Koriginal، المشروع الأساسي مفتوح المصدر، اطلع على Knative.