التشغيل السريع: نشر تطبيق ويب Python (Django أو Flask أو FastAPI) على Azure App Service

إشعار

بدءا من 1 يونيو 2024، سيكون لجميع تطبيقات App Service التي تم إنشاؤها حديثا خيار إنشاء اسم مضيف افتراضي فريد باستخدام اصطلاح <app-name>-<random-hash>.<region>.azurewebsites.netالتسمية . ستظل أسماء التطبيقات الحالية دون تغيير.

مثال: myapp-ds27dh7271aah175.westus-01.azurewebsites.net

لمزيد من التفاصيل، راجع اسم المضيف الافتراضي الفريد لمورد App Service.

في هذا التشغيل السريع، يمكنك نشر تطبيق ويب Python (Django أو Flask أو FastAPI) إلى Azure App Service. Azure App Service هي خدمة استضافة ويب مدارة بالكامل تدعم تطبيقات Python المستضافة في بيئة خادم Linux.

للتشغيل السريع، تحتاج إلى:

إشعار

تحتوي هذه المقالة على إرشادات حالية حول نشر تطبيق ويب Python باستخدام Azure App Service. لم يعد Python على Windows مدعومًا.

عينات التطبيقات

يمكن إكمال هذا التشغيل السريع باستخدام إما Flask أو Django أو FastAPI. يتم توفير نموذج تطبيق في كل إطار عمل لمساعدتك على المتابعة مع هذا التشغيل السريع. قم بتنزيل أو استنساخ نموذج التطبيق إلى محطة العمل المحلية الخاصة بك.

git clone https://github.com/Azure-Samples/msdocs-python-flask-webapp-quickstart

لتشغيل التطبيق محليًا:

  1. انتقل إلى مجلد التطبيق:

    cd msdocs-python-flask-webapp-quickstart
    
  2. إنشاء بيئة ظـاهرية للتطبيق:

    py -m venv .venv
    .venv\scripts\activate
    
  3. تثبيت تأمينات التشغيل:

    pip install -r requirements.txt
    
  4. تشغيل التطبيق:

    flask run
    
  5. استعرض للوصول إلى نموذج التطبيق في http://localhost:5000 في مستعرض ويب.

    لقطة شاشة لتطبيق Flask يعمل محليًا في مستعرض

هل تواجه مشكلات؟ أبلغنا بها.

إنشاء تطبيق ويب في Azure

لاستضافة التطبيق الخاص بك في Azure، تحتاج إلى إنشاء تطبيق ويب Azure App Service في Azure. يمكنك إنشاء تطبيق ويب باستخدام Azure CLI أو VS Code أو حزمة ملحق Azure Tools أو مدخل Microsoft Azure.

يمكن تشغيل أوامر Azure CLI على جهاز كمبيوتر مثبتة عليه Azure CLI.

تحتوي واجهة سطر الأوامر في Azure على أمر az webapp up ينشئ الموارد اللازمة ويوزع تطبيقك في خطوة واحدة.

إذا لزم الأمر، قم بتسجيل الدخول إلى Azure باستخدام az login.

az login

أنشئ تطبيق الويب والموارد الأخرى، ثم انشر التعليمات البرمجية الخاصة بك إلى Azure باستخدام az webapp up.

az webapp up --runtime PYTHON:3.9 --sku B1 --logs
  • تحدد المعلمة --runtime إصدار Python الذي يعمل عليه تطبيقك. يـستخدم هذا المثال Python 3.9. لسرد جميع أوقات التشغيل المُتوفرة، استخدم الأمر az webapp list-runtimes --os linux --output table.
  • تحدد المعلمة --sku الحجم (وحدة المعالجة المركزية والذاكرة) وتكلفة خطة خدمة التطبيق. يستخدم هذا المثال خطة خدمة B1 (الأساسية)، والتي سوف تتحمل تكلفة صغيرة في اشتراك Azure الخاص بك. للحصول على قائمة كاملة بخطط App Service، اعرض صفحة تسعير App Service.
  • تقوم العلامة --logs بتكوين التسجيل الافتراضي المطلوب لتمكين عرض دفق السجل مباشرة بعد تشغيل تطبيق الويب.
  • يمكنك اختياريًا تحديد اسم باستخدام الوسيطة --name <app-name>. إذا لم توفر اسمًا، فسوف يُنشأ اسم تلقائيًا.
  • يمكنك تضمين اختياريا حجة --location <location-name>حيث<location_name> هو المنطقة Azure المتاحة. يمكنك استرداد قائمة المناطق المسموح بها لحساب Azure الخاص بك عن طريق تشغيل الأمر az appservice list-locations.

قد يستغرق الأمر بضع دقائق حتى يكتمل. في أثناء تشغيل الأمر، فإنه يوفر رسائل حول إنشاء مجموعة الموارد وخطة App Service ومورد التطبيق وتكوين التسجيل والقيام بنشر ZIP. ثم يعطي الرسالة، "يمكنك تشغيل التطبيق على http://<app-name>.azurewebsites.net"، وهو عنوان URL للتطبيق على Azure.

