مشاركة عبر


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

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

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

لإكمال هذا البرنامج التعليمي، ستحتاج إلى:

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

مع تثبيت Azure Developer CLI ، يمكنك التخطي إلى نهاية البرنامج التعليمي عن طريق تشغيل الأوامر التالية في دليل عمل فارغ:

azd auth login
azd init --template msdocs-fastapi-postgresql-sample-app
azd up

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

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

لتشغيل التطبيق محليا، تأكد من أن بايثون 3.14 أو أعلىوPostgreSQL مثبتان محليا. ثم قم باستنساخ فرع مستودع العينة starter-no-infra والتغيير إلى جذر المستودع.

git clone -b starter-no-infra https://github.com/Azure-Samples/msdocs-fastapi-postgresql-sample-app
cd msdocs-fastapi-postgresql-sample-app

قم بإنشاء ملف .env كما هو موضح أدناه باستخدام ملف .env.sample كدليل. تعيين قيمة DBNAME إلى اسم قاعدة بيانات موجودة في مثيل PostgreSQL المَحلي. قم بتعيين قيم DBHOSTو DBUSERحسب DBPASS الاقتضاء لمثيل PostgreSQL المَحلي.

DBNAME=<database name>
DBHOST=<database-hostname>
DBUSER=<db-user-name>
DBPASS=<db-password>

إنشاء بيئة ظـاهرية للتطبيق:

py -m venv .venv
.venv\scripts\activate

تثبيت تأمينات التشغيل:

python3 -m pip install -r src/requirements.txt

تثبيت التطبيق كحزمة قابلة للتحرير:

python3 -m pip install -e src

تشغيل نموذج التطبيق مع الأوامر التالية:

# Run database migration
python3 src/fastapi_app/seed_data.py
# Run the app at http://127.0.0.1:8000
python3 -m uvicorn fastapi_app:app --reload --port=8000

1. إنشاء App Service وPostgreSQL

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

  • اسم تطبيق الويب. إنه الاسم المستخدم كجزء من اسم DNS لتطبيق الويب الخاص بك.
  • المنطقة لتشغيل التطبيق فعليا في العالم.
  • مكدس وقت التشغيل للتطبيق. إنه المكان الذي تحدد فيه إصدار Python لاستخدامه لتطبيقك.
  • خطة الاستضافة للتطبيق. إنها طبقة الأسعار التي تتضمن مجموعة الميزات وسعة التحجيم لتطبيقك.
  • مجموعة الموارد للتطبيق. تتيح لك مجموعة الموارد تجميع (في حاوية منطقية) جميع موارد Azure المطلوبة للتطبيق.

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

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

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

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

  1. مجموعة الموارد → حدد إنشاء جديد واستخدم اسم msdocs-python-postgres-tutorial.
  2. المنطقة → أي منطقة Azure قريبة منك.
  3. الاسمmsdocs-python-postgres-XYZ حيث XYZ هو أي ثلاثة أحرف عشوائية. يجب أن يكون هذا الاسم فريدا عبر Azure.
  4. مكدس وقت التشغيلبايثون 3.14.
  5. قاعدة البياناتPostgreSQL - يتم تحديد الخادم المرن افتراضيا كمحرك قاعدة البيانات. يتم أيضا تعيين اسم الخادم واسم قاعدة البيانات بشكل افتراضي إلى القيم المناسبة.
  6. خطة الاستضافةBasic. عندما تكون مستعدا، يمكنك التوسع إلى مستوى تسعير الإنتاج لاحقا.
  7. حدد Review + create.
  8. بعد اكتمال التحقق من الصحة، حدد إنشاء.

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

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

الخطوة 4: بالنسبة لتطبيقات FastAPI، يجب إدخال أمر بدء التشغيل حتى تتمكن خدمة التطبيقات من بدء تشغيل تطبيقك. في صفحة App Service:

  1. في القائمة اليسرى، ضمن Settings، حدد Configuration.
  2. في علامة التبويب الإعدادات العامة في صفحة التكوين ، أدخل src/entrypoint.sh في حقل أمر بدء التشغيل ضمن إعدادات المكدس.
  3. حدد حفظ. عند المطالبة، حدد متابعة. لمعرفة المزيد حول تكوين التطبيق وبدء التشغيل في App Service، راجع تكوين تطبيق Linux Python ل Azure App Service.

2. التحقق من إعدادات الاتصال

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

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

الخطوة 2: في علامة التبويب إعدادات التطبيق في صفحة متغيرات البيئة ، تحقق من وجودها AZURE_POSTGRESQL_CONNECTIONSTRING . سيتم إدخال سلسلة الاتصال في بيئة وقت التشغيل كمتغير بيئة.

