مشاركة عبر


نشر تطبيق ويب Python (Flask) باستخدام PostgreSQL في Azure

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

رسم تخطيطي للهندسة يعرض خدمة التطبيقات بقاعدة بيانات PostgreSQL في Azure.

في هذا البرنامج التعليمي، تتعلم كيفية:

  • إنشاء بنية ذاكرة التخزين المؤقت ل App Service وPostgreSQL وRedis بشكل افتراضي آمن.
  • تأمين أسرار الاتصال باستخدام هوية مدارة ومراجع Key Vault.
  • نشر نموذج تطبيق Python إلى App Service من مستودع GitHub.
  • الوصول إلى سلسلة الاتصال App Service وإعدادات التطبيق في التعليمات البرمجية للتطبيق.
  • قم بإجراء التحديثات وإعادة توزيع التعليمات البرمجية للتطبيق.
  • إنشاء مخطط قاعدة البيانات عن طريق تشغيل عمليات ترحيل قاعدة البيانات.
  • دفق سجلات التشخيص من Azure.
  • إدارة التطبيق في مدخل Microsoft Azure.
  • توفير نفس البنية والنشر باستخدام Azure Developer CLI.
  • تحسين سير عمل التطوير الخاص بك باستخدام GitHub Codespaces وGitHub Copilot.

المتطلبات الأساسية

  • حساب Azure مع اشتراك نشط. إذا لم يكن لديك حساب Azure، يمكنك إنشاء حساب مجانا.
  • تم تثبيت Azure Developer CLI . يمكنك اتباع الخطوات باستخدام Azure Cloud Shell لأنه يحتوي بالفعل على Azure Developer CLI مثبت.
  • معرفة Python مع تطوير Flask.
  • (اختياري) لتجربة GitHub Copilot، حساب GitHub Copilot. يتوفر إصدار تجريبي مجاني لمدة 30 يوما.

تخطي إلى النهاية

إذا كنت تريد فقط رؤية نموذج التطبيق في هذا البرنامج التعليمي قيد التشغيل في Azure، فما عليك سوى تشغيل الأوامر التالية في Azure Cloud Shell، واتبع المطالبة:

mkdir msdocs-flask-postgresql-sample-app
cd msdocs-flask-postgresql-sample-app
azd init --template msdocs-flask-postgresql-sample-app
azd up

1. تشغيل العينة

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

إشعار

إذا كنت تتابع هذا البرنامج التعليمي مع تطبيقك الخاص، فانظر إلى وصف ملف requirements.txt في README.md لمعرفة الحزم التي ستحتاجها.

الخطوة 1: في نافذة مستعرض جديدة:

  1. قم بتسجيل الدخول إلى حساب GitHub الخاص بك.
  2. الانتقال إلى https://github.com/Azure-Samples/msdocs-flask-postgresql-sample-app/fork.
  3. قم بإلغاء تحديد نسخ الفرع الرئيسي فقط. تريد جميع الفروع.
  4. حدد Create fork.

الخطوة 2: في نسخة GitHub:

  1. حدد main>starter-no-infra لفرع البداية. يحتوي هذا الفرع فقط على نموذج المشروع ولا يوجد ملفات أو تكوينات متعلقة ب Azure.
  2. حدد Code>Create codespace على starter-no-infra. تستغرق مساحة التعليمات البرمجية بضع دقائق لإعدادها، ويتم تشغيلها pip install -r requirements.txt لمستودعك في النهاية.

الخطوة 3: في الوحدة الطرفية لمساحة التعليمات البرمجية:

  1. تشغيل عمليات ترحيل قاعدة البيانات باستخدام flask db upgrade.
  2. شغّل التطبيق باستخدام flask run.
  3. عندما ترى الإعلام Your application running on port 5000 is available.، حدد فتح في المستعرض. يجب أن تشاهد نموذج التطبيق في علامة تبويب مستعرض جديدة. لإيقاف التطبيق، اكتب Ctrl+C.

تلميح

يمكنك أن تسأل GitHub Copilot عن هذا المستودع. على سبيل المثال:

  • @workspace ماذا يفعل هذا المشروع؟
  • @workspace ماذا يفعل المجلد .devcontainer؟

هل تواجه مشكلات؟ تحقق من قسم استكشاف الأخطاء وإصلاحها.

2. إنشاء App Service وPostgreSQL

