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

ما هي خدمة Cloud Workstations؟
توفّر خدمة Cloud Workstations بيئات تطوير مُدارة على Google Cloud تتضمّن ميزات أمان مدمجة وبيئات تطوير مُعدّة مسبقًا ولكن يمكن تخصيصها. يمكنك الوصول إلى Cloud Workstations من خلال بيئة تطوير متكاملة مستندة إلى المتصفّح، أو من خلال العديد من أدوات تعديل الرموز البرمجية المحلية (مثل VSCode أو بيئات تطوير متكاملة من JetBrains، مثل IntelliJ IDEA Ultimate وPyCharm Professional)، أو من خلال SSH.
تستخدم Cloud Workstations الموارد التالية:
- ينشئ المشرفون مجموعات محطات عمل.
- في كل مجموعة من محطات العمل، ينشئ المشرفون إعدادًا واحدًا أو أكثر لمحطة العمل يعمل كنموذج لمحطات العمل.
- يمكن للمطوّرين إنشاء محطات عمل تحدّد بيئات التطوير التي توفّر بيئة تطوير متكاملة (IDE) على السحابة الإلكترونية وأدوات لغوية ومكتبات وغير ذلك.
تتيح Cloud Workstations لمشرفي تكنولوجيا المعلومات والأمان إمكانية توفير بيئات التطوير وتوسيع نطاقها وإدارتها وتأمينها بسهولة، كما تتيح للمطوّرين الوصول إلى بيئات التطوير بإعدادات متسقة وأدوات قابلة للتخصيص.
تساعد Cloud Workstations في نقل الأمان إلى اليسار من خلال تحسين الوضع الأمني لبيئات تطوير التطبيقات. تتضمّن هذه الخدمة ميزات أمان، مثل "عناصر التحكّم في خدمة السحابة الافتراضية الخاصة" (VPC)، وعمليات الدخول أو الخروج الخاصة، وتحديث الصور الإلزامي، وسياسات الوصول إلى "إدارة الهوية وإمكانية الوصول".
ما هو Cloud Code؟
توفّر Cloud Code إمكانية استخدام بيئة تطوير متكاملة لدورة التطوير الكاملة لتطبيقات Kubernetes وCloud Run، بدءًا من إنشاء تطبيق جديد وتخصيصه من نماذج القوالب إلى تشغيل التطبيق النهائي. تساعدك Cloud Code في كل خطوة من خلال عيّنات جاهزة للتنفيذ ومقتطفات إعدادات جاهزة للاستخدام وتجربة تصحيح أخطاء مخصّصة، ما يسهّل عملية التطوير باستخدام Kubernetes وCloud Run.
في ما يلي بعض ميزات Cloud Code:
- إنشاء التطبيقات وتشغيلها باستمرار
- إمكانية تصحيح أخطاء تطبيق Kubernetes قيد التطوير
- بث السجلّات وعرضها
مزيد من المعلومات عن ميزات Cloud Code الأخرى
ما ستتعلمه
في هذا الدرس التطبيقي، ستتعرّف على طرق التطوير باستخدام الحاويات في Google Cloud Platform، بما في ذلك:
- مراجعة Cloud Workstations
- تشغيل "محطة العمل"
- مراجعة Cloud Code
- تصحيح الأخطاء على Kubernetes
2. الإعداد والمتطلبات
إعداد بيئة الاختبار الذاتي
- سجِّل الدخول إلى Google Cloud Console وأنشِئ مشروعًا جديدًا أو أعِد استخدام مشروع حالي. إذا لم يكن لديك حساب على Gmail أو Google Workspace، عليك إنشاء حساب.