3 - توزيع عينة التعليمات البرمجية

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

الخطوة 1: في نافذة متصفح جديدة:

  1. قم بتسجيل الدخول إلى حساب GitHub الخاص بك.
  2. الانتقال إلى https://github.com/Azure-Samples/msdocs-fastapi-postgresql-sample-app.
  3. حدد نسخة المستودع.
  4. حدد إنشاء نسخة المستودع.

الخطوة 2: في صفحة GitHub، افتح Visual Studio Code في المتصفح بالضغط على . المفتاح.

الخطوة 3: في Visual Studio Code في المتصفح، افتح src/fastapi/models.py في المستكشف. راجع متغيرات البيئة المستخدمة في بيئة الإنتاج، بما في ذلك إعدادات التطبيق التي شاهدتها في صفحة التكوين.

الخطوة 4: مرة أخرى في صفحة App Service، في القائمة اليمنى، ضمن Deployment، حدد Deployment Center.

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

  1. في المصدر، حدد GitHub. بشكل افتراضي، يتم تحديد GitHub Actions كموفر بناء.
  2. سجل الدخول إلى حساب GitHub واتبع المطالبة لتخويل Azure.
  3. في المؤسسة، حدد حسابك.
  4. في Repository، حدد msdocs-fastapi-postgresql-sample-app.
  5. في Branch، حدد main.
  6. احتفظ بالخيار الافتراضي محددا لإضافة سير عمل.
  7. ضمن Authentication type، حدد User-assigned identity.
  8. في القائمة العلوية، حدد Save. تلتزم App Service بملف سير عمل في مستودع GitHub المختار، في الدليل .github/workflows.

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

  1. حدد Logs. تم بالفعل بدء تشغيل التوزيع.
  2. في عنصر السجل لتشغيل النشر، حدد Build/Deploy Logs.

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

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

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

في القسم السابق، أضفت src/entrypoint.sh كأمر بدء تشغيل لتطبيقك. يحتوي entrypoint.sh على السطر التالي: python3 src/fastapi_app/seed_data.py. يقوم هذا الأمر بترحيل قاعدة البيانات الخاصة بك. في نموذج التطبيق، يضمن فقط إنشاء الجداول الصحيحة في قاعدة البيانات الخاصة بك. لا يملأ هذه الجداول بأي بيانات.

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

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

  1. حدد SSH.
  2. حدد Go.

الخطوة 2: في محطة SSH الطرفية، قم بتشغيل python3 src/fastapi_app/seed_data.py. إذا نجحت، فإن App Service تتصل بنجاح بقاعدة البيانات. يمكن أن تستمر التغييرات التي يتم إجراؤها على الملفات في /home فقط بعد عمليات إعادة تشغيل التطبيق. التغييرات خارج /home غير مستمرة.

5. استعرض للوصول إلى التطبيق

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

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

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

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

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

@app.get("/", response_class=HTMLResponse)
async def index(request: Request, session: Session = Depends(get_db_session)):
    logger.info("root called")
    statement = (
        select(Restaurant, func.avg(Review.rating).label("avg_rating"), func.count(Review.id).label("review_count"))
        .outerjoin(Review, Review.restaurant == Restaurant.id)
        .group_by(Restaurant.id)
    )

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

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

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

قد تستغرق الأحداث عدة دقائق لتظهر في سجلات التشخيص. تعرف على المزيد حول تسجيل الدخول إلى تطبيقات Python في سلسلة إعداد Azure Monitor لتطبيق Python الخاص بك.

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

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

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

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

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