في هذه الخطوة، يمكنك إنشاء موارد Azure. تنشئ الخطوات المستخدمة في هذا البرنامج التعليمي مجموعة من الموارد الآمنة بشكل افتراضي التي تتضمن خدمة التطبيقات وقاعدة بيانات Azure ل PostgreSQL. بالنسبة لعملية الإنشاء، يمكنك تحديد:

  • اسم تطبيق الويب. يتم استخدامه كجزء من اسم DNS لتطبيقك في شكل https://<app-name>-<hash>.<region>.azurewebsites.net.
  • المنطقة لتشغيل التطبيق فعلياً في العالم. كما يتم استخدامه كجزء من اسم DNS لتطبيقك.
  • مكدس الذاكرة المؤقتة لوقت التشغيل للتطبيق. إنه المكان الذي تحدد فيه إصدار Python لاستخدامه لتطبيقك.
  • خطة الاستضافة للتطبيق. إنها طبقة الأسعار التي تتضمن مجموعة الميزات وسعة التحجيم لتطبيقك.
  • مجموعة الموارد للتطبيق. تتيح لك مجموعة الموارد تجميع (في حاوية منطقية) جميع موارد Azure المطلوبة للتطبيق.

سجّل الدخول إلى مدخل Azure واتبع هذه الخطوات لإنشاء مورد Azure App Service.

الخطوة 1: في مدخل Microsoft Azure:

  1. أدخل "قاعدة بيانات تطبيق ويب" في شـريط البحث في أعلى مدخل Microsoft Azure.
  2. حدد العنصر المسمى تطبيق ويب + قاعدة بيانات ضمن عنوان Marketplace. يمكنك أيضا الانتقال إلى معالج الإنشاء مباشرة.

الخطوة 2: في صفحة إنشاء تطبيق ويب + قاعدة بيانات ، املأ النموذج كما يلي.

  1. Resource Group: حدد Create new واستخدم اسم msdocs-flask-postgres-tutorial.
  2. المنطقة: أي منطقة Azure قريبة منك.
  3. الاسم: msdocs-python-postgres-XYZ.
  4. مكدس وقت التشغيل: Python 3.12.
  5. قاعدة البيانات: PostgreSQL - يتم تحديد الخادم المرن افتراضيا كمحرك قاعدة البيانات. يتم أيضا تعيين اسم الخادم واسم قاعدة البيانات بشكل افتراضي إلى القيم المناسبة.
  6. إضافة ذاكرة التخزين المؤقت Azure ل Redis؟: لا.
  7. خطة الاستضافة: أساسية. عندما تكون مستعدا، يمكنك التوسع إلى مستوى تسعير الإنتاج.
  8. حدد "Review + create".
  9. وبعد اكتمال عملية التحقق، حدد Create.

الخطوة 3: يستغرق النشر بضع دقائق لإكماله. بعد اكتمال التوزيع، حدد الزر انتقال إلى المورد. يتم نقلك مباشرة إلى تطبيق App Service، ولكن يتم إنشاء الموارد التالية:

  • مجموعة الموارد: الحاوية لكافة الموارد التي تم إنشاؤها.
  • خطة App Service: تحدد موارد الحوسبة ل App Service. يتم إنشاء خطة Linux في الطبقة الأساسية.
  • App Service: تمثل تطبيقك وتعمل في خطة App Service.
  • الشبكة الظاهرية: متكاملة مع تطبيق App Service وتعزل حركة مرور الشبكة الخلفية.
  • واجهات الشبكة: تمثل عناوين IP الخاصة، واحدة لكل نقطة من نقاط النهاية الخاصة.
  • خادم Azure Database for PostgreSQL المرن: يمكن الوصول إليه فقط من داخل الشبكة الظاهرية. يتم إنشاء قاعدة بيانات ومستخدم لك على الخادم.
  • مناطق DNS الخاصة: تمكن دقة DNS لمخزن المفاتيح وخادم قاعدة البيانات في الشبكة الظاهرية.

3. تأمين أسرار الاتصال

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

الخطوة 1: استرداد سلسلة الاتصال الموجودة

  1. في القائمة اليسرى من صفحة App Service، حدد Settings > Environment variables.
  2. حدد AZURE_POSTGRESQL_CONNECTIONSTRING.
  3. في إعداد إضافة/تحرير التطبيق، في حقل القيمة ، ابحث عن جزء كلمة المرور = في نهاية السلسلة.
  4. انسخ سلسلة كلمة المرور بعد كلمة المرور= لاستخدامها لاحقا. يتيح لك إعداد التطبيق هذا الاتصال بقاعدة بيانات Postgres المؤمنة خلف نقطة نهاية خاصة. ومع ذلك، يتم حفظ السر مباشرة في تطبيق App Service، وهو ليس الأفضل. ستغير هذا.

الخطوة 2: إنشاء مخزن رئيسي للإدارة الآمنة للبيانات السرية

  1. في شريط البحث العلوي، اكتب "key vault"، ثم حدد Marketplace>Key Vault.
  2. في Resource Group، حدد msdocs-python-postgres-tutorial.
  3. في اسم Key vault، اكتب اسما يتكون من أحرف وأرقام فقط.
  4. في Region، قم بتعيينه إلى نفس موقع مجموعة الموارد.