- اسم المشروع هو الاسم المعروض للمشاركين في هذا المشروع. وهي سلسلة أحرف لا تستخدمها Google APIs. ويمكنك تعديله في أي وقت.
- رقم تعريف المشروع هو معرّف فريد في جميع مشاريع Google Cloud ولا يمكن تغييره (لا يمكن تغييره بعد ضبطه). تنشئ Cloud Console سلسلة فريدة تلقائيًا، ولا يهمّك عادةً ما هي. في معظم دروس البرمجة، عليك الرجوع إلى رقم تعريف المشروع (يتم تحديده عادةً على أنّه
PROJECT_ID). إذا لم يعجبك رقم التعريف الذي تم إنشاؤه، يمكنك إنشاء رقم تعريف عشوائي آخر. يمكنك بدلاً من ذلك تجربة اسم مستخدم من اختيارك ومعرفة ما إذا كان متاحًا. ولا يمكن تغييرها بعد هذه الخطوة وستبقى سارية طوال مدة المشروع. - للعلم، هناك قيمة ثالثة، وهي رقم المشروع الذي تستخدمه بعض واجهات برمجة التطبيقات. يمكنك الاطّلاع على مزيد من المعلومات حول هذه القيم الثلاث في المستندات.
- بعد ذلك، عليك تفعيل الفوترة في Cloud Console لاستخدام موارد/واجهات برمجة تطبيقات Cloud. لن تكلفك تجربة هذا الدرس البرمجي الكثير من المال، إن وُجدت تكلفة على الإطلاق. لإيقاف الموارد كي لا يتم تحصيل رسوم منك بعد هذا البرنامج التعليمي، يمكنك حذف الموارد التي أنشأتها أو حذف المشروع بأكمله. يمكن لمستخدمي Google Cloud الجدد الاستفادة من برنامج الفترة التجريبية المجانية بقيمة 300 دولار أمريكي.
إعداد البيئة
في Cloud Shell، اضبط رقم تعريف مشروعك ورقم المشروع. احفظها كمتغيّرات PROJECT_ID وPROJECT_ID.
export PROJECT_ID=$(gcloud config get-value project)
export PROJECT_NUMBER=$(gcloud projects describe $PROJECT_ID \
--format='value(projectNumber)')
في هذا التمرين العملي، ستنشر الرمز على GKE. ستستخدم أيضًا محطات عمل Cloud كبيئة تطوير متكاملة.
يُعدّ نص التهيئة البرمجي أدناه هذه البنية الأساسية لك.
- نزِّل نص التهيئة البرمجي واجعله قابلاً للتنفيذ.
wget https://raw.githubusercontent.com/GoogleCloudPlatform/container-developer-workshop/main/labs/python/setup_with_cw.sh
chmod +x setup_with_cw.sh
- افتح ملف
setup_with_cw.shوعدِّل قيم كلمات المرور التي تم ضبطها حاليًا على CHANGEME - نفِّذ نص التهيئة البرمجي من أجل إنشاء مجموعة GKE ستستخدمها في هذا الدرس التطبيقي. سيستغرق هذا الإعداد حوالي 20 دقيقة.
./setup_with_cw.sh &
- افتح محطات عمل Cloud في Cloud Console. انتظِر إلى أن تصبح حالة المجموعة
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/python/workstation_config_setup.sh
chmod +x workstation_config_setup.sh
./workstation_config_setup.sh
مجموعة وإعدادات Cloud Workstations
افتح محطات عمل Cloud في Cloud Console. تأكَّد من أنّ المجموعة في حالة READY.

تحقَّق من حالة عمليات الإعداد الحالية.

إنشاء محطة عمل جديدة

غيِّر الاسم إلى my-workstation واختَر الإعداد الحالي: codeoss-python.

تشغيل "محطة العمل"
- بدء محطة العمل وتشغيلها سيستغرق بدء تشغيل "محطة العمل" بضع لحظات.

- السماح بملفات تعريف الارتباط التابعة لجهات خارجية من خلال النقر على الرمز في شريط العناوين


- انقر على "هل تواجهك مشكلة في الموقع الإلكتروني؟".

- انقر على "السماح بملفات تعريف الارتباط".

- بعد تشغيل محطة العمل، سيظهر لك بيئة التطوير المتكاملة Code OSS.
انقر على "وضع علامة اكتمال" في صفحة "البدء" في بيئة التطوير المتكاملة لمحطة العمل

3- نظرة عامة حول Cloud Code
مراجعة الأقسام المختلفة المتاحة في Cloud Code
- تطوير Kubernetes يمكنك الحصول على بيئة تطوير وتصحيح أخطاء متكاملة بالكامل في Kubernetes ضمن بيئة التطوير المتكاملة (IDE). إنشاء المجموعات وإدارتها مباشرةً من داخل بيئة التطوير المتكاملة
- تصحيح أخطاء التطبيقات قيد التشغيل: يمكنك تصحيح أخطاء الرمز البرمجي في بيئات التطوير المتكاملة باستخدام Cloud Code for VS Code وCloud Code for IntelliJ من خلال الاستفادة من ميزات تصحيح الأخطاء المضمّنة في بيئة التطوير المتكاملة.
- استكشاف عمليات النشر عرض الموارد الأساسية والبيانات الوصفية لمجموعات Kubernetes وخدمات Cloud Run يمكنك جلب وصف أو عرض السجلات أو إدارة الأسرار أو الحصول على نافذة طرفية مباشرةً في حاوية.
- تبسيط عملية التطوير المحلي في Kubernetes تستخدم أداة Cloud Code for IDEs أدوات شائعة مثل Skaffold وJib وkubectl لتقديم ملاحظات مستمرة حول الرمز البرمجي في الوقت الفعلي.

