بدء استخدام App Engine (Python 3)

1. نظرة عامة

befa7a877ccdd35d.png

من السهل إنشاء تطبيقات 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
  • كيفية تحديث الرمز بدون إيقاف الخادم

المتطلبات

  • الإلمام باستخدام بايثون
  • دراية بأدوات تحرير النصوص العادية في Linux، مثل vim أو emacs أو nano

استطلاع

كيف ستستخدم هذا البرنامج التعليمي؟

القراءة فقط اقرأها وأكمِل التمارين

كيف تقيّم تجربتك مع Python؟

حديث متوسط بارع

كيف تقيّم تجربتك مع خدمات Google Cloud؟

حديث متوسط بارع

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

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

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

fbef9caa1602edd0.png

a99b7ace416376c4.png

5e3ff691252acf41.png

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

بدء Cloud Shell

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

تفعيل Cloud Shell

  1. من Cloud Console، انقر على تفعيل Cloud Shell 853e55310c205094.png.

3c1dabeca90e44e5.png

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

9c92662c6a846a5c.png

من المفترَض أن تستغرق عملية إدارة الحسابات والاتصال بخدمة Cloud Shell بضع دقائق فقط.

9f0e51b578fecce5.png

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

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

  1. شغِّل الأمر التالي في 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`
  1. شغّل الأمر التالي في 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 في حزمة SDK على السحابة الإلكترونية أو الأدوات الأخرى المتاحة على مثيل الجهاز الافتراضي. يمكنك استخدام دليل $HOME في مساحة تخزين دائمة على القرص لتخزين الملفات في مختلف المشاريع وبين جلسات Cloud Shell. دليل $HOME خاص بك ولا يمكن للمستخدمين الآخرين الوصول إليه.

لنبدأ بإنشاء مجلد جديد في دليل $HOME للتطبيق:

mkdir ~/helloworld
cd ~/helloworld

إنشاء ملف باسم main.py:

touch main.py

عدِّل الملف باستخدام مُحرِّر سطر الأوامر المفضَّل لديك (nano أو vim أو emacs) أو من خلال النقر على زر Cloud Shell Editor:

10af7b1a6240e9f4.gif

لتعديل الملف مباشرةً باستخدام محرِّر 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.

من الوحدة الطرفية، أنشِئ ملف 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)")

يمكنك اختبار تطبيق الويب باستخدام طلب HTTP GET البسيط هذا:

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)

أعِد النشر من الوحدة الطرفية لتحديث تطبيق الويب:

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!

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

الترخيص

هذا العمل مرخّص بموجب رخصة المشاع الإبداعي 2.0 مع نسب العمل إلى مؤلف عام.