الخطوة 3: تأمين خزنة المفاتيح باستخدام نقطة نهاية خاصة

  1. حدد علامة التبويب Networking
  2. إلغاء تحديد تمكين الوصول العام.
  3. حدد Create a private endpoint.
  4. في Resource Group، حدد msdocs-python-postgres-tutorial.
  5. في مربع الحوار، في الموقع، حدد نفس موقع تطبيق App Service.
  6. في Name، اكتب msdocs-python-postgres-XYZVaultEndpoint.
  7. في الشبكة الظاهرية، حدد msdocs-python-postgres-XYZVnet.
  8. في الشبكة الفرعية، msdocs-python-postgres-XYZSubnet.
  9. حدد موافق.
  10. حدد Review + create، ثم حدد Create. انتظر حتى ينتهي نشر مخزن المفاتيح. يجب أن ترى "اكتمل النشر الخاص بك. "

الخطوة 4: تكوين موصل PostgreSQL

  1. في شريط البحث العلوي، اكتب msdocs-python-postgres، ثم حدد مورد App Service المسمى msdocs-python-postgres-XYZ.
  2. في صفحة App Service، في القائمة اليمنى، حدد Settings > Service Connector. يوجد بالفعل موصل، أنشأه معالج إنشاء التطبيق لك.
  3. حدد خانة الاختيار بجوار موصل PostgreSQL، ثم حدد تحرير.
  4. في Client type، حدد Django. على الرغم من أن لديك تطبيق Flask، فإن نوع عميل Django في موصل خدمة PostgreSQL يمنحك متغيرات قاعدة البيانات في إعدادات منفصلة بدلا من سلسلة الاتصال واحد. المتغيرات المنفصلة أسهل بالنسبة لك لاستخدامها في التعليمات البرمجية للتطبيق الخاص بك، والتي تستخدم SQLAlchemy للاتصال بقاعدة البيانات.
  5. حدد علامة التبويب مصادقة.
  6. في كلمة المرور، الصق كلمة المرور التي نسختها سابقا.
  7. حدد مخزن البيانات السرية في Key Vault.
  8. ضمن Key Vault Connection، حدد Create new. يتم فتح مربع حوار إنشاء اتصال أعلى مربع حوار التحرير.

الخطوة 5: إنشاء اتصال Key Vault

  1. في مربع الحوار Create connection لاتصال Key Vault، في Key Vault، حدد key vault الذي أنشأته سابقا.
  2. حدد "استعراض + إنشاء".
  3. عند اكتمال التحقق من الصحة، حدد إنشاء.

الخطوة 6: إنهاء إعدادات موصل PostgreSQL

  1. لقد عدت إلى مربع حوار التحرير ل defaultConnector. في علامة التبويب Authentication ، انتظر حتى يتم إنشاء موصل key vault. عند الانتهاء، تحددها القائمة المنسدلة اتصال Key Vault تلقائيا.
  2. حدد Next: Networking.
  3. حدد حفظ. انتظر حتى يظهر إعلام نجاح التحديث.

الخطوة 7: التحقق من تكامل Key Vault

  1. من القائمة اليسرى، حدد Settings > Environment variables مرة أخرى.
  2. بجوار AZURE_POSTGRESQL_PASSWORD، حدد Show value. يجب أن تكون @Microsoft.KeyVault(...)القيمة ، ما يعني أنها مرجع خزنة مفاتيح لأن السر تتم إدارته الآن في مخزن المفاتيح.

للتلخيص، تتضمن عملية تأمين أسرار الاتصال الخاصة بك ما يلي:

  • استرداد أسرار الاتصال من متغيرات البيئة لتطبيق App Service.
  • إنشاء مفتاح رئيسي.
  • إنشاء اتصال Key Vault بالهوية المدارة المعينة من قبل النظام.
  • تحديث موصلات الخدمة لتخزين الأسرار في مخزن المفاتيح.

هل تواجه مشكلات؟ تحقق من قسم استكشاف الأخطاء وإصلاحها.


4. نشر نموذج التعليمات البرمجية

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

الخطوة 1: في القائمة اليمنى، حدد Deployment>Deployment Center.

