1. نظرة عامة

تتميّز تطبيقات Google App Engine بسهولة إنشائها وصيانتها وتوسيع نطاقها مع تغيُّر احتياجاتك من حيث عدد الزيارات ومساحة تخزين البيانات. باستخدام App Engine، لن تحتاج إلى صيانة أي خوادم. ما عليك سوى تحميل تطبيقك وسيكون جاهزًا للاستخدام.
في هذا الدرس التطبيقي حول الترميز، ستتعرّف على كيفية تفعيل تطبيق ويب بسيط مكتوب بلغة Python باستخدام إطار عمل الويب Flask. على الرغم من أنّ هذا النموذج يستخدم Flask، يمكنك استخدام أُطر عمل أخرى للويب، بما في ذلك Django وPyramid وBottle وweb.py.
تم اقتباس هذا البرنامج التعليمي من https://cloud.google.com/appengine/docs/standard/python3/quickstart
أهداف الدورة التعليمية
- كيفية إنشاء خادم Python بسيط على Google App Engine
- كيفية تعديل الرمز بدون إيقاف الخادم
المتطلبات
- الإلمام باستخدام لغة Python
- معرفة أدوات تحرير النصوص العادية في Linux، مثل vim أو emacs أو nano
استطلاع
كيف ستستخدم هذا البرنامج التعليمي؟
كيف تقيّم تجربتك مع Python؟
كيف تقيّم تجربتك مع خدمات Google Cloud؟
2. الإعداد والمتطلبات
إعداد البيئة بالسرعة التي تناسبك
- سجِّل الدخول إلى Google Cloud Console وأنشِئ مشروعًا جديدًا أو أعِد استخدام مشروع حالي. إذا لم يكن لديك حساب على Gmail أو Google Workspace، عليك إنشاء حساب.



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

إذا كانت هذه هي المرة الأولى التي تبدأ فيها Cloud Shell، ستظهر لك شاشة وسيطة توضّح ماهية هذه الخدمة. إذا ظهرت لك شاشة وسيطة، انقر على متابعة.

يستغرق توفير Cloud Shell والاتصال به بضع لحظات فقط.

يتم تحميل هذا الجهاز الافتراضي بجميع أدوات التطوير اللازمة. توفّر هذه الخدمة دليلًا رئيسيًا دائمًا بسعة 5 غيغابايت وتعمل في Google Cloud، ما يؤدي إلى تحسين أداء الشبكة والمصادقة بشكل كبير. يمكن إنجاز معظم عملك في هذا الدرس التطبيقي حول الترميز، إن لم يكن كله، باستخدام متصفح.
بعد الاتصال بـ Cloud Shell، من المفترض أن يظهر لك أنّه تم إثبات هويتك وأنّه تم ضبط المشروع على رقم تعريف مشروعك.
- نفِّذ الأمر التالي في Cloud Shell للتأكّد من إكمال عملية المصادقة:
gcloud auth list
ناتج الأمر
Credentialed Accounts
ACTIVE ACCOUNT
* <my_account>@<my_domain.com>
To set the active account, run:
$ gcloud config set account `ACCOUNT`
- نفِّذ الأمر التالي في Cloud Shell للتأكّد من أنّ أمر gcloud يعرف مشروعك:
gcloud config list project
ناتج الأمر
[core] project = <PROJECT_ID>
إذا لم يكن كذلك، يمكنك تعيينه من خلال هذا الأمر:
gcloud config set project <PROJECT_ID>
ناتج الأمر
Updated property [core/project].
3- كتابة تطبيق الويب
بعد تشغيل Cloud Shell، يمكنك استخدام سطر الأوامر لاستدعاء الأمر gcloud في Cloud SDK أو الأدوات الأخرى المتاحة على مثيل الجهاز الافتراضي. يمكنك استخدام دليل $HOME في مساحة تخزين القرص الدائم لتخزين الملفات في جميع المشاريع وبين جلسات Cloud Shell. إنّ دليل $HOME خاص بك ولا يمكن للمستخدمين الآخرين الوصول إليه.
لنبدأ بإنشاء مجلد جديد في دليل $HOME للتطبيق:
mkdir ~/helloworld cd ~/helloworld
أنشئ ملفًا باسم main.py:
touch main.py
عدِّل الملف باستخدام محرّر سطر الأوامر المفضّل لديك (nano أو vim أو emacs) أو من خلال النقر على الزر "محرّر Cloud Shell":