تسجيل الدخول إلى Google Cloud
- انقر على رمز Cloud Code واختَر "تسجيل الدخول إلى Google Cloud":

- انقر على "متابعة لتسجيل الدخول".

- تحقَّق من الناتج في "نافذة الأوامر" وافتح الرابط:

- سجِّل الدخول باستخدام بيانات اعتماد حساب الطالب على Qwiklabs.

- اختَر "السماح":

- انسخ رمز التحقّق وارجع إلى علامة التبويب "محطة العمل".

- ألصِق رمز التحقّق واضغط على Enter.

انقر على الزر "السماح" إذا ظهرت لك هذه الرسالة، لتتمكّن من النسخ واللصق في محطة العمل.

4. إنشاء تطبيق Python جديد للمبتدئين
في هذا القسم، ستنشئ تطبيق Python جديدًا.
- افتح نافذة Terminal جديدة.

- إنشاء دليل جديد وفتحه كمساحة عمل
mkdir music-service && cd music-service
code-oss-cloud-workstations -r --folder-uri="$PWD"
- أنشئ ملفًا باسم
requirements.txtوانسخ المحتوى التالي فيه

Flask
gunicorn
ptvsd==4.3.2
- أنشئ ملفًا باسم
app.pyوالصِق الرمز التالي فيه
import os
from flask import Flask, request, jsonify
app = Flask(__name__)
@app.route("/")
def hello_world():
message="Hello, World!"
return message
if __name__ == '__main__':
server_port = os.environ.get('PORT', '8080')
app.run(debug=False, port=server_port, host='0.0.0.0')
- أنشئ ملفًا باسم
Dockerfileوالصِق فيه ما يلي
FROM python:3.8
ARG FLASK_DEBUG=0
ENV FLASK_DEBUG=$FLASK_DEBUG
ENV FLASK_APP=app.py
WORKDIR /app
COPY requirements.txt .
RUN pip install --trusted-host pypi.python.org -r requirements.txt
COPY . .
ENTRYPOINT ["python3", "-m", "flask", "run", "--port=8080", "--host=0.0.0.0"]
ملاحظة: يتيح لك FLASK_DEBUG=1 إعادة تحميل تغييرات الرمز تلقائيًا إلى تطبيق Python flask. يتيح لك Dockerfile تمرير هذه القيمة كمعلَمة إنشاء.
إنشاء بيانات
في الوحدة الطرفية، نفِّذ الأمر التالي لإنشاء skaffold.yaml وdeployment.yaml تلقائيَين.
- ابدأ Skaffold باستخدام الأمر التالي
skaffold init --generate-manifests
عندما يُطلب منك ذلك، استخدِم الأسهم لتحريك المؤشر ومفتاح المسافة لاختيار الخيارات.
اختيار:
-
8080للمنفذ yلحفظ الإعدادات
تعديل إعدادات Skaffold
- تغيير اسم التطبيق التلقائي
- فتح "
skaffold.yaml" - اختَر اسم الصورة المضبوطة حاليًا على
dockerfile-image - انقر بزر الماوس الأيمن واختَر "تغيير كل التكرارات"
- اكتب الاسم الجديد على النحو التالي:
python-app - عدِّل قسم الإنشاء أكثر من ذلك ليصبح
- إضافة
docker.buildArgsإلى بطاقةFLASK_DEBUG=1 - مزامنة الإعدادات لتحميل أي تغييرات على ملفات
*.pyمن بيئة التطوير المتكاملة إلى الحاوية قيد التشغيل
بعد إجراء التعديلات، سيكون قسم الإنشاء في ملف skaffold.yaml على النحو التالي:
build:
artifacts:
- image: python-app
docker:
buildArgs:
FLASK_DEBUG: "1"
dockerfile: Dockerfile
sync:
infer:
- '**/*.py'
تعديل ملف إعداد Kubernetes
- تغيير الاسم التلقائي
- فتح ملف
deployment.yaml - اختَر اسم الصورة المضبوطة حاليًا على
dockerfile-image - انقر بزر الماوس الأيمن واختَر "تغيير كل التكرارات"
- اكتب الاسم الجديد على النحو التالي:
python-app
5- التعرّف على عملية التطوير
بعد إضافة منطق النشاط التجاري، يمكنك الآن نشر تطبيقك واختباره. سيعرض القسم التالي كيفية استخدام المكوّن الإضافي Cloud Code. يتكامل هذا المكوّن الإضافي مع skaffold، من بين أمور أخرى، لتبسيط عملية التطوير. عند النشر إلى GKE في الخطوات التالية، ستنشئ Cloud Code وSkaffold تلقائيًا صورة الحاوية، ثم ستنقلها إلى Container Registry، وبعد ذلك ستنشر تطبيق your إلى GKE. يحدث ذلك في الخلفية بدون أن يضطر المطوّر إلى الاطّلاع على التفاصيل.
إضافة مجموعة Kubernetes
- إضافة مجموعة