الخطوة 2: في صفحة Deployment Center:

  1. في المصدر، حدد GitHub. بشكل افتراضي، يتم تحديد إجراءات GitHub كموفر بناء.
  2. سجل الدخول إلى حساب GitHub واتبع المطالبة لتخويل Azure.
  3. في المؤسسة، حدد حسابك.
  4. في Repository، حدد msdocs-flask-postgresql-sample-app.
  5. في Branch، حدد starter-no-infra. هذا هو نفس الفرع الذي عملت فيه مع نموذج التطبيق الخاص بك، دون أي ملفات أو تكوينات متعلقة ب Azure.
  6. بالنسبة لنوع المصادقة، حدد الهوية المعينة من قبل المستخدم.
  7. في القائمة العلوية، حدد حفظ. تلتزم App Service بملف سير عمل في مستودع GitHub المختار، في الدليل .github/workflows. بشكل افتراضي، ينشئ مركز التوزيع هوية معينة من قبل المستخدم لسير العمل للمصادقة باستخدام Microsoft Entra (مصادقة OIDC). للحصول على خيارات المصادقة البديلة، راجع النشر إلى App Service باستخدام GitHub Actions.

الخطوة 3: مرة أخرى في مساحة التعليمات البرمجية GitHub لنسخة المستودع الخاصة بك، قم بتشغيل git pull origin starter-no-infra. يؤدي هذا إلى سحب ملف سير العمل الملتزم به حديثا إلى مساحة التعليمات البرمجية الخاصة بك.

الخطوة 4 (الخيار 1: مع GitHub Copilot):

  1. ابدأ جلسة دردشة جديدة عن طريق تحديد طريقة عرض الدردشة، ثم تحديد +.
  2. اسأل، "@workspace كيف يتصل التطبيق بقاعدة البيانات؟" قد يمنحك Copilot بعض الشرح حول SQLAlchemy كيفية تكوين URI للاتصال في azureproject/development.py وazureproject /production.py.
  3. اسأل، "@workspace في وضع الإنتاج، يتم تشغيل تطبيقي في تطبيق ويب App Service، والذي يستخدم موصل خدمة Azure للاتصال بخادم PostgreSQL مرن باستخدام نوع عميل Django. ما هي أسماء متغيرات البيئة التي أحتاج إلى استخدامها؟" قد يمنحك Copilot اقتراحا للتعليمات البرمجية مشابها لاقتراح في الخيار 2: بدون خطوات GitHub Copilot أدناه وحتى إخبارك بإجراء التغيير في ملف azureproject/production.py .
  4. افتح azureproject/production.py في المستكشف وأضف اقتراح التعليمات البرمجية. لا يمنحك GitHub Copilot نفس الاستجابة في كل مرة، وهو ليس صحيحا دائما. قد تحتاج إلى طرح المزيد من الأسئلة لضبط استجابتها. للحصول على تلميحات، راجع ما الذي يمكنني فعله باستخدام GitHub Copilot في مساحة التعليمات البرمجية الخاصة بي؟.

الخطوة 4 (الخيار 2: بدون GitHub Copilot):

  1. افتح Program.cs في المستكشف.
  2. ابحث عن التعليمات البرمجية التي تم التعليق عليها (الأسطر 3-8) وقم بإلغاء التعليق عليها. يؤدي هذا إلى إنشاء سلسلة الاتصال ل SQLAlchemy باستخدام AZURE_POSTGRESQL_USERو AZURE_POSTGRESQL_PASSWORDAZURE_POSTGRESQL_HOSTو وAZURE_POSTGRESQL_NAME.

الخطوة 5:

  1. حدد ملحق البرنامج للتحكم بالمصادر.
  2. في مربع النص، اكتب رسالة تثبيت مثل Configure Azure database connecton. أو حدد واسمح ل GitHub Copilot بإنشاء رسالة تثبيت لك.
  3. حدد Commit، ثم قم بالتأكيد باستخدام Yes.
  4. حدد مزامنة التغييرات 1، ثم تأكد من موافق.

الخطوة 6: العودة إلى صفحة Deployment Center في مدخل Microsoft Azure:

  1. حدد علامة التبويب Logs، ثم حدد Refresh لمشاهدة تشغيل التوزيع الجديد.
  2. في عنصر السجل لتشغيل النشر، حدد إدخال Build/Deploy Logs مع أحدث طابع زمني.

الخطوة 7: يتم نقلك إلى مستودع GitHub الخاص بك وترى أن إجراء GitHub قيد التشغيل. يحدد ملف سير العمل مرحلتين منفصلتين، الإنشاء والتوزيع. انتظر حتى يتم تشغيل GitHub لإظهار حالة Success. يستغرق حوالي 5 دقائق.

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

5. إنشاء مخطط قاعدة البيانات

مع قاعدة بيانات PostgreSQL المحمية بواسطة الشبكة الظاهرية، أسهل طريقة لتشغيل عمليات ترحيل قاعدة بيانات Flask هي في جلسة SSH مع حاوية Linux في App Service.