الخطوة 3:

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

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

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

  1. إذا لم تكن قد قمت بالفعل، فانسخ فرع مستودع العينة starter-no-infra في محطة طرفية محلية.

    git clone -b starter-no-infra https://github.com/Azure-Samples/msdocs-fastapi-postgresql-sample-app
    cd msdocs-fastapi-postgresql-sample-app
    

    هذا الفرع المستنسخ هو نقطة البداية الخاصة بك. يحتوي على تطبيق FastAPI بسيط لمحرك البيانات.

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

    azd init --template msdocs-fastapi-postgresql-sample-app
    
  3. عند المطالبة، قدم الإجابات التالية:

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

    azd up
    

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

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

    • مجموعة الموارد → الحاوية لكافة الموارد التي تم إنشاؤها.
    • خطة App Service → تحدد موارد الحوسبة ل App Service. يتم تحديد خطة Linux في المستوى B1 .
    • تمثل App Service → تطبيقك وتعمل في خطة App Service.
    • → الشبكة الظاهرية متكاملة مع تطبيق App Service وتعزل حركة مرور الشبكة الخلفية.
    • → الوصول إلى خادم Azure Database for PostgreSQL المرن فقط من داخل الشبكة الظاهرية. يتم إنشاء قاعدة بيانات ومستخدم لك على الخادم.
    • منطقة DNS الخاصة → تمكن دقة DNS لخادم PostgreSQL في الشبكة الظاهرية.
    • مساحة عمل Log Analytics → تعمل كحاوية مستهدفة لتطبيقك لشحن سجلاته، حيث يمكنك أيضا الاستعلام عن السجلات.
  5. azd up عند اكتمال الأمر، لاحظ قيم معرف الاشتراك (Guid) وخدمة التطبيقاتومجموعة الموارد في الإخراج. يمكنك استخدامها في الأقسام التالية. سيبدو الإخراج مشابها للإخراج (الجزئي) التالي:

    Subscription: Your subscription name (1111111-1111-1111-1111-111111111111)
    Location: East US
    
      You can view detailed progress in the Azure Portal:
      https://portal.azure.com/#view/HubsExtension/DeploymentDetailsBlade/~/overview/id/%2Fsubscriptions%2F1111111-1111-1111-1111-111111111111%2Fproviders%2FMicrosoft.Resources%2Fdeployments%2Fyourenv-1721867673
    
      (✓) Done: Resource group: yourenv-rg
      (✓) Done: Virtual Network: yourenv-e2najjk4vewf2-vnet
      (✓) Done: App Service plan: yourenv-e2najjk4vewf2-service-plan
      (✓) Done: Log Analytics workspace: yourenv-e2najjk4vewf2-workspace
      (✓) Done: Application Insights: yourenv-e2najjk4vewf2-appinsights
      (✓) Done: Portal dashboard: yourenv-e2najjk4vewf2-dashboard
      (✓) Done: App Service: yourenv-e2najjk4vewf2-app-service
      (✓) Done: Azure Database for PostgreSQL flexible server: yourenv-e2najjk4vewf2-postgres-server
      (✓) Done: Cache for Redis: yourenv-e2najjk4vewf2-redisCache
      (✓) Done: Private Endpoint: cache-privateEndpoint
    
    SUCCESS: Your application was provisioned in Azure in 32 minutes.
    You can view the resources created under the resource group yourenv-rg in Azure Portal:
    https://portal.azure.com/#@/resource/subscriptions/1111111-1111-1111-1111-111111111111/resourceGroups/yourenv-rg/overview
    
    Deploying services (azd deploy)
    
      (✓) Done: Deploying service web
      - Endpoint: https://yourenv-e2najjk4vewf2-app-service.azurewebsites.net/
    
    

2. فحص قاعدة البيانات سلسلة الاتصال

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

  1. في infra/resources.bicep الملف، ابحث عن إعدادات التطبيق وابحث عن إعداد .AZURE_POSTGRESQL_CONNECTIONSTRING

    resource appSettings 'config' = {
      name: 'appsettings'
      properties: {
          SCM_DO_BUILD_DURING_DEPLOYMENT: 'true'
          AZURE_POSTGRESQL_CONNECTIONSTRING: 'dbname=${pythonAppDatabase.name} host=${postgresServer.name}.postgres.database.azure.com port=5432 sslmode=require user=${postgresServer.properties.administratorLogin} password=${databasePassword}'
          SECRET_KEY: secretKey
          AZURE_REDIS_CONNECTIONSTRING: 'rediss://:${redisCache.listKeys().primaryKey}@${redisCache.name}.redis.cache.windows.net:6380/0'
        }
    }
    
  2. AZURE_POSTGRESQL_CONNECTIONSTRINGيحتوي على سلسلة الاتصال إلى قاعدة بيانات Postgres في Azure. تحتاج إلى استخدامه في التعليمات البرمجية للاتصال به. يمكنك العثور على التعليمات البرمجية التي تستخدم متغير البيئة هذا في src/fastapi/models.py:

    sql_url = ""
    if os.getenv("WEBSITE_HOSTNAME"):
        logger.info("Connecting to Azure PostgreSQL Flexible server based on AZURE_POSTGRESQL_CONNECTIONSTRING...")
        env_connection_string = os.getenv("AZURE_POSTGRESQL_CONNECTIONSTRING")
        if env_connection_string is None:
            logger.info("Missing environment variable AZURE_POSTGRESQL_CONNECTIONSTRING")
        else:
            # Parse the connection string
            details = dict(item.split('=') for item in env_connection_string.split())
    
            # Properly format the URL for SQLAlchemy
            sql_url = (
                f"postgresql://{quote_plus(details['user'])}:{quote_plus(details['password'])}"
                f"@{details['host']}:{details['port']}/{details['dbname']}?sslmode={details['sslmode']}"
            )
    
    else:
        logger.info("Connecting to local PostgreSQL server based on .env file...")
        load_dotenv()
        POSTGRES_USERNAME = os.environ.get("DBUSER")
        POSTGRES_PASSWORD = os.environ.get("DBPASS")
        POSTGRES_HOST = os.environ.get("DBHOST")
        POSTGRES_DATABASE = os.environ.get("DBNAME")
        POSTGRES_PORT = os.environ.get("DBPORT", 5432)
    
        sql_url = f"postgresql://{POSTGRES_USERNAME}:{POSTGRES_PASSWORD}@{POSTGRES_HOST}:{POSTGRES_PORT}/{POSTGRES_DATABASE}"
    
    engine = create_engine(sql_url)
    

