تشغيل تطبيقك في Azure App Service مباشرة من حزمة ZIP

في Azure App Service، يمكنك تشغيل تطبيقاتك مباشرة من ملف حزمة ZIP للتوزيع. توضح هذه المقالة كيفية تمكين هذه الوظيفة في تطبيق الوظائف الخاص بك.

تشترك جميع أساليب النشر الأخرى في App Service في شيء مشترك: يتم نشر ملفاتك في D:\home\site\wwwroot في تطبيقك (أو /home/site/wwwroot لتطبيقات Linux). نظرًا إلى أن نفس الدليل يستخدمه التطبيق في وقت التشغيل، فمن الممكن أن يفشل النشر بسبب تعارضات تأمين الملفات، وأن يتصرف التطبيق بشكل غير متوقع لأن بعض الملفات لم يتم تحديثها بعد.

في المقابل، عند التشغيل مباشرة من حزمة، لا يتم نسخ الملفات الموجودة في الحزمة إلى دليل wwwroot . بدلاً من ذلك، يتم تحميل حزمة ZIP نفسها مباشرة كدليل wwwroot للقراءة فقط. هناك العديد من الفوائد للتشغيل من ملف حزمة:

  • إزالة تعارضات قفل الملف بين النشر ووقت التشغيل.
  • ضمان تشغيل التطبيقات المنشورة بالكامل فقط في أي وقت.
  • يمكن توزيعها في تطبيق إنتاج (مع إعادة التشغيل).
  • تحسين أداء عمليات توزيع Azure Resource Manager.
  • قد يقلل من أوقات البدء الباردة، وخاصة بالنسبة إلى وظائف JavaScript مع أشجار حزمة npm كبيرة.

إشعار

حاليًا، يتم دعم ملفات الحزمة ZIP فقط.

إنشاء حزمة ZIP للمشروع

هام

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

في نافذة طرفية محلية، انتقل إلى الدليل الجذر لمشروع التطبيق الخاص بك.

يجب أن يحتوي الدليل على ملف الإدخال إلى تطبيق الويب، مثل index.html وindex.php وapp.js. يمكن أن يحتوي أيضًا على ملفات إدارة حزمة مثل project.json، وcomposer.json، وpackage.json، وbower.json، وrequirements.txt.

إذا لم تريد أن تشغل خدمة التطبيقات أتمتة النشر لك، فقم بتشغيل كافة مهام البنية (على سبيل المثال، npm وbower وgulp وcomposer وpip) وتأكد من أن لديك كل الملفات التي تحتاجها لتشغيل التطبيق. هذه الخطوة مطلوبة إذا كنت تريد تشغيل حزمتك مباشرة.

أنشئ أرشيف ZIP من كل شيء في المشروع الخاص بك. بالنسبة dotnet للمشاريع، هذا هو كل شيء في دليل dotnet publish الإخراج للأمر (باستثناء دليل الإخراج نفسه). على سبيل المثال، الأمر التالي في المحطة الطرفية لإنشاء حزمة ZIP لمحتويات الدليل الحالي:

# Bash
zip -r <file-name>.zip .

# PowerShell
Compress-Archive -Path * -DestinationPath <file-name>.zip

تمكين التشغيل من الحزمة

يتيح إعداد التطبيق WEBSITE_RUN_FROM_PACKAGE التشغيل من حزمة. لتعيينه، قم بتشغيل الأمر التالي باستخدام Azure CLI.

az webapp config appsettings set --resource-group <group-name> --name <app-name> --settings WEBSITE_RUN_FROM_PACKAGE="1"

يتيح لك WEBSITE_RUN_FROM_PACKAGE="1" تشغيل تطبيقك من حزمة محلية إلى تطبيقك. يمكنك أيضًا التشغيل من حزمة بعيدة.

تشغيل الحزمة

أسهل طريقة لتشغيل حزمة في خدمة التطبيقات الخاصة بك هي باستخدام الأمر Azure CLI az webapp deployment source config-zip. على سبيل المثال:

az webapp deployment source config-zip --resource-group <group-name> --name <app-name> --src <filename>.zip

نظرًا إلى تعيين إعداد التطبيق WEBSITE_RUN_FROM_PACKAGE، لا يستخرج هذا الأمر محتوى الحزمة إلى الدليل D:\home\site\wwwroot لتطبيقك. بدلاً من ذلك، يقوم بتحميل ملف ZIP كما هو إلى D:\home\data\SitePackages، وينشئ packagename.txt في نفس الدليل، الذي يحتوي على اسم الحزمة ZIP لتحميلها في وقت التشغيل. إذا قمت بتحميل حزمة ZIP بطريقة مختلفة (مثل FTP)، فستحتاج إلى إنشاء الدليل D:\home\data\SitePackages وملف packagename.txt يدويًا.

يقوم الأمر أيضًا بإعادة تشغيل التطبيق. نظرًا إلى تعيينها WEBSITE_RUN_FROM_PACKAGE، تقوم App Service بتحميل الحزمة التي تم تحميلها كدليل wwwroot للقراءة فقط وتشغيل التطبيق مباشرة من هذا الدليل المحمل.

تشغيل من عنوان URL الخارجي بدلاً من ذلك