الخطوة 1: العودة إلى صفحة App Service، في القائمة اليسرى،

  1. حدد Development Tools>SSH.
  2. حدد Go.

الخطوة 2: في جلسة SSH، قم بتشغيل flask db upgrade. إذا نجحت، فإن App Service تتصل بنجاح بقاعدة البيانات.

تلميح

في جلسة SSH، يمكن أن تستمر التغييرات على الملفات في /home فقط بعد إعادة تشغيل التطبيق. التغييرات خارج /home غير مستمرة.

هل تواجه مشكلات؟ تحقق من قسم استكشاف الأخطاء وإصلاحها.

6. تصفح إلى التطبيق

الخطوة 1: في صفحة App Service:

  1. من القائمة اليسرى، حدد نظرة عامة.
  2. حدد عنوان URL لتطبيقك.

الخطوة 2: إضافة بعض المطاعم إلى القائمة. تهانينا، أنت تقوم بتشغيل تطبيق ويب في Azure App Service، مع اتصال آمن بقاعدة بيانات Azure ل PostgreSQL.

7. دفق سجلات التشخيص

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

@app.route('/', methods=['GET'])
def index():
    print('Request for index page received')
    restaurants = Restaurant.query.all()
    return render_template('index.html', restaurants=restaurants)

الخطوة 1: في صفحة App Service:

  1. من القائمة اليسرى، حدد Monitoring>App Service logs.
  2. ضمن سجل التطبيقات، حدد نظام الملفات.
  3. في القائمة العلوية، حدد حفظ.

الخطوة 2: من القائمة اليسرى، حدد Log stream. ترى سجلات تطبيقك، بما في ذلك سجلات النظام الأساسي والسجلات من داخل الحاوية.

تعرف على المزيد حول تسجيل الدخول إلى تطبيقات Python في سلسلة إعداد Azure Monitor لتطبيق Python الخاص بك.

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

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

الخطوة 1: في شريط البحث أعلى مدخل Microsoft Azure:

  1. أدخل اسم مجموعة الموارد.
  2. حدد مجموعة الموارد.

الخطوة 2: في صفحة مجموعة الموارد، حدد حذف مجموعة الموارد.

الخطوة 3:

  1. أدخل اسم مجموعة الموارد لتأكيد حذفك.
  2. حدد حذف.

لقطة شاشة لمربع حوار التأكيد لحذف مجموعة موارد في مدخل Microsoft Azure. :

2. إنشاء موارد Azure ونشر نموذج تطبيق

في هذه الخطوة، يمكنك إنشاء موارد Azure ونشر نموذج تطبيق إلى App Service على Linux. تنشئ الخطوات المستخدمة في هذا البرنامج التعليمي مجموعة من الموارد الآمنة بشكل افتراضي التي تتضمن خدمة التطبيقات وقاعدة بيانات Azure ل PostgreSQL.

تحتوي حاوية التطوير بالفعل على Azure Developer CLI (AZD).

  1. من جذر المستودع، قم بتشغيل azd init.

    azd init --template python-app-service-postgresql-infra
    
  2. عند المطالبة، قدم الإجابات التالية:

    السؤال الإجابة
    الدليل الحالي غير فارغ. هل ترغب في تهيئة مشروع هنا في "<دليلك>"؟ السنة
    ماذا تريد أن تفعل بهذه الملفات؟ الاحتفاظ بالملفات الموجودة دون تغيير
    أدخل اسم بيئة جديدة اكتب اسم فريد. يستخدم قالب AZD هذا الاسم كجزء من اسم DNS لتطبيق الويب الخاص بك في Azure (<app-name>-<hash>.azurewebsites.net). يسمح بالأحرف الأبجدية الرقمية والواصلات.
  3. سجل الدخول إلى Azure عن طريق تشغيل azd auth login الأمر واتباع المطالبة:

    azd auth login
    
  4. إنشاء موارد Azure الضرورية باستخدام azd provision الأمر . اتبع المطالبة لتحديد الاشتراك والموقع المطلوبين لموارد Azure.

    azd provision
    

    azd provision يستغرق الأمر حوالي 15 دقيقة لإكماله (تستغرق ذاكرة التخزين المؤقت Redis معظم الوقت). لاحقا، ستقوم بتعديل التعليمات البرمجية الخاصة بك للعمل مع App Service ونشر التغييرات باستخدام azd deploy. أثناء تشغيله، يوفر الأمر رسائل حول عملية التوفير والنشر، بما في ذلك ارتباط إلى النشر في Azure.

    يحتوي قالب AZD هذا على ملفات (azure.yaml والدليل infra ) التي تنشئ بنية آمنة بشكل افتراضي مع موارد Azure التالية:

    • مجموعة الموارد: الحاوية لكافة الموارد التي تم إنشاؤها.
    • خطة App Service: تحدد موارد الحوسبة ل App Service. يتم إنشاء خطة Linux في الطبقة الأساسية.
    • App Service: تمثل تطبيقك وتعمل في خطة App Service.
    • الشبكة الظاهرية: متكاملة مع تطبيق App Service وتعزل حركة مرور الشبكة الخلفية.
    • نقاط النهاية الخاصة: الوصول إلى نقاط النهاية لمخزن المفاتيح وذاكرة التخزين المؤقت Redis في الشبكة الظاهرية.
    • واجهات الشبكة: تمثل عناوين IP الخاصة، واحدة لكل نقطة من نقاط النهاية الخاصة.
    • خادم Azure Database for PostgreSQL المرن: يمكن الوصول إليه فقط من داخل الشبكة الظاهرية. يتم إنشاء قاعدة بيانات ومستخدم لك على الخادم.
    • منطقة DNS الخاصة: تمكن دقة DNS لخادم PostgreSQL في الشبكة الظاهرية.
    • مساحة عمل Log Analytics: تعمل كحاوية مستهدفة لتطبيقك لشحن سجلاته، حيث يمكنك أيضا الاستعلام عن السجلات.
    • ذاكرة التخزين المؤقت Azure ل Redis: يمكن الوصول إليها فقط من خلف نقطة النهاية الخاصة بها.
    • Key vault: يمكن الوصول إليه فقط من خلف نقطة النهاية الخاصة به. يستخدم لإدارة البيانات السرية لتطبيق App Service.

    بمجرد انتهاء الأمر من إنشاء الموارد ونشر التعليمات البرمجية للتطبيق في المرة الأولى، لا يعمل نموذج التطبيق المنشور بعد لأنه يجب إجراء تغييرات صغيرة لجعله يتصل بقاعدة البيانات في Azure.

