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

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

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

إشعار

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

1 - نـموذج التطبيق

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

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 في مستعرض ويب.

    Screenshot of the Flask app running locally in a browser

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

2 - إنشاء تَطبيق ويب في 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 account 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 الأخرى من مجلد المشروع. يتم استخدام القيم المخزنة مؤقتاً تلقائياً بشكل افتراضي.

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

3 - نشر التعليمات البرمجية للتطبيق إلى Azure

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

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


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

4 - الاستعراض وصولاً إلى التطبيق

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

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

Screenshot of the app running in Azure

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

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

5 - دفق السجلات

تلتقط خدمة 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 للأمر بالعودة قبل اكتمال العملية.

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

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