يمكنك أيضًا تشغيل حزمة من عنوان URL خارجي، مثل Azure Blob Storage. بمجرد استخدام Azure Storage Explorer لتحميل ملفات الحزم إلى حساب تخزين كائن ثنائي كبير الحجم الخاص بك. ينبغي استخدام حاوية خاصة قوية مع توقيع الوصول المشترك (SAS) أو استخدام هوية مدارة لتمكين وقت تشغيل الوظائف للوصول إلى الحزمة.

بمجرد تحميل الملف إلى تخزين كائن ثنائي كبير الحجم والحصول على عنوان ويب لتوقيع الوصول المشترك (SAS) للملف، قم بتعيين إعداد التطبيق WEBSITE_RUN_FROM_PACKAGE إلى عنوان URL. يستخدم المثال التالي Azure CLI:

az webapp config appsettings set --name <app-name> --resource-group <resource-group-name> --settings WEBSITE_RUN_FROM_PACKAGE="https://myblobstorage.blob.core.windows.net/content/SampleCoreMVCApp.zip?st=2018-02-13T09%3A48%3A00Z&se=2044-06-14T09%3A48%3A00Z&sp=rl&sv=2017-04-17&sr=b&sig=bNrVrEFzRHQB17GFJ7boEanetyJ9DGwBSV8OM3Mdh%2FM%3D"

إذا قمت بنشر حزمة محدثة بنفس الاسم إلى تخزين كائن ثنائي كبير الحجم، فستحتاج إلى إعادة تشغيل التطبيق بحيث يتم تحميل الحزمة المحدثة في App Service.

الوصول إلى حزمة في Azure Blob Storage باستخدام هوية مدارة

يمكن تكوين Azure Blob Storage لتخويل الطلبات باستخدام معرف Microsoft Entra. وهذا يعني أنه بدلاً من إنشاء مفتاح SAS مع انتهاء الصلاحية، يمكنك بدلاً من ذلك الاعتماد على الهوية المدارة للتطبيق. بشكل افتراضي، سيتم استخدام الهوية المعيّنة من قبل النظام للتطبيق. إذا كنت ترغب في تحديد هوية معيّنة من قبل المستخدم، يمكنك ضبط إعداد التطبيق WEBSITE_RUN_FROM_PACKAGE_BLOB_MI_RESOURCE_ID على معرّف المورد لتلك الهوية. يمكن أن يقبل الإعداد أيضًا "SystemAssigned" كقيمة، على الرغم من أن هذا مثل حذف الإعداد تمامًا.

لتمكين إحضار الحزمة باستخدام الهوية:

  1. تأكد من تكوين الكائن الثنائي كبير الحجم للوصول الخاص.

  2. امنح الهوية دور قارئ بيانات كائن ثنائي كبير الحجم للتخزين مع نطاق عبر الكائن الثنائي كبير الحجم للحزمة. راجع تعيين دور Azure للوصول إلى بيانات الكائن الثنائي كبير الحجم للحصول على تفاصيل حول إنشاء تعيين الدور.

  3. قم بتعيين إعداد التطبيق WEBSITE_RUN_FROM_PACKAGE إلى عنوان URL للكائن الثنائي كبير الحجم للحزمة. من المحتمل أن يكون هذا من النموذج "https://{storage-account-name}.blob.core.windows.net/{container-name}/{path-to-package}" أو ما شابه ذلك.

نشر ملفات WebJob عند التشغيل من الحزمة

هناك طريقتان لنشر ملفات WebJob عند تمكين تشغيل تطبيق من الحزمة:

  • النشر في حزمة ZIP نفسها مثل تطبيقك: قم بتضمينها كما تفعل عادة في <project-root>\app_data\jobs\... (الذي يعين إلى مسار \site\wwwroot\app_data\jobs\... النشر كما هو محدد في التشغيل السريع WebJobs).
  • النشر بشكل منفصل عن حزمة ZIP لتطبيقك: نظرا لأن مسار \site\wwwroot\app_data\jobs\... النشر المعتاد أصبح الآن للقراءة فقط، فلا يمكنك نشر ملفات WebJob هناك. بدلا من ذلك، قم بنشر ملفات WebJob إلى \site\jobs\...، والتي لا تتم قراءتها فقط. WebJobs التي تم نشرها إلى \site\wwwroot\app_data\jobs\... وكلاهما \site\jobs\... يعمل.

إشعار

عندما \site\wwwroot تصبح للقراءة فقط، ستفشل عمليات مثل إنشاء disable.job .

استكشاف الأخطاء وإصلاحها

  • التشغيل مباشرة من حزمة يجعل wwwroot للقراءة فقط. سيتلقى تطبيقك خطأ إذا حاول كتابة الملفات إلى هذا الدليل.
  • تنسيقات TAR وGZIP غير مدعومة.
  • يمكن أن يكون الملف ZIP على الأكثر 1 جيجابايت.
  • هذه الميزة غير متوافقة مع ذاكرة التخزين المؤقت المحلية.
  • لأداء التشغيل البارد المحسن، استخدم خيار Zip المحلي (WEBSITE_RUN_FROM_PACKAGE=1).

موارد إضافية