هل تواجه مشكلات؟ تحقق من قسم استكشاف الأخطاء وإصلاحها.

3. استخدام قاعدة البيانات سلسلة الاتصال

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

  1. في إخراج AZD، ابحث عن الإعدادات AZURE_POSTGRESQL_USERو AZURE_POSTGRESQL_PASSWORDAZURE_POSTGRESQL_HOSTو و.AZURE_POSTGRESQL_NAME للحفاظ على البيانات السرية آمنة، يتم عرض أسماء الإعدادات فقط. تبدو كما يلي في إخراج AZD:

     App Service app has the following connection settings:
             - AZURE_POSTGRESQL_NAME
             - AZURE_POSTGRESQL_HOST
             - AZURE_POSTGRESQL_USER
             - AZURE_POSTGRESQL_PASSWORD
             - AZURE_REDIS_CONNECTIONSTRING
             - AZURE_KEYVAULT_RESOURCEENDPOINT
             - AZURE_KEYVAULT_SCOPE
     
  2. لراحتك، يعرض لك قالب AZD الارتباط المباشر إلى صفحة إعدادات التطبيق. ابحث عن الارتباط وافتحه في علامة تبويب مستعرض جديدة.

هل تواجه مشكلات؟ تحقق من قسم استكشاف الأخطاء وإصلاحها.

4. تعديل نموذج التعليمات البرمجية وإعادة النشر

  1. في مساحة التعليمات البرمجية GitHub، ابدأ جلسة دردشة جديدة عن طريق تحديد طريقة عرض الدردشة، ثم تحديد +.

  2. اسأل، "@workspace كيف يتصل التطبيق بقاعدة البيانات؟" قد يمنحك Copilot بعض الشرح حول SQLAlchemy كيفية تكوين URI للاتصال في azureproject/development.py وazureproject /production.py.

  3. اسأل، "@workspace في وضع الإنتاج، يتم تشغيل تطبيقي في تطبيق ويب App Service، والذي يستخدم موصل خدمة Azure للاتصال بخادم PostgreSQL مرن باستخدام نوع عميل Django. ما هي أسماء متغيرات البيئة التي أحتاج إلى استخدامها؟" قد يمنحك Copilot اقتراحا للتعليمات البرمجية مشابها لاقتراح في الخيار 2: بدون خطوات GitHub Copilot أدناه وحتى إخبارك بإجراء التغيير في ملف azureproject/production.py .

  4. افتح azureproject/production.py في المستكشف وأضف اقتراح التعليمات البرمجية.

    لا يمنحك GitHub Copilot نفس الاستجابة في كل مرة، وهو ليس صحيحا دائما. قد تحتاج إلى طرح المزيد من الأسئلة لضبط استجابتها. للحصول على تلميحات، راجع ما الذي يمكنني فعله باستخدام GitHub Copilot في مساحة التعليمات البرمجية الخاصة بي؟.

  5. في المحطة الطرفية، قم بتشغيل azd deploy.

    azd deploy
    