لتعديل الملف مباشرةً باستخدام "محرّر Cloud Shell"، استخدِم الأمر التالي:
cloudshell edit main.py
main.py
import flask
# If `entrypoint` is not defined in app.yaml, App Engine will look for an app
# called `app` in `main.py`.
app = flask.Flask(__name__)
@app.get("/")
def hello():
"""Return a friendly HTTP greeting."""
return "Hello World!\n"
if __name__ == "__main__":
# Used when running locally only. When deploying to Google App
# Engine, a webserver process such as Gunicorn will serve the app. This
# can be configured by adding an `entrypoint` to app.yaml.
app.run(host="localhost", port=8080, debug=True)
4. تحديد الاعتماديات
لتحديد التبعيات لتطبيق الويب، ارجع إلى نافذة الأوامر وأنشئ ملف requirements.txt في الدليل الجذر لمشروعك، مع تحديد إصدار Flask الذي تريد استخدامه:
touch requirements.txt
لتعديل الملف باستخدام "أداة تعديل Cloud Shell"، استخدِم الأمر التالي:
cloudshell edit requirements.txt
requirements.txt
# https://pypi.org/project/Flask
Flask==3.0.2
5- ضبط عملية النشر
لنشر تطبيق الويب على App Engine، تحتاج إلى ملف app.yaml. يحدّد ملف الإعداد هذا إعدادات تطبيق الويب على App Engine.
من نافذة Terminal، أنشئ ملف app.yaml وعدِّله في الدليل الجذر لمشروعك:
touch app.yaml
لتعديل الملف باستخدام "أداة تعديل Cloud Shell"، استخدِم الأمر التالي:
cloudshell edit app.yaml
app.yaml
runtime: python312
6. نشر تطبيق الويب
من نافذة الوحدة الطرفية، تحقَّق من محتوى الدليل:
ls
يجب أن تتضمّن هذه الحزمة الملفات الثلاثة التالية:
app.yaml main.py requirements.txt
انشر تطبيق الويب باستخدام الأمر التالي:
gcloud app deploy
في المرة الأولى، عليك اختيار منطقة نشر:
Please choose the region where you want your App Engine application located: [1] asia-east2 ... [7] australia-southeast1 [8] europe-west [9] europe-west2 ... [12] northamerica-northeast1 [13] southamerica-east1 ... [19] us-west4 ... Please enter your numeric choice:
أكِّد إطلاق عملية النشر:
Creating App Engine application in project [PROJECT_ID] and region [REGION]....done. Services to deploy: descriptor: [~/helloworld/app.yaml] source: [~/helloworld] target project: [PROJECT_ID] target service: [default] target version: [YYYYMMDDtHHMMSS] target url: [https://PROJECT_ID.REGION_ID.r.appspot.com] Do you want to continue (Y/n)?
يتم نشر تطبيقك:
Beginning deployment of service [default]... Created .gcloudignore file. See `gcloud topic gcloudignore` for details. Uploading 3 files to Google Cloud Storage 100% File upload done. Updating service [default]...done. Setting traffic split for service [default]...done. Deployed service [default] to [https://PROJECT_ID.REGION_ID.r.appspot.com]
أصبح تطبيق الويب جاهزًا الآن للاستجابة لطلبات HTTP على https://PROJECT_ID.REGION_ID.r.appspot.com.
7. اختبار تطبيق الويب
تطبيق الويب جاهز للاستجابة لطلبات HTTP على https://PROJECT_ID.REGION_ID.r.appspot.com.
أولاً، استرجِع اسم مضيف تطبيق الويب باستخدام الأمر gcloud app describe:
APPENGINE_HOSTNAME=$(gcloud app describe --format "value(defaultHostname)")
اختبِر تطبيق الويب باستخدام طلب استرداد بيانات باستخدام GET بسيط عبر HTTP:
curl https://$APPENGINE_HOSTNAME
يجب أن تحصل على الإجابة التالية:
Hello World!
ملخّص
في الخطوات السابقة، أعددت تطبيق ويب بسيطًا بلغة Python وشغّلته ونشرته على App Engine.
8. تحديث تطبيق الويب
عدِّل تطبيق الويب عن طريق تغيير نص الدالة hello() في ملف main.py.
لتعديل الملف باستخدام "أداة تعديل Cloud Shell"، استخدِم الأمر التالي:
cloudshell edit main.py
main.py
import flask
# If `entrypoint` is not defined in app.yaml, App Engine will look for an app
# called `app` in `main.py`.
app = flask.Flask(__name__)
@app.get("/")
def hello():
"""Return a friendly HTTP greeting."""
# return "Hello World!\n" # ← Replace this line
who = flask.request.args.get("who", "World")
return f"Hello {who}!\n"
if __name__ == "__main__":
# Used when running locally only. When deploying to Google App
# Engine, a webserver process such as Gunicorn will serve the app. This
# can be configured by adding an `entrypoint` to app.yaml.
app.run(host="localhost", port=8080, debug=True)
من نافذة Terminal، أعِد نشر تطبيق الويب لتحديثه:
gcloud app deploy --quiet
يتم نشر الإصدار الجديد من تطبيقك باتّباع الخطوات التالية:
Beginning deployment of service [default]... Uploading 1 file to Google Cloud Storage ... Deployed service [default] to [https://PROJECT_ID.REGION_ID.r.appspot.com]
اختبِر الإصدار الجديد من تطبيق الويب بالطريقة نفسها التي اتّبعتها سابقًا:
curl https://$APPENGINE_HOSTNAME
يجب أن تحصل على الإجابة نفسها:
Hello World!
اختبِرها باستخدام المَعلمة الاختيارية:
curl https://$APPENGINE_HOSTNAME?who=Universe
يجب أن تحصل على الإجابة التالية:
Hello Universe!
ملخّص
في هذه الخطوة، تم تعديل تطبيق الويب وإعادة نشره بدون أي انقطاع في الخدمة.
9- تهانينا!
لقد تعلّمت كيفية كتابة أول تطبيق ويب لك على App Engine باستخدام Python.
مزيد من المعلومات
- مستندات App Engine: https://cloud.google.com/appengine
- يمكنك الاطّلاع على هذا البرنامج التعليمي لكتابة تطبيق Python متكامل على App Engine: https://cloud.google.com/appengine/docs/standard/python3/building-app
الترخيص
يخضع هذا العمل لترخيص المشاع الإبداعي مع نسب العمل إلى مؤلفه 2.0 Generic License.