- اختَر Google Kubernetes Engine:

- اختَر مشروعًا.

- اختَر "python-cluster" الذي تم إنشاؤه في عملية الإعداد الأولية.

- يظهر الآن في قائمة مجموعات Kubernetes ضِمن Cloud Code. يمكنك التنقّل في المجموعة واستكشافها من هنا.

النشر على Kubernetes
- في اللوحة أسفل "محرّر Cloud Shell"، انقر على Cloud Code 

- في اللوحة التي تظهر في أعلى الصفحة، اختَر التشغيل على Kubernetes.
إذا طُلب منك ذلك، اختَر "نعم" لاستخدام سياق Kubernetes الحالي.

يبدأ هذا الأمر إنشاء رمز المصدر ثم ينفّذ الاختبارات. سيستغرق إنشاء التطبيق وإجراء الاختبارات بضع دقائق. تتضمّن هذه الاختبارات اختبارات الوحدات وخطوة التحقّق التي تتحقّق من القواعد التي تم ضبطها لبيئة النشر. تمّت إعداد خطوة التحقّق هذه مسبقًا، وهي تضمن تلقّي تحذير بشأن مشاكل النشر حتى أثناء العمل في بيئة التطوير.
- في المرة الأولى التي تنفّذ فيها الأمر، سيظهر طلب في أعلى الشاشة يسألك عمّا إذا كنت تريد سياق Kubernetes الحالي، اختَر "نعم" للقبول واستخدام السياق الحالي.
- بعد ذلك، ستظهر رسالة تطلب تحديد سجلّ الحاويات الذي تريد استخدامه. اضغط على مفتاح Enter لقبول القيمة التلقائية المقدَّمة
- انقر على علامة التبويب "الإخراج" في اللوحة السفلية للاطّلاع على مستوى التقدّم والإشعارات. استخدِم القائمة المنسدلة لاختيار "Kubernetes: تشغيل/تصحيح الأخطاء"

- اختَر "Kubernetes: Run/Debug - Detailed" في القائمة المنسدلة للقناة على اليسار لعرض تفاصيل إضافية وسجلات يتم بثها مباشرةً من الحاويات