هل تواجه مشكلات؟ تحقق من قسم استكشاف الأخطاء وإصلاحها.

5. إنشاء مخطط قاعدة البيانات

مع قاعدة بيانات PostgreSQL المحمية بواسطة الشبكة الظاهرية، أسهل طريقة لتشغيل عمليات ترحيل قاعدة بيانات Flask هي في جلسة SSH مع حاوية Linux في App Service.

  1. في إخراج AZD، ابحث عن عنوان URL لجلسة SSH وانتقل إليه في المتصفح. يبدو مثل هذا في الإخراج:

     Open SSH session to App Service container at: https://<app-name>.scm.azurewebsites.net/webssh/host
     
  2. في جلسة SSH، قم بتشغيل flask db upgrade. إذا نجحت، فإن App Service تتصل بنجاح بقاعدة البيانات.

    لقطة شاشة توضح الأوامر التي يجب تشغيلها في SSH shell ومخرجاتها.

    إشعار

    يمكن أن تستمر التغييرات التي يتم إجراؤها على الملفات في /home فقط بعد عمليات إعادة تشغيل التطبيق. التغييرات خارج /home غير مستمرة.

هل تواجه مشكلات؟ تحقق من قسم استكشاف الأخطاء وإصلاحها.

6. تصفح إلى التطبيق

  1. في إخراج AZD، ابحث عن عنوان URL لتطبيقك وانتقل إليه في المستعرض. يبدو عنوان URL كما يلي في إخراج AZD:

     Deploying services (azd deploy)
    
       (✓) Done: Deploying service web
       - Endpoint: https://<app-name>.azurewebsites.net/
     
  2. أضف بعض المطاعم إلى القائمة.

    لقطة شاشة لتطبيق Flask على الويب مع PostgreSQL قيد التشغيل في Azure تعرض تقييمات المطاعم والمطاعم.

    تهانينا، أنت تقوم بتشغيل تطبيق ويب في Azure App Service، مع اتصال آمن بقاعدة بيانات Azure ل PostgreSQL.

هل تواجه مشكلات؟ تحقق من قسم استكشاف الأخطاء وإصلاحها.

7. دفق سجلات التشخيص

يمكن ل Azure App Service التقاط سجلات وحدة التحكم لمساعدتك في تشخيص المشكلات مع التطبيق الخاص بك. للراحة، يمكن قالب AZD بالفعل تسجيل الدخول إلى نظام الملفات المحلي ويشحن السجلات إلى مساحة عمل Log Analytics.

يتضمن print() نموذج التطبيق عبارات لإثبات هذه الإمكانية، كما هو موضح في القصاصة البرمجية التالية.

@app.route('/', methods=['GET'])
def index():
    print('Request for index page received')
    restaurants = Restaurant.query.all()
    return render_template('index.html', restaurants=restaurants)

في إخراج AZD، ابحث عن الارتباط لدفق سجلات App Service وانتقل إليه في المتصفح. يبدو الارتباط كما يلي في إخراج AZD:

Stream App Service logs at: https://portal.azure.com/#@/resource/subscriptions/<subscription-guid>/resourceGroups/<group-name>/providers/Microsoft.Web/sites/<app-name>/logStream

تعرف على المزيد حول تسجيل الدخول إلى تطبيقات Python في سلسلة إعداد Azure Monitor لتطبيق Python الخاص بك.

هل تواجه مشكلات؟ تحقق من قسم استكشاف الأخطاء وإصلاحها.

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

لحذف كافة موارد Azure في بيئة النشر الحالية، قم بتشغيل azd down المطالبات واتبعها.

azd down

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

فيما يلي المشكلات التي قد تواجهها أثناء محاولة العمل من خلال هذا البرنامج التعليمي والخطوات لحلها.

لا يمكنني الاتصال بجلسة SSH

إذا لم تتمكن من الاتصال بجلسة SSH، فقد فشل التطبيق نفسه في البدء. تحقق من سجلات التشخيص للحصول على التفاصيل. على سبيل المثال، إذا رأيت خطأ مثل KeyError: 'AZURE_POSTGRESQL_HOST'، فقد يعني ذلك أن متغير البيئة مفقود (ربما قمت بإزالة إعداد التطبيق).

أتلقى خطأ عند تشغيل عمليات ترحيل قاعدة البيانات

إذا واجهت أي أخطاء تتعلق بالاتصال بقاعدة البيانات، فتحقق مما إذا كانت إعدادات التطبيق (AZURE_POSTGRESQL_USERو AZURE_POSTGRESQL_PASSWORDAZURE_POSTGRESQL_HOSTو وAZURE_POSTGRESQL_NAME) قد تم تغييرها أو حذفها. بدون هذا سلسلة الاتصال، لا يمكن لأمر الترحيل الاتصال بقاعدة البيانات.

