1. قبل البدء
يمكن أن يكون تشغيل المواقع الإلكترونية أمرًا صعبًا بسبب كلّ الإجراءات الإدارية التي يجب اتّخاذها لإنشاء وإدارة نُسخ الأجهزة الافتراضية والمجموعات والوحدات والخدمات وغير ذلك. وهذا أمر جيد للتطبيقات الأكبر حجمًا والمتعدّدة المستويات، ولكن إذا كنت تحاول فقط نشر موقعك الإلكتروني وإظهاره، سيكون ذلك عبئًا كبيرًا.
باستخدام Cloud Run، وهي خدمة Knative التي توفّرها Google Cloud، يمكنك إدارة موقعك الإلكتروني ونشره بدون أيّ من التكاليف الإضافية التي تحتاجها للعمليات المستندة إلى الأجهزة الافتراضية أو Kubernetes. ويُعدّ هذا النهج أبسط من منظور الإدارة، كما يمنحك إمكانية خفض السعة إلى الصفر عندما لا تكون هناك طلبات واردة إلى موقعك الإلكتروني.
في هذا الدليل التعليمي حول الرموز البرمجية، تبدأ باستخدام صورة Docker تم إنشاؤها من خلال Cloud Build، والتي يتم تشغيلها في Cloud Shell. بعد ذلك، يمكنك نشر هذه الصورة على Cloud Run باستخدام أمر في Cloud Shell.
المتطلبات الأساسية
- معرفة عامة ببرنامج Docker (اطّلِع على قسم البدء في الموقع الإلكتروني لشركة Docker).
المُعطيات
- كيفية إنشاء صورة Docker باستخدام Cloud Build وتحميلها إلى gcr.io
- كيفية نشر صور Docker على Cloud Run
- كيفية إدارة عمليات نشر Cloud Run
- كيفية إعداد نقطة نهاية لتطبيق على Cloud Run
ما ستُنشئه
- موقع إلكتروني ثابت يتم تشغيله داخل حاوية Docker
- نسخة من هذه الحاوية متوفّرة في Container Registry
- عملية نشر في Cloud Run لموقعك الإلكتروني الثابت
المتطلبات
- حساب Google لديه إذن وصول إداري لإنشاء مشاريع أو مشروع لديه دور مالك المشروع
2. إعداد البيئة
إعداد البيئة حسب وتيرة الطالب واحتياجاته
إذا لم يكن لديك حساب على Google، عليك إنشاء حساب. بعد ذلك، سجِّل الدخول إلى Google Cloud Console وانقر على المشروع > إنشاء مشروع.
تذكَّر رقم تعريف المشروع الذي يتم تعبئته تلقائيًا ضمن اسم مشروعك. معرّف المشروع هو اسم فريد في جميع مشاريع Google Cloud، لذا سبق أن تم استخدام الاسم الظاهر في لقطة الشاشة ولن يكون متاحًا لك. وسنشير إليه لاحقًا باسم PROJECT_ID
.
بعد ذلك، عليك تفعيل الفوترة في Cloud Console لاستخدام موارد Google Cloud وتفعيل Cloud Run API.
تفعيل Cloud Run API
انقر على قائمة التنقّل ☰ > واجهات برمجة التطبيقات والخدمات > لوحة البيانات > تفعيل واجهات برمجة التطبيقات والخدمات. .
ابحث عن "Cloud Run API"، ثم انقر على Cloud Run API > تفعيل.
من المفترض ألا تتجاوز تكلفة تنفيذ هذا الدليل التعليمي بضعة دولارات، ولكن قد تزيد هذه التكلفة إذا قرّرت استخدام المزيد من الموارد أو إذا تركت الموارد تعمل (راجِع قسم التنظيف في نهاية الدليل). لمزيد من المعلومات، يُرجى الاطّلاع على الأسعار.
المستخدمون الجدد في Google Cloud مؤهّلون للاستفادة من فترة تجريبية مجانية بقيمة 300 دولار أمريكي.
Cloud Shell
على الرغم من أنّه يمكن تشغيل Google Cloud وCloud Run عن بُعد من الكمبيوتر المحمول، ستستخدم Cloud Shell، وهي بيئة سطر أوامر تعمل في Google Cloud. تم ضبط البيئة مسبقًا باستخدام جميع مكتبات العميل وأطر العمل التي تحتاج إليها.
تم تجهيز هذا الجهاز الافتراضي المستنِد إلى Debian بجميع أدوات التطوير التي ستحتاج إليها. ويقدّم هذا الدليل دليلاً منزليًا دائمًا بسعة 5 غيغابايت ويتم تشغيله في Google Cloud، ما يُحسِّن بشكل كبير أداء الشبكة والمصادقة. وهذا يعني أنّ كل ما ستحتاجه لتنفيذ هذا الدليل التعليمي هو متصفّح (نعم، يعمل على جهاز Chromebook).
- لتفعيل Cloud Shell من Cloud Console، ما عليك سوى النقر على تفعيل Cloud Shell
(من المفترض ألا تستغرق عملية توفير البيئة والربط بها سوى بضع لحظات).
بعد الاتصال بخدمة Cloud Shell، من المفترض أن تظهر لك رسالة تفيد بأنّه سبق أن تم مصادقة حسابك وأنّه سبق ضبط المشروع على PROJECT_ID
.
gcloud auth list
ناتج الأمر
Credentialed accounts: - <myaccount>@<mydomain>.com (active)
gcloud config list project
ناتج الأمر
[core] project = <PROJECT_ID>
إذا لم يتم ضبط المشروع لأي سبب، ما عليك سوى إصدار الأمر التالي:
gcloud config set project <PROJECT_ID>
هل تبحث عن PROJECT_ID
؟ اطّلِع على المعرّف الذي استخدمته في خطوات الإعداد أو ابحث عنه في لوحة بيانات Cloud Console:
تضبط Cloud Shell أيضًا بعض متغيّرات البيئة تلقائيًا، ما قد يكون مفيدًا عند تنفيذ الأوامر المستقبلية.
echo $GOOGLE_CLOUD_PROJECT
ناتج الأمر
<PROJECT_ID>
- أخيرًا، اضبط المنطقة التلقائية وإعدادات المشروع.
gcloud config set compute/zone us-central1-f
يمكنك اختيار مجموعة متنوعة من المناطق المختلفة. لمزيد من المعلومات، يُرجى الاطّلاع على الأقاليم والمناطق.
3- استنساخ مستودع المصدر
بما أنّك بصدد نشر موقع إلكتروني حالي، ما عليك سوى استنساخ المصدر من مستودعك، حتى تتمكّن من التركيز على إنشاء صور Docker ونشرها على Cloud Run.
شغِّل الطلبات التالية لنسخ المستودع إلى مثيل Cloud Shell والانتقال إلى الدليل المناسب. عليك أيضًا تثبيت متطلّبات Node.js حتى تتمكّن من اختبار تطبيقك قبل نشره.
cd ~ git clone https://github.com/googlecodelabs/monolith-to-microservices.git cd ~/monolith-to-microservices ./setup.sh
يؤدي ذلك إلى استنساخ مستودعك وتغيير الدليل وتثبيت التبعيات اللازمة لتشغيل تطبيقك محليًا. قد يستغرق تشغيل النص البرمجي بضع دقائق.
عليك إجراء التدقيق اللازم واختبار تطبيقك. ولتنفيذ الأمر التالي لبدء خادم الويب:
cd ~/monolith-to-microservices/monolith npm start
إخراج:
Monolith listening on port 8080!
يمكنك معاينة تطبيقك من خلال النقر على معاينة الويب واختيار معاينة على المنفذ 8080.
سيؤدي ذلك إلى فتح نافذة جديدة يمكنك من خلالها الاطّلاع على متجرك على Fancy Store.
يمكنك إغلاق هذه النافذة بعد عرض الموقع الإلكتروني. لإيقاف عملية خادم الويب، اضغط على CONTROL+C
(Command+C
على نظام التشغيل Macintosh) في نافذة المحطة الطرفية.
4. إنشاء حاوية Docker باستخدام Cloud Build
بعد أن أصبحت الملفات المصدر جاهزة، حان وقت استخدام Docker لإنشاء حاويات لتطبيقك.
في العادة، عليك اتّباع منهج من خطوتَين يتضمّن إنشاء حاوية Docker ودفعها إلى سجلّ لتخزين الصورة التي يمكن أن تسحبها منصة GKE. ومع ذلك، يمكنك تسهيل الأمر باستخدام Cloud Build لإنشاء حاوية Docker ووضع الصورة في "مستودع الحاويات" باستخدام أمر واحد. للاطّلاع على العملية اليدوية لإنشاء ملف Dockerfile ودفعه، يُرجى الاطّلاع على البدء السريع لـ Container Registry.
تضغط أداة Cloud Build الملفات من الدليل وتنقلها إلى حزمة Cloud Storage. بعد ذلك، تأخذ عملية الإنشاء جميع الملفات من الحزمة وتستخدم Dockerfile، وهو متوفّر في الدليل نفسه لتشغيل عملية إنشاء Docker. بما أنّك حدّدت العلامة --tag
مع المضيف gcr.io لصورة Docker، سيتمّ دفع صورة Docker الناتجة إلى "مستودع الحاويات".
أولاً، عليك التأكّد من تفعيل واجهة برمجة التطبيقات Cloud Build API. شغِّل الأمر التالي لتفعيله:
gcloud services enable cloudbuild.googleapis.com
بعد تفعيل واجهة برمجة التطبيقات، نفِّذ الأمر التالي في Cloud Shell لبدء عملية الإنشاء:
gcloud builds submit --tag gcr.io/${GOOGLE_CLOUD_PROJECT}/monolith:1.0.0 .
تستغرق هذه العملية بضع دقائق، ولكن بعد اكتمالها، ستظهر نتيجة في وحدة التحكّم الطرفية مشابهة لما يلي:
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ID CREATE_TIME DURATION SOURCE IMAGES STATUS 1ae295d9-63cb-482c-959b-bc52e9644d53 2019-08-29T01:56:35+00:00 33S gs://<PROJECT_ID>_cloudbuild/source/1567043793.94-abfd382011724422bf49af1558b894aa.tgz gcr.io/<PROJECT_ID>/monolith:1.0.0 SUCCESS
للاطّلاع على سجلّ عمليات الإنشاء أو مشاهدة العملية في الوقت الفعلي، يمكنك الانتقال إلى Cloud Console، ثم النقر على قائمة التنقّل ☰ > Cloud Build > السجلّ. يمكنك الاطّلاع على قائمة بجميع الإصدارات السابقة، ولكن من المفترض أن يظهر لك الإصدار الذي أنشأته فقط.
إذا نقرت على معرّف الإصدار، يمكنك الاطّلاع على جميع تفاصيل هذا الإصدار، بما في ذلك إخراج السجلّ. يمكنك عرض صورة الحاوية التي تم إنشاؤها من خلال النقر على الرابط بجانب الصورة.
5- نشر الحاوية في Cloud Run
بعد أن حوّلت موقعك الإلكتروني إلى حاوية ودفعته إلى "مستودع الحاويات"، حان وقت نشره على Cloud Run.
هناك طريقتان للنشر على Cloud Run:
- Cloud Run (مُدار بالكامل) هو نموذج PaaS الذي تُدار فيه دورة حياة الحاوية بالكامل. ستستخدم هذا النهج في هذا الدليل التعليمي حول الرموز البرمجية.
- Cloud Run for Anthos هو خدمة Cloud Run مع طبقة إضافية من التحكّم، ما يتيح لك جلب مجموعاتك ووحدات Pod من GKE. لمزيد من المعلومات، يُرجى الاطّلاع على مقالة إعداد Cloud Run for Anthos على Google Cloud.
ستظهر أمثلة سطر الأوامر في Cloud Shell باستخدام متغيّرات البيئة التي أعددتها سابقًا.
سطر الأوامر
شغِّل الأمر التالي لنشر تطبيقك:
gcloud run deploy --image=gcr.io/${GOOGLE_CLOUD_PROJECT}/monolith:1.0.0 --platform managed
سيُطلب منك تحديد المنطقة التي تريد عرض الإعلانات فيها. اختَر المنطقة الأقرب إليك، ثم اقبل اسم الخدمة التلقائي المقترَح (وحدة تطبيقات موحّدة).
لأغراض الاختبار، اسمح بطلبات غير مُعتمَدة للوصول إلى التطبيق. أدخِل y
عند الطلب.
التحقّق من عملية النشر
للتحقّق من نجاح عملية النشر، شغِّل الأمر التالي. قد يستغرق Pod status
بضع لحظات Running
:
gcloud run services list
اختَر [1] Cloud Run (مُدار بالكامل).
إخراج:
SERVICE REGION URL LAST DEPLOYED BY LAST DEPLOYED AT ✔ monolith us-east1 <your url> <your email> 2019-09-16T21:07:38.267Z
يعرض لك الناتج عدة عناصر. يمكنك الاطّلاع على عملية النشر، بالإضافة إلى المستخدم الذي نفّذها (عنوان بريدك الإلكتروني) وعنوان URL الذي يمكنك استخدامه للوصول إلى التطبيق. يبدو أنّه تم إنشاء كل شيء بنجاح.
افتح عنوان URL المتوفّر في قائمة الخدمات في متصفّح الويب، ومن المفترض أن يظهر لك الموقع الإلكتروني نفسه الذي سبق لك معاينته محليًا.
6- إنشاء نسخة جديدة بدرجة أقل من التوافق
الآن، يمكنك نشر تطبيقك مرة أخرى، ولكن هذه المرة عليك تعديل إحدى المَعلمات.
سيحصل تطبيق Cloud Run تلقائيًا على قيمة 80 للمعالجة المتزامنة، ما يعني أنّ كل مثيل حاوية سيعالج ما يصل إلى 80 طلبًا في المرة الواحدة. يختلف ذلك كثيرًا عن نموذج "استخدام الدوالّ كخدمة" (FaaS)، الذي يعالج فيه مثيل واحد طلبًا واحدًا في المرة الواحدة.
أعِد نشر صورة الحاوية نفسها بقيمة التزامن 1 (لأغراض الاختبار فقط) وتحقّق مما يحدث.
gcloud run deploy --image=gcr.io/${GOOGLE_CLOUD_PROJECT}/monolith:1.0.0 --platform managed --concurrency 1
أجب عن الأسئلة اللاحقة كما فعلت في المرة الأولى. بعد تنفيذ الأمر بنجاح، يُرجى الانتقال إلى Cloud Console للاطّلاع على النتيجة.
من لوحة بيانات Cloud Run، انقر على خدمة monolith للاطّلاع على التفاصيل.
انقر على علامة التبويب المراجعات. من المفترض أن تظهر لك مراجعتَان تم إنشاؤهما. انقر على monolith-00002 وراجِع التفاصيل. من المفترض أن تلاحظ انخفاض قيمة المعالجة المتزامنة إلى 1.
]
على الرغم من أنّ هذه الإعدادات كافية للاختبار، إلا أنّه في معظم سيناريوهات الاستخدام العلني، ستتوفّر لديك حاويات تتيح طلبات متعدّدة متزامنة.
يمكنك الآن استعادة المعالجة المتزامنة الأصلية بدون إعادة النشر. يمكنك ضبط قيمة المعالجة المتزامنة على القيمة التلقائية 80 أو 0، ما سيؤدي إلى إزالة أي قيود على المعالجة المتزامنة وضبطها على الحد الأقصى التلقائي (الذي يبلغ 80 في وقت كتابة هذه المقالة).
شغِّل الأمر التالي في Cloud Shell لتعديل النسخة الحالية:
gcloud run deploy --image=gcr.io/${GOOGLE_CLOUD_PROJECT}/monolith:1.0.0 --platform managed --concurrency 80
لاحظ أنّه تم إنشاء نسخة أخرى وأنّه تم إعادة توجيه الزيارات وأنّ عدد عمليات المعالجة المتزامنة عاد إلى 80.
7- إجراء تغييرات على الموقع الإلكتروني
طلب منك فريق التسويق تغيير الصفحة الرئيسية لموقع شركتك الإلكتروني. ويعتقدون أنّه يجب أن يقدّم معلومات أكثر حول طبيعة الشركة ومنتجاتها. في هذا القسم، ستضيف بعض النصوص إلى الصفحة الرئيسية لإرضاء فريق التسويق.
يبدو أنّ أحد المطوّرين قد أنشأ التغييرات باستخدام اسم الملف index.js.new
. يمكنك ببساطة نسخ هذا الملف إلى index.js
ومن المفترض أن تظهر التغييرات. اتّبِع التعليمات لإجراء التغييرات المناسبة.
نفِّذ الأوامر التالية وانسخ الملف المعدَّل إلى اسم الملف الصحيح واطبع محتوياته للتحقّق من التغييرات:
cd ~/monolith-to-microservices/react-app/src/pages/Home mv index.js.new index.js cat ~/monolith-to-microservices/react-app/src/pages/Home/index.js
يجب أن تبدو التعليمة البرمجية الناتجة على النحو التالي:
/* Copyright 2019 Google LLC Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at https://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. */ import React from "react"; import { makeStyles } from "@material-ui/core/styles"; import Paper from "@material-ui/core/Paper"; import Typography from "@material-ui/core/Typography"; const useStyles = makeStyles(theme => ({ root: { flexGrow: 1 }, paper: { width: "800px", margin: "0 auto", padding: theme.spacing(3, 2) } })); export default function Home() { const classes = useStyles(); return ( <div className={classes.root}> <Paper className={classes.paper}> <Typography variant="h5"> Fancy Fashion & Style Online </Typography> <br /> <Typography variant="body1"> Tired of mainstream fashion ideas, popular trends and societal norms? This line of lifestyle products will help you catch up with the Fancy trend and express your personal style. Start shopping Fancy items now! </Typography> </Paper> </div> ); }
لقد عدّلت مكوّنات React، ولكن عليك إنشاء تطبيق React لإنشاء الملفات الثابتة. نفِّذ الأمر التالي لإنشاء تطبيق React ونسخه إلى الدليل العلني لتطبيق monolith:
cd ~/monolith-to-microservices/react-app npm run build:monolith
بعد تعديل الرمز البرمجي، عليك إعادة إنشاء حاوية Docker ونشرها في "مستودع الحاويات". يمكنك استخدام الأمر نفسه كما في السابق، ولكن هذه المرة عليك تعديل تصنيف الإصدار.
شغِّل الأمر التالي لبدء عملية إنشاء جديدة في Cloud Build باستخدام إصدار الصورة المعدَّل 2.0.0:
cd ~/monolith-to-microservices/monolith #Feel free to test your application npm start gcloud builds submit --tag gcr.io/${GOOGLE_CLOUD_PROJECT}/monolith:2.0.0 .
في القسم التالي، ستستخدم هذه الصورة لتحديث تطبيقك بدون أي وقت توقف.
8. تعديل الموقع الإلكتروني بدون أي وقت توقف
اكتملت التغييرات ويسعد فريق التسويق بالتعديلات التي أجريتها. لقد حان وقت تعديل الموقع الإلكتروني بدون انقطاع الخدمة للمستخدمين.
تتعامل Cloud Run مع كل عملية نشر على أنّها إصدار جديد، وسيتم نشره على الإنترنت ثم إعادة توجيه الزيارات إليه.
اتّبِع المجموعات التالية من التعليمات لتعديل موقعك الإلكتروني.
سطر الأوامر
من سطر الأوامر، يمكنك إعادة نشر الخدمة لتعديل الصورة إلى إصدار جديد باستخدام الأمر التالي:
gcloud run deploy --image=gcr.io/${GOOGLE_CLOUD_PROJECT}/monolith:2.0.0 --platform managed
التحقّق من عملية النشر
تأكَّد من صحة تحديث النشر من خلال تنفيذ الأمر التالي:
gcloud run services describe monolith --platform managed
تظهر النتيجة على النحو التالي:
apiVersion: serving.knative.dev/v1alpha1 kind: Service metadata: annotations: client.knative.dev/user-image: gcr.io/my-cloudrun-codelab/monolith:2.0.0 ...
ستلاحظ أنّ خدمتك تستخدم الآن أحدث إصدار من صورتك التي تم نشرها في إصدار جديد.
للتحقّق من التغييرات، انتقِل إلى عنوان URL الخارجي لخدمة Cloud Run مرة أخرى وتحقّق من تعديل عنوان تطبيقك.
يمكنك تنفيذ الأمر التالي لعرض الخدمات وعنوان IP في حال نسيان ذلك:
gcloud run services list
من المفترض أن يعرض موقعك الإلكتروني الآن النص الذي أضفته إلى مكوّن الصفحة الرئيسية.
9. تَنظيم
حذف صور "مستودع الحاويات"
# Delete the container image for version 1.0.0 of our monolith gcloud container images delete gcr.io/${GOOGLE_CLOUD_PROJECT}/monolith:1.0.0 --quiet # Delete the container image for version 2.0.0 of our monolith gcloud container images delete gcr.io/${GOOGLE_CLOUD_PROJECT}/monolith:2.0.0 --quiet
حذف عناصر Cloud Build من Cloud Storage
# The following command will take all source archives from all builds and delete them from cloud storage # Run this command to print all sources: # gcloud builds list | awk 'NR > 1 {print $4}' gcloud builds list | awk 'NR > 1 {print $4}' | while read line; do gsutil rm $line; done
حذف خدمة Cloud Run
gcloud run services delete monolith --platform managed
10. تهانينا
لقد نشرت موقعك الإلكتروني ووسّعته وعدّلته باستخدام Cloud Run.