التشغيل السريع: نشر تطبيق ويب 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.
للتشغيل السريع، تحتاج إلى:
- حساب Azure مع اشتراك نشط. أنشئ حساباً مجاناً.
- تم تثبيت Python 3.9 أو إصدار أحدث محليًا.
إشعار
تحتوي هذه المقالة على إرشادات حالية حول نشر تطبيق ويب Python باستخدام Azure App Service. لم يعد Python على Windows مدعومًا.
عينات التطبيقات
يمكن إكمال هذا التشغيل السريع باستخدام إما Flask أو Django أو FastAPI. يتم توفير نموذج تطبيق في كل إطار عمل لمساعدتك على المتابعة مع هذا التشغيل السريع. قم بتنزيل أو استنساخ نموذج التطبيق إلى محطة العمل المحلية الخاصة بك.
git clone https://github.com/Azure-Samples/msdocs-python-flask-webapp-quickstart
لتشغيل التطبيق محليًا:
انتقل إلى مجلد التطبيق:
cd msdocs-python-flask-webapp-quickstart
إنشاء بيئة ظـاهرية للتطبيق:
py -m venv .venv .venv\scripts\activate
تثبيت تأمينات التشغيل:
pip install -r requirements.txt
تشغيل التطبيق:
flask run
استعرض للوصول إلى نموذج التطبيق في
http://localhost:5000
في مستعرض ويب.
هل تواجه مشكلات؟ أبلغنا بها.
إنشاء تطبيق ويب في 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 في خدمة التطبيقات باستخدام صورة مضمنة.
تهانينا! لقد قمت بنشر تطبيق 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
للأمر بالعودة قبل اكتمال العملية.
هل تواجه مشكلات؟ أبلغنا بها.