الأسئلة الشائعة

كم يكلف هذا الإعداد؟

تسعير الموارد التي تم إنشاؤها كما يلي:

  • يتم إنشاء خطة App Service في الطبقة الأساسية، ويمكن تغيير حجمها زيادة أو نقصانًا. راجع تسعير App Service.
  • يتم إنشاء خادم PostgreSQL المرن في أدنى مستوى قابل للاندفاع Standard_B1ms، مع الحد الأدنى لحجم التخزين، والذي يمكن توسيع نطاقه لأعلى أو لأسفل. راجع قاعدة بيانات Azure لمعرفة أسعار PostgreSQL.
  • لا تتحمل الشبكة الظاهرية رسوما ما لم تقم بتكوين وظائف إضافية، مثل التناظر. راجع أسعار شبكة Azure الظاهرية.
  • تتحمل منطقة DNS الخاصة رسوما صغيرة. راجع أسعار Azure DNS.

كيف أعمل الاتصال بخادم PostgreSQL المؤمن خلف الشبكة الظاهرية باستخدام أدوات أخرى؟

  • للوصول الأساسي من أداة سطر الأوامر، يمكنك التشغيل psql من جلسة SSH للتطبيق.
  • للاتصال من أداة سطح المكتب، يجب أن يكون جهازك داخل الشبكة الظاهرية. على سبيل المثال، قد يكون جهاز Azure ظاهري متصل بإحدى الشبكات الفرعية، أو جهازا في شبكة محلية لديه اتصال VPN من موقع إلى موقع مع شبكة Azure الظاهرية.
  • يمكنك أيضا دمج Azure Cloud Shell مع الشبكة الظاهرية.

كيف يعمل تطوير التطبيقات المحلية مع إجراءات GitHub؟

باستخدام ملف سير العمل الذي تم إنشاؤه تلقائيا من App Service كمثال، يقوم كل git push منها ببدء تشغيل بنية ونشر جديد. من نسخة محلية من مستودع GitHub، يمكنك إجراء التحديثات المطلوبة ودفعها إلى GitHub. على سبيل المثال:

git add .
git commit -m "<some-message>"
git push origin main

كيف أعمل أخطاء تصحيح الأخطاء أثناء نشر إجراءات GitHub؟

إذا فشلت خطوة في ملف سير عمل GitHub الذي تم إنشاؤه تلقائيا، فحاول تعديل الأمر الفاشل لإنشاء المزيد من الإخراج المطول. على سبيل المثال، يمكنك الحصول على المزيد من الإخراج من python الأمر عن طريق إضافة -d الخيار . قم بتثبيت التغييرات ودفعها لتشغيل توزيع آخر إلى App Service.

ليس لدي أذونات لإنشاء هوية معينة من قبل المستخدم

راجع إعداد نشر إجراءات GitHub من مركز النشر.

ماذا يمكنني أن أفعل مع GitHub Copilot في مساحة التعليمات البرمجية الخاصة بي؟

ربما لاحظت أن طريقة عرض دردشة GitHub Copilot كانت موجودة بالفعل لك عند إنشاء مساحة التعليمات البرمجية. لراحتك، نقوم بتضمين ملحق دردشة GitHub Copilot في تعريف الحاوية (راجع .devcontainer/devcontainer.json). ومع ذلك، تحتاج إلى حساب GitHub Copilot (يتوفر إصدار تجريبي مجاني لمدة 30 يوما).

بعض النصائح لك عند التحدث إلى GitHub Copilot:

  • في جلسة دردشة واحدة، تعتمد الأسئلة والأجوبة على بعضها البعض ويمكنك ضبط أسئلتك لضبط الإجابة التي تحصل عليها.
  • بشكل افتراضي، لا يملك GitHub Copilot حق الوصول إلى أي ملف في المستودع الخاص بك. لطرح أسئلة حول ملف، افتح الملف في المحرر أولا.
  • للسماح ل GitHub Copilot بالوصول إلى جميع الملفات في المستودع عند إعداد إجاباته، ابدأ سؤالك ب @workspace. لمزيد من المعلومات، انظر Use the @workspace agent.
  • في جلسة الدردشة، يمكن ل GitHub Copilot اقتراح تغييرات و (مع @workspace) حتى مكان إجراء التغييرات، ولكن لا يسمح بإجراء التغييرات نيابة عنك. الأمر متروك لك لإضافة التغييرات المقترحة واختبارها.

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

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

تعرف على كيفية تشغيل خدمة التطبيقات لتطبيق Python: