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
- كيفية تحديث الرمز بدون إيقاف الخادم
المتطلبات
- الإلمام باستخدام بايثون
- دراية بأدوات تحرير النصوص العادية في 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
في حزمة SDK على السحابة الإلكترونية أو الأدوات الأخرى المتاحة على مثيل الجهاز الافتراضي. يمكنك استخدام دليل $HOME
في مساحة تخزين دائمة على القرص لتخزين الملفات في مختلف المشاريع وبين جلسات Cloud Shell. دليل $HOME
خاص بك ولا يمكن للمستخدمين الآخرين الوصول إليه.
لنبدأ بإنشاء مجلد جديد في دليل $HOME
للتطبيق:
mkdir ~/helloworld cd ~/helloworld
إنشاء ملف باسم main.py
:
touch main.py
عدِّل الملف باستخدام مُحرِّر سطر الأوامر المفضَّل لديك (nano أو vim أو emacs) أو من خلال النقر على زر Cloud Shell Editor:
لتعديل الملف مباشرةً باستخدام محرِّر 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!
مزيد من المعلومات
- وثائق App Engine: https://cloud.google.com/appengine
- يمكنك الاطّلاع على هذا البرنامج التعليمي لكتابة تطبيق Python كامل على App Engine: https://cloud.google.com/appengine/docs/standard/python3/building-app
الترخيص
هذا العمل مرخّص بموجب رخصة المشاع الإبداعي 2.0 مع نسب العمل إلى مؤلف عام.