3. فحص أمر بدء التشغيل

تتطلب Azure App Service أمر بدء تشغيل لتشغيل تطبيق FastAPI. يعين قالب azd هذا الأمر لك في مثيل App Service.

  1. في infra/resources.bicep الملف، ابحث عن الإعلان لموقع الويب الخاص بك ثم ابحث عن إعداد .appCommandLine هذا هو الإعداد لأمر بدء التشغيل.

    resource web 'Microsoft.Web/sites@2024-11-01' = {
      name: '${prefix}-app-service'
      location: location
      tags: union(tags, { 'azd-service-name': 'web' })
      kind: 'app,linux'
      properties: {
        serverFarmId: appServicePlan.id
        siteConfig: {
          alwaysOn: true
          linuxFxVersion: 'PYTHON|3.11'
          ftpsState: 'Disabled'
          appCommandLine: 'src/entrypoint.sh'
          minTlsVersion: '1.2'
        }
        httpsOnly: true
      }
      identity: {
        type: 'SystemAssigned'
      }
    
  2. يقوم أمر بدء التشغيل بتشغيل الملف src/entrypoint.sh. افحص التعليمات البرمجية في هذا الملف لفهم الأوامر التي تشغلها App Service لبدء تشغيل تطبيقك:

    #!/bin/bash
    set -e
    python3 -m pip install --upgrade pip
    python3 -m pip install -e src
    python3 src/fastapi_app/seed_data.py
    python3 -m gunicorn fastapi_app:app -c src/gunicorn.conf.py
    

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

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

ربما لاحظت في القسم السابق أن entrypoint.sh يحتوي على السطر التالي: python3 src/fastapi_app/seed_data.py. يقوم هذا الأمر بترحيل قاعدة البيانات الخاصة بك. في نموذج التطبيق، يضمن فقط إنشاء الجداول الصحيحة في قاعدة البيانات الخاصة بك. لا يملأ هذه الجداول بأي بيانات.

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

  1. استخدم قيمة App Service التي لاحظتها سابقا في إخراج azd لإنشاء عنوان URL لجلسة SSH والانتقال إليها في المستعرض:

  2. في محطة SSH الطرفية، قم بتشغيل python3 src/fastapi_app/seed_data.py. إذا نجحت، فإن App Service تتصل بنجاح بقاعدة البيانات.

    لقطة شاشة تعرض الأوامر التي سيتم تشغيلها في SSH shell وإخراجها (FastAPI).

    إشعار

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

5. استعرض للوصول إلى التطبيق

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

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

    لقطة شاشة لتطبيق الويب FastAPI مع PostgreSQL قيد التشغيل في Azure تعرض المطاعم ومراجعات المطاعم (FastAPI).

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

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

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

يستخدم نموذج التطبيق وحدة تسجيل مكتبة Python القياسية لإخراج السجلات. يتضمن نموذج التطبيق استدعاءات إلى المسجل كما هو موضح أدناه.

@app.get("/", response_class=HTMLResponse)
async def index(request: Request, session: Session = Depends(get_db_session)):
    logger.info("root called")
    statement = (
        select(Restaurant, func.avg(Review.rating).label("avg_rating"), func.count(Review.id).label("review_count"))
        .outerjoin(Review, Review.restaurant == Restaurant.id)
        .group_by(Restaurant.id)
    )

للوصول إلى دفق السجل، افتح تطبيقك في مدخل Microsoft Azure. حدد Monitoring>Log stream.

قد تستغرق الأحداث عدة دقائق لتظهر في سجلات التشخيص. تعرف على المزيد حول تسجيل الدخول إلى تطبيقات Python في سلسلة إعداد Azure Monitor لتطبيق Python الخاص بك.

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

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

azd down

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

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

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

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

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

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

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

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

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

  • يتم إنشاء خطة 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

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

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

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