عند الانتهاء من الإنشاء والاختبارات، ستتضمّن سجلّات علامة التبويب "الإخراج" عنوان URL http://localhost:8080 المُدرَج في العرض "Kubernetes: تشغيل/تصحيح الأخطاء".
- في نافذة Cloud Code الطرفية، مرِّر مؤشر الماوس فوق عنوان URL الأول في الناتج (http://localhost:8080)، ثم انقر على Open Web Preview (فتح معاينة الويب) في نصيحة الأداة التي تظهر.
- سيتم فتح علامة تبويب جديدة في المتصفّح وعرض الرسالة:
Hello, World!
إعادة التحميل السريع
- افتح ملف
app.py - تغيير رسالة الترحيب إلى
Hello from Python
لاحظ على الفور أنّه في نافذة Output، في طريقة العرض Kubernetes: Run/Debug، يقوم برنامج المراقبة بمزامنة الملفات المعدّلة مع الحاوية في Kubernetes.
Update initiated Build started for artifact python-app Build completed for artifact python-app Deploy started Deploy completed Status check started Resource pod/python-app-6f646ffcbb-tn7qd status updated to In Progress Resource deployment/python-app status updated to In Progress Resource deployment/python-app status completed successfully Status check succeeded ...
- إذا انتقلت إلى طريقة العرض
Kubernetes: Run/Debug - Detailed، ستلاحظ أنّها تتعرّف على تغييرات الملفات ثم تنشئ التطبيق وتعيد نشره.
files modified: [app.py]
Syncing 1 files for gcr.io/veer-pylab-01/python-app:3c04f58-dirty@sha256:a42ca7250851c2f2570ff05209f108c5491d13d2b453bb9608c7b4af511109bd
Copying files:map[app.py:[/app/app.py]]togcr.io/veer-pylab-01/python-app:3c04f58-dirty@sha256:a42ca7250851c2f2570ff05209f108c5491d13d2b453bb9608c7b4af511109bd
Watching for changes...
[python-app] * Detected change in '/app/app.py', reloading
[python-app] * Restarting with stat
[python-app] * Debugger is active!
[python-app] * Debugger PIN: 744-729-662
- أعِد تحميل علامة تبويب المتصفح التي ظهرت فيها النتائج السابقة للاطّلاع على النتائج المعدَّلة.
تصحيح الأخطاء
- انتقِل إلى "طريقة عرض تصحيح الأخطاء" وأوقِف سلسلة التعليمات البرمجية الحالية
. إذا طُلب منك ذلك، يمكنك اختيار التنظيف بعد كل عملية تشغيل. 
- انقر على
Cloud Codeفي القائمة السفلية واختَرDebug on Kubernetesلتشغيل التطبيق في وضعdebug.

- في طريقة العرض
Kubernetes Run/Debug - DetailedلنافذةOutput، لاحظ أنّ Skaffold سينشر هذا التطبيق في وضع تصحيح الأخطاء.
- في المرة الأولى التي يتم فيها تشغيل هذا الإجراء، سيظهر طلب يسأل عن مكان المصدر داخل الحاوية. ترتبط هذه القيمة بالأدلة في Dockerfile.
اضغط على Enter لقبول القيمة التلقائية

سيستغرق إنشاء التطبيق ونشره بضع دقائق. في حال انقطاع اتصال جلسة تصحيح الأخطاء، أعِد تنفيذ خطوات "تصحيح الأخطاء على Kubernetes" من قسم "جلسات التطوير".
- عند اكتمال العملية ستلاحظ ربط أداة تصحيح الأخطاء وعلامة التبويب "الإخراج" التي تعرض:
Attached debugger to container "python-app-8476f4bbc-h6dsl" successfully.، وسيتم إدراج عنوان URL http://localhost:8080.
Port forwarding pod/python-app-8bd64cf8b-cskfl in namespace default, remote port 5678 -> http://127.0.0.1:5678
- يتغيّر لون شريط الحالة السفلي من الأزرق إلى البرتقالي، ما يشير إلى أنّه في "وضع تصحيح الأخطاء".

- في العرض
Kubernetes Run/Debug، لاحظ أنّه تم بدء تشغيل حاوية قابلة للتصحيح
**************URLs***************** Forwarded URL from service python-app: http://localhost:8080 Debuggable container started pod/python-app-8bd64cf8b-cskfl:python-app (default) Update succeeded ***********************************
استخدام نقاط الإيقاف
- افتح ملف
app.py - ابحث عن العبارة التي تقول
return message - أضِف نقطة توقّف إلى هذا السطر من خلال النقر على المساحة الفارغة على يمين رقم السطر. سيظهر مؤشر أحمر للإشارة إلى أنّه تم ضبط نقطة الإيقاف.
- أعِد تحميل المتصفّح ولاحظ أنّ أداة تصحيح الأخطاء توقف العملية عند نقطة التوقف وتتيح لك التحقّق من المتغيرات وحالة التطبيق الذي يتم تشغيله عن بُعد في GKE
- انقر على قسم "المتغيّرات"
- انقر على Locals، وسيظهر لك المتغيّر
"message". - انقر مرّتين على اسم المتغيّر "message" (الرسالة)، وفي النافذة المنبثقة، غيِّر القيمة إلى قيمة مختلفة مثل
"Greetings from Python" - انقر على الزر "متابعة" في لوحة التحكّم في تصحيح الأخطاء

- راجِع الردّ في المتصفّح الذي يعرض الآن القيمة المعدَّلة التي أدخلتها للتو.
- أوقِف وضع "تصحيح الأخطاء" من خلال الضغط على زر الإيقاف
وأزِل نقطة التوقف من خلال النقر عليها مرة أخرى.
6. تنظيف
تهانينا! في هذا التمرين المعملي، أنشأت تطبيق Python جديدًا من البداية وأعددته للعمل بفعالية مع الحاويات. بعد ذلك، نشرت تطبيقك وأصلحت أخطاءه في مجموعة GKE بعيدة باتّباع مسار المطوّر نفسه المتوفّر في حِزم التطبيقات التقليدية.
لإجراء عملية تنظيف بعد إكمال الدرس التطبيقي، اتّبِع الخطوات التالية:
- حذف الملفات المستخدَمة في المختبر
cd ~ && rm -rf ~/music-service
- حذف المشروع لإزالة جميع البنية الأساسية والموارد ذات الصلة
—
تاريخ آخر تعديل: 22/3/2023