1. مقدمة
Cloud Run هي منصة حوسبة مُدارة تتيح لك تشغيل حاويات لا تتضمّن حالة ويمكن استدعاؤها باستخدام طلبات HTTP. وهي تستند إلى مشروع Knative المفتوح المصدر، ما يتيح إمكانية نقل أحمال العمل على مستوى المنصات. Cloud Run هي خدمة بدون خادم: فهي تجرّد جميع مهام إدارة البنية الأساسية، ما يتيح لك التركيز على أهم ما في الأمر، وهو إنشاء تطبيقات رائعة.
الهدف من هذا البرنامج التعليمي هو إنشاء تطبيق ويب Streamlit "Hello World" ونشره على Cloud Run.
أهداف الدورة التعليمية
- كيفية إنشاء تطبيق "Hello World" باستخدام Streamlit
- اختبار التطبيق من خلال تشغيل تطبيق Streamlit قبل نشره
- حِزم البناء المستندة إلى السحابة الإلكترونية وكيفية عدم الحاجة إلى ملف Dockerfile عند توفّر
streamlit
فيrequirements.txt
- كيفية نشر تطبيق Streamlit على Cloud Run
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، فعِّل واجهات برمجة التطبيقات Artifact Registry وCloud Build وCloud Run:
gcloud services enable \
artifactregistry.googleapis.com \
cloudbuild.googleapis.com \
run.googleapis.com
سيؤدي ذلك إلى عرض رسالة نجاح مشابهة لما يلي:
Operation "operations/..." finished successfully.
الآن، أنت مستعد لبدء العمل وكتابة طلبك...
4. كتابة الطلب
في هذه الخطوة، ستنشئ تطبيق Streamlit Python "Hello World" الذي يستجيب لطلبات HTTP.
دليل العمل
استخدِم Cloud Shell لإنشاء دليل عمل باسم helloworld-streamlit
والتبديل إليه:
mkdir ~/helloworld-streamlit && cd ~/helloworld-streamlit
main.py
أنشئ ملفًا باسم main.py
:
touch main.py
عدِّل الملف باستخدام محرّر سطر الأوامر المفضّل لديك (nano أو vim أو emacs) أو من خلال النقر على الزر "محرّر Cloud Shell":
لتعديل الملف مباشرةً باستخدام "محرّر Cloud Shell"، استخدِم الأمر التالي:
cloudshell edit main.py
main.py
import streamlit as st
st.title("Hello World! 👋🌎")
st.markdown(
"""
This is a demo Streamlit app.
Enter your name in the text box below and press a button to see some fun features in Streamlit.
"""
)
name = st.text_input("Enter your name:")
# Use columns to create buttons side by side
col1, col2 = st.columns(2)
with col1:
if st.button("Send balloons! 🎈"):
st.balloons()
st.write(f"Time to celebrate {name}! 🥳")
st.write("You deployed a Streamlit app! 👏")
with col2:
if st.button("Send snow! ❄️"):
st.snow()
st.write(f"Let it snow {name}! 🌨️")
st.write("You deployed a Streamlit app! 👏")
ينشئ هذا الرمز خدمة ويب أساسية تستجيب لطلبات HTTP GET برسالة سهلة الاستخدام.
requirements.txt
أعِد فتح نافذة الوحدة الطرفية وأضِف ملفًا باسم requirements.txt
لتحديد التبعيات:
touch requirements.txt
لتعديل الملف مباشرةً باستخدام "محرّر Cloud Shell"، استخدِم الأمر التالي:
cloudshell edit requirements.txt
requirements.txt
# https://pypi.org/project/streamlit
streamlit==1.47.0
التطبيق Streamlit جاهز للنشر، ولكن لنختبره أولاً...
5- اختبار التطبيق
لاختبار التطبيق، استخدِم uv (مدير الحِزم والمشاريع السريع للغاية في Python) الذي يأتي مثبّتًا مسبقًا في Cloud Shell.
لاختبار التطبيق، أنشئ بيئة افتراضية:
uv venv
ثبِّت التبعيات:
uv pip install -r requirements.txt
ابدأ تشغيل التطبيق باستخدام streamlit run
(مع إيقاف --server.enableCORS
للاختبار لأنّه يتعارض مع Cloud Shell):
uv run streamlit run main.py --server.port=8080 --server.enableCORS=false
ستوضّح السجلات أنّ تطبيق Streamlit قيد التشغيل:
You can now view your Streamlit app in your browser. Local URL: http://localhost:8080 Network URL: http://10.1.0.1:8080 External URL: http://34.37.7.94:8080
في نافذة Cloud Shell، انقر على الرمز Web Preview
واختَر Preview on port 8080
:
من المفترض أن يؤدي ذلك إلى فتح نافذة متصفّح تعرض العنوان Hello World! 👋🌎
.
جرِّب ملء اسمك واختبار الزرّين الظاهرين على الشاشة.
عند الانتهاء، ارجع إلى جلسة Cloud Shell الرئيسية وأوقِف تطبيق Streamlit باستخدام CTRL+C
.
يعمل التطبيق على النحو المتوقّع: حان وقت نشره...
6. النشر على Cloud Run
تتوفّر خدمة Cloud Run على مستوى المنطقة، ما يعني أنّ البنية الأساسية التي تشغّل خدمات Cloud Run تقع في منطقة معيّنة وتديرها Google لتكون متاحة بشكل متكرّر في جميع المناطق داخل تلك المنطقة. حدِّد المنطقة التي ستستخدمها للنشر، على سبيل المثال:
REGION=europe-west1
تأكَّد من أنّك لا تزال في دليل العمل:
ls
يجب أن تتضمّن هذه القائمة الملفات التالية:
main.py requirements.txt
قبل النشر، أنشئ ملف .gcloudignore
يتضمّن .venv/
. يمنع هذا الأمر نشر Cloud Run من تضمين البيئة الافتراضية التي تم إنشاؤها من uv
أثناء الاختبار المحلي.
أنشئ .gcloudignore
باستخدام الأمر التالي:
echo ".venv/" > .gcloudignore
انشر التطبيق على Cloud Run:
gcloud run deploy helloworld-streamlit \
--source . \
--region $REGION \
--allow-unauthenticated
- يؤدي الخيار
--allow-unauthenticated
إلى إتاحة الخدمة للجميع. لتجنُّب الطلبات غير المصادَق عليها، استخدِم--no-allow-unauthenticated
بدلاً من ذلك.
في المرة الأولى، ستتلقّى طلبًا بإنشاء مستودع Artifact Registry. انقر على Enter
للتحقّق من صحة المعلومات:
Deploying from source requires an Artifact Registry Docker repository to store built containers. A repository named [cloud-run-source-deploy] in region [REGION] will be created. Do you want to continue (Y/n)?
يؤدي هذا إلى بدء عملية تحميل رمز المصدر إلى مستودع Artifact Registry وإنشاء صورة الحاوية:
Building using Buildpacks and deploying container ... * Building and deploying new service... Building Container. OK Creating Container Repository... OK Uploading sources... * Building Container... Logs are available at ...
بعد ذلك، انتظِر لحظة حتى يكتمل النشر. عند النجاح، يعرض سطر الأوامر عنوان URL للخدمة:
... OK Building and deploying new service... Done. OK Creating Container Repository... OK Uploading sources... OK Building Container... Logs are available at ... OK Creating Revision... Creating Service. OK Routing traffic... OK Setting IAM Policy... Done. Service [SERVICE]... has been deployed and is serving 100 percent of traffic. Service URL: https://SERVICE-PROJECTHASH-REGIONID.a.run.app
يمكنك الحصول على عنوان URL للخدمة باستخدام الأمر التالي:
SERVICE_URL=$( \
gcloud run services describe helloworld-streamlit \
--region $REGION \
--format "value(status.address.url)" \
)
echo $SERVICE_URL
يُفترض أن يظهر ما يلي:
https://helloworld-streamlit-PROJECTHASH-REGIONID.a.run.app
يمكنك الآن استخدام تطبيقك من خلال فتح عنوان URL للخدمة في متصفّح ويب:
تهانينا! لقد نشرت للتو تطبيقًا على Cloud Run. يزيد Cloud Run تلقائيًا وبشكل أفقي حجم صورة الحاوية للتعامل مع الطلبات المستلَمة، ثم يقلّل حجمها عند انخفاض الطلب. لن تدفع إلا مقابل وحدة المعالجة المركزية والذاكرة والشبكات المستخدَمة أثناء معالجة الطلبات لهذه الخدمة على Cloud Run.
7. تَنظيم
على الرغم من أنّ Cloud Run لا يفرض رسومًا عندما لا تكون الخدمة قيد الاستخدام، قد يتم تحصيل رسوم منك مقابل تخزين صورة الحاوية في Artifact Registry. يمكنك حذف المستودع أو حذف مشروعك على Cloud لتجنُّب تحمّل رسوم. يؤدي حذف مشروعك على السحابة الإلكترونية إلى إيقاف الفوترة لجميع الموارد المستخدَمة في هذا المشروع.
لحذف مستودع صور الحاويات، اتّبِع الخطوات التالية:
gcloud artifacts repositories delete cloud-run-source-deploy \
--location $REGION
لحذف خدمة Cloud Run، اتّبِع الخطوات التالية:
gcloud run services delete helloworld-streamlit \
--region $REGION
لحذف مشروعك على Google Cloud، اتّبِع الخطوات التالية:
- استرداد رقم تعريف مشروعك الحالي:
PROJECT_ID=$(gcloud config get-value core/project)
- تأكَّد من أنّ هذا هو المشروع الذي تريد حذفه:
echo $PROJECT_ID
- لحذف المشروع، اتّبِع الخطوات التالية:
gcloud projects delete $PROJECT_ID
8. تهانينا!
لقد أنشأت تطبيق ويب "Hello World" باستخدام Streamlit ونشرته على Cloud Run.
المواضيع التي تناولناها
- كيفية إنشاء تطبيق "Hello World" باستخدام Streamlit
- اختبار التطبيق من خلال تشغيل تطبيق Streamlit قبل نشره
- حِزم البناء المستندة إلى السحابة الإلكترونية وكيفية عدم الحاجة إلى ملف Dockerfile عند توفّر
streamlit
فيrequirements.txt
- نشر تطبيق Streamlit على Cloud Run
مزيد من المعلومات
- يمكنك الاطّلاع على مستندات Cloud Run.
- أكمِل عملية النقل من مرحلة التطوير إلى مرحلة الإنتاج في ثلاث خطوات سهلة باستخدام Cloud Run لاستكشاف المزيد من الخيارات.
- أكمِل Django على Cloud Run لإنشاء قاعدة بيانات Cloud SQL وإدارة بيانات الاعتماد باستخدام Secret Manager ونشر Django.
- اطّلِع على المزيد من الدروس التطبيقية حول الترميز في Cloud Run...