The webapp '<app-name>' doesn't exist
Creating Resource group '<group-name>' ...
Resource group creation complete
Creating AppServicePlan '<app-service-plan-name>' ...
Creating webapp '<app-name>' ...
Configuring default logging for the app, if not already enabled
Creating zip with contents of dir /home/cephas/myExpressApp ...
Getting scm site credentials for zip deployment
Starting zip deployment. This operation can take a while to complete ...
Deployment endpoint responded with status code 202
You can launch the app at http://<app-name>.azurewebsites.net
{
  "URL": "http://<app-name>.azurewebsites.net",
  "appserviceplan": "<app-service-plan-name>",
  "location": "centralus",
  "name": "<app-name>",
  "os": "<os-type>",
  "resourcegroup": "<group-name>",
  "runtime_version": "python|3.9",
  "runtime_version_detected": "0.0",
  "sku": "FREE",
  "src_path": "<your-folder-location>"
}

إشعار

يقومaz webapp upالأمر بالإجراءات التالية:

  • إنشاء مجموعة موارد⁩ افتراضية.

  • إنشاء خطة App Service افتراضية.

  • إنشاء تطبيق بالاسم المحدد.

  • توزيع كل الملفات مضغوطة من دليل المشغّل الحالي، مع تمكين أتمتة الإصدار.

  • قم بتخزين المعلمات مؤقتًا محليًا في ملف .azure/config بحيث لا تحتاج إلى تحديدها مرة أخرى عند النشر لاحقًا باستخدام az webapp up أو أوامر az webapp الأخرى من مجلد المشروع. يتم استخدام القيم المخزنة مؤقتاً تلقائياً بشكل افتراضي.

هل تواجه مشكلات؟ أبلغنا بها.

نشر التعليمات البرمجية للتطبيق الخاص بك إلى Azure

تدعم Azure App Service أساليب متعددة لنشر التعليمات البرمجية للتطبيق الخاص بك إلى Azure، بما في ذلك إجراءات GitHub وجميع أدوات CI/CD الرئيسية. تركز هذه المقالة على كيفية نشر التعليمات البرمجية من محطة العمل المَحلية إلى Azure.

az webapp up نظرا لأن الأمر أنشأ الموارد الضرورية ووزع التطبيق الخاص بك في خطوة واحدة، يمكنك الانتقال إلى الخطوة التالية.


هل تواجه مشكلات؟ راجع أولا دليل استكشاف الأخطاء وإصلاحها. إذا لم يساعد ذلك، فقم بإعلامنا.

تكوين البرنامج النصي لبدء التشغيل

استنادا إلى وجود ملفات معينة في عملية نشر، تكتشف App Service تلقائيا ما إذا كان التطبيق هو تطبيق Django أو Flask وتنفذ الخطوات الافتراضية لتشغيل تطبيقك. بالنسبة للتطبيقات المستندة إلى أطر عمل الويب الأخرى مثل FastAPI، تحتاج إلى تكوين برنامج نصي لبدء التشغيل لخدمة التطبيقات لتشغيل تطبيقك؛ وإلا، تقوم App Service بتشغيل تطبيق افتراضي للقراءة فقط موجود في مجلد opt/defaultsite .

لمعرفة المزيد حول كيفية تشغيل App Service لتطبيقات Python وكيفية تكوين سلوكها وتخصيصه مع تطبيقك، راجع تكوين تطبيق Linux Python لخدمة تطبيقات Azure.

تكتشف App Service تلقائيا وجود تطبيق Flask. لا يلزم تكوين إضافي لبدء التشغيل السريع هذا.

استعرض التطبيق

استعرض للوصول إلى التطبيق المنشور في مستعرض الويب الخاص بك باستخدام عنوان URL http://<app-name>.azurewebsites.net. إذا رأيت صفحة تطبيق افتراضية، فانتظر دقيقة وقم بتحديث المستعرض.

يقوم نموذج كود Python بتشغيل حاوية Linux في خدمة التطبيقات باستخدام صورة مضمنة.

لقطة شاشة للتطبيق قيد التشغيل في Azure

تهانينا! لقد قمت بنشر تطبيق Python الخاص بك في خدمة التطبيقات.

هل تواجه مشكلات؟ راجع أولا دليل استكشاف الأخطاء وإصلاحها. إذا لم يساعد ذلك، فقم بإعلامنا.

سجلات التدفق

تسجل Azure App Service جميع مخرجات الرسائل إلى وحدة التحكم لمساعدتك في تشخيص المشكلات المتعلقة بتطبيقك. تتضمن نماذج التطبيقات عبارات print() لتوضيح هذه الإمكانية.

@app.route('/')
def index():
   print('Request for index page received')
   return render_template('index.html')

@app.route('/favicon.ico')
def favicon():
    return send_from_directory(os.path.join(app.root_path, 'static'),
                               'favicon.ico', mimetype='image/vnd.microsoft.icon')

@app.route('/hello', methods=['POST'])
def hello():
   name = request.form.get('name')

   if name:
       print('Request for hello page received with name=%s' % name)
       return render_template('hello.html', name = name)
   else:
       print('Request for hello page received with no name or blank name -- redirecting')
       return redirect(url_for('index'))

يمكنك مراجعة محتويات سجلات تشخيص App Service باستخدام Azure CLI أو VS Code أو مدخل Microsoft Azure.

أولا، تحتاج إلى تكوين Azure App Service لإخراج السجلات إلى نظام ملفات App Service باستخدام الأمر az webapp log config .

az webapp log config \
    --web-server-logging filesystem \
    --name $APP_SERVICE_NAME \
    --resource-group $RESOURCE_GROUP_NAME

لدفق السجلات، استخدم الأمر az webapp log tail.

az webapp log tail \
    --name $APP_SERVICE_NAME \
    --resource-group $RESOURCE_GROUP_NAME

تحديث الصفحة الرئيسية في التطبيق أو مُحاولة طلبات أخرى لإنشاء بعض رسائل السجل. يجب أن يبدو الإخراج مشابهًا لما يلي.

Starting Live Log Stream ---

2021-12-23T02:15:52.740703322Z Request for index page received
2021-12-23T02:15:52.740740222Z 169.254.130.1 - - [23/Dec/2021:02:15:52 +0000] "GET / HTTP/1.1" 200 1360 "https://msdocs-python-webapp-quickstart-123.azurewebsites.net/hello" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:95.0) Gecko/20100101 Firefox/95.0"
2021-12-23T02:15:52.841043070Z 169.254.130.1 - - [23/Dec/2021:02:15:52 +0000] "GET /static/bootstrap/css/bootstrap.min.css HTTP/1.1" 200 0 "https://msdocs-python-webapp-quickstart-123.azurewebsites.net/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:95.0) Gecko/20100101 Firefox/95.0"
2021-12-23T02:15:52.884541951Z 169.254.130.1 - - [23/Dec/2021:02:15:52 +0000] "GET /static/images/azure-icon.svg HTTP/1.1" 200 0 "https://msdocs-python-webapp-quickstart-123.azurewebsites.net/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:95.0) Gecko/20100101 Firefox/95.0"
2021-12-23T02:15:53.043211176Z 169.254.130.1 - - [23/Dec/2021:02:15:53 +0000] "GET /favicon.ico HTTP/1.1" 404 232 "https://msdocs-python-webapp-quickstart-123.azurewebsites.net/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:95.0) Gecko/20100101 Firefox/95.0"

2021-12-23T02:16:01.304306845Z Request for hello page received with name=David
2021-12-23T02:16:01.304335945Z 169.254.130.1 - - [23/Dec/2021:02:16:01 +0000] "POST /hello HTTP/1.1" 200 695 "https://msdocs-python-webapp-quickstart-123.azurewebsites.net/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:95.0) Gecko/20100101 Firefox/95.0"
2021-12-23T02:16:01.398399251Z 169.254.130.1 - - [23/Dec/2021:02:16:01 +0000] "GET /static/bootstrap/css/bootstrap.min.css HTTP/1.1" 304 0 "https://msdocs-python-webapp-quickstart-123.azurewebsites.net/hello" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:95.0) Gecko/20100101 Firefox/95.0"
2021-12-23T02:16:01.430740060Z 169.254.130.1 - - [23/Dec/2021:02:16:01 +0000] "GET /static/images/azure-icon.svg HTTP/1.1" 304 0 "https://msdocs-python-webapp-quickstart-123.azurewebsites.net/hello" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:95.0) Gecko/20100101 Firefox/95.0"

هل تواجه مشكلات؟ راجع أولا دليل استكشاف الأخطاء وإصلاحها. إذا لم يساعد ذلك، فقم بإعلامنا.

تنظيف الموارد

عند الانتهاء من عينة التطبيق، يمكنك إزالة جميع الموارد الخاصة بالتطبيق من Azure. تضمن إزالة مجموعة الموارد أنك لا تتحمل رسوما إضافية وتساعد في الحفاظ على اشتراك Azure الخاص بك غير مزدحم. تؤدي إزالة مَجموعة الموارد أيضا إلى إزالة جميع الموارد في مجموعة الموارد وهي أسرع طريقة لإزالة جميع موارد Azure لتطبيقك.

احذف مجموعة موارد باستخدام أمر az group delete.

az group delete \
    --name msdocs-python-webapp-quickstart \
    --no-wait

تسمح الوسيطة --no-wait للأمر بالعودة قبل اكتمال العملية.

هل تواجه مشكلات؟ أبلغنا بها.

الخطوات التالية