البرنامج التعليمي: نشر تطبيق PHP وMySQL وRedis إلى Azure App Service

يوضح هذا البرنامج التعليمي كيفية إنشاء تطبيق PHP آمن في خدمة تطبيق Azure المتصل بقاعدة بيانات MySQL (باستخدام قاعدة بيانات Azure لخادم MySQL المرن). ستقوم أيضا بنشر ذاكرة التخزين المؤقت Azure ل Redis لتمكين التعليمات البرمجية للتخزين المؤقت في التطبيق الخاص بك. Azure App Service هي خدمة استضافة ويب قابلة للتطوير بدرجة كبيرة وتصحيح ذاتي يمكنها نشر التطبيقات بسهولة على Windows أو Linux. عند الانتهاء، سيكون لديك تطبيق Laravel يعمل على Azure App Service في Linux.

Screenshot of the Azure app example titled Task List showing new tasks added.

إذا لم يكن لديك اشتراك في Azure، فأنشئ حساب Azure مجاني قبل أن تبدأ.

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

لمتابعة هذا البرنامج التعليمي، قم باستنساخ أو تنزيل نموذج تطبيق Laravel من المستودع:

git clone https://github.com/Azure-Samples/laravel-tasks.git

إذا كنت تريد تشغيل التطبيق محليا، فقم بما يلي:

  • في .env، قم بتكوين إعدادات قاعدة البيانات (مثل DB_DATABASE، DB_USERNAMEو DB_PASSWORD) باستخدام الإعدادات في قاعدة بيانات MySQL المحلية. تحتاج إلى خادم MySQL محلي لتشغيل هذه العينة.

  • من جذر المستودع، ابدأ Laravel بالأوامر التالية:

    composer install
    php artisan migrate
    php artisan key:generate
    php artisan serve
    

1 - إنشاء خدمة التطبيقات وموارد MySQL

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

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

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

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

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

A screenshot showing how to use the search box in the top tool bar to find the Web App + Database creation wizard.

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

  1. مجموعة الموارد → حَدد إنشاء جديد واستخدم اسم msdocs-laravel-mysql-tutorial.
  2. المنطقة → أي منطقة Azure قريبة منك.
  3. الاسمmsdocs-laravel-mysql-XYZ حيث XYZ هو أي ثلاثة أحرف عشوائية. يجب أن يكون هذا الاسم فريدا عبر Azure.
  4. مكدس وقت التشغيل → PHP 8.2.
  5. إضافة ذاكرة التخزين المؤقت Azure ل Redis؟ → نعم.
  6. خطة الاستضافةالأساسية. عندما تكون مستعداً، يمكنك التوسع إلى مستوى أسعار الإنتاج لاحقاً.
  7. MySQL - يتم تحديد الخادم المرن لك بشكل افتراضي كمحرك قاعدة البيانات. قاعدة بيانات Azure لـ MySQL هي قاعدة بيانات MySQL مدارة بالكامل كخدمة على Azure، متوافقة مع أحدث إصدارات المجتمع.
  8. حدد "Review + create".
  9. وبعد اكتمال عملية التحقق، حدد Create.

A screenshot showing how to configure a new app and database in the Web App + Database wizard.

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

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

A screenshot showing the deployment process completed.

2 - إعداد اتصال قاعدة البيانات

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

A screenshot showing how to open the configuration page in App Service.

الخطوة 2:

  1. ابحث عن إعدادات التطبيق التي تبدأ AZURE_MYSQL_. تم إنشاؤها من قاعدة بيانات MySQL الجديدة بواسطة معالج الإنشاء.
  2. ابحث أيضا عن إعدادات التطبيق التي تبدأ AZURE_REDIS_. تم إنشاؤها من ذاكرة التخزين المؤقت Redis الجديدة بواسطة معالج الإنشاء. لإعداد التطبيق الخاص بك، هذا الاسم هو كل ما تحتاجه.
  3. إذا أردت ذلك، يمكنك تحديد الزر تحرير إلى يسار كل إعداد ورؤية قيمته أو نسخها. لاحقا، ستقوم بتغيير التعليمات البرمجية للتطبيق الخاص بك لاستخدام هذه الإعدادات.

A screenshot showing how to create an app setting.

الخطوة 3: في علامة التبويب إعدادات التطبيق في صفحة التكوين ، قم بإنشاء CACHE_DRIVER إعداد:

  1. حدد New application setting.
  2. في حقل الاسم ، أدخل CACHE_DRIVER.
  3. في حقل القيمة ، أدخل redis.
  4. حدد موافق. CACHE_DRIVER يستخدم بالفعل في التعليمات البرمجية لتطبيق Laravel. يخبر هذا الإعداد Laravel باستخدام Redis كذاكرة التخزين المؤقت الخاصة به.

A screenshot showing how to see the autogenerated connection string.

الخطوة 4: باستخدام نفس الخطوات في الخطوة 3، قم بإنشاء إعدادات التطبيق التالية:

  • MYSQL_ATTR_SSL_CA: استخدم /home/site/wwwroot/ssl/DigiCertGlobalRootCA.crt.pem كقيمة. يشير إعداد التطبيق هذا إلى مسار شهادة TLS/SSL التي تحتاجها للوصول إلى خادم MySQL. يتم تضمينه في مستودع العينة للراحة.
  • LOG_CHANNEL: استخدم stderr كقيمة. يخبر هذا الإعداد Laravel بتوجيه السجلات إلى stderr، ما يجعله متاحا لسجلات App Service.
  • APP_DEBUG: استخدم صواب كقيمة. إنه متغير تصحيح الأخطاء Laravel الذي يمكن صفحات وضع التصحيح.
  • APP_KEY: استخدم base64:Dsz40HWbCqnq0oxMsjq7fItmKIeBfCBGORfspaI1Kw= كقيمة. إنه متغير تشفير Laravel.
  1. في شريط القوائم الموجود في الأعلى، حدد حفظ.
  2. عند المطالبة، حدد متابعة.

A screenshot showing how to save settings in the configuration page.

هام

APP_KEY يتم استخدام القيمة هنا للراحة. بالنسبة لسيناريوهات الإنتاج، يجب إنشاؤه خصيصا للتوزيع الخاص بك باستخدام php artisan key:generate --show في سطر الأوامر.

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

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

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

  1. قم بتسجيل الدخول إلى حساب GitHub الخاص بك.
  2. الانتقال إلى https://github.com/Azure-Samples/laravel-tasks.
  3. حدد تفريع:
  4. حدد Create fork.

A screenshot showing how to create a fork of the sample GitHub repository.

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

A screenshot showing how to open the Visual Studio Code browser experience in GitHub.

الخطوة 3: في Visual Studio Code في المتصفح، افتح config/database.php في المستكشف. ابحث عن mysql القسم وقم بإجراء التغييرات التالية:

  1. استبدل DB_HOST بـ AZURE_MYSQL_HOST.
  2. استبدل DB_DATABASE بـ AZURE_MYSQL_DBNAME.
  3. استبدل DB_USERNAME بـ AZURE_MYSQL_USERNAME.
  4. استبدل DB_PASSWORD بـ AZURE_MYSQL_PASSWORD.
  5. استبدل DB_PORT بـ AZURE_MYSQL_PORT. تذكر أنه تم إنشاء هذه AZURE_MYSQL_ الإعدادات لك بواسطة معالج الإنشاء.

A screenshot showing Visual Studio Code in the browser and an opened file with modified MySQL variables.

الخطوة 4: في config/database.php قم بالتمرير إلى قسم Redis cache وقم بإجراء التغييرات التالية:

  1. استبدل REDIS_HOST بـ AZURE_REDIS_HOST.
  2. استبدل REDIS_PASSWORD بـ AZURE_REDIS_PASSWORD.
  3. استبدل REDIS_PORT بـ AZURE_REDIS_PORT.
  4. استبدل REDIS_CACHE_DB بـ AZURE_REDIS_DATABASE.
  5. في نفس القسم، أضف سطرا باستخدام 'scheme' => 'tls',. يخبر هذا التكوين Laravel باستخدام التشفير للاتصال ب Redis. تذكر أنه تم إنشاء هذه AZURE_REDIS_ الإعدادات لك بواسطة معالج الإنشاء.

A screenshot showing Visual Studio Code in the browser and an opened file with modified Redis variables.

الخطوة 5:

  1. حدد ملحق البرنامج للتحكم بالمصادر.
  2. في مربع النص، اكتب رسالة تثبيت مثل Configure DB & Redis variables.
  3. حدد Commit and Push.

A screenshot showing the changes being committed and pushed to GitHub.

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

A screenshot showing how to open the deployment center in App Service.

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

  1. في المصدر، حدد GitHub. بشكل افتراضي، يتم تحديد إجراءات GitHub كموفر بناء.
  2. سجل الدخول إلى حساب GitHub واتبع المطالبة لتخويل Azure.
  3. في المؤسسة، حدد حسابك.
  4. في Repository، حدد laravel-task.
  5. في الفرع، حدد رئيسي.
  6. في القائمة العلوية، حدد حفظ. تلتزم App Service بملف سير عمل في مستودع GitHub المختار، في الدليل .github/workflows.

A screenshot showing how to configure CI/CD using GitHub Actions.

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

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

A screenshot showing how to open deployment logs in the deployment center.

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

A screenshot showing a GitHub run in progress.

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

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

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

A screenshot showing how to open the SSH shell for your app from the Azure portal.

الخطوة 2: في محطة SSH الطرفية:

  1. شغّل cd /home/site/wwwroot. فيما يلي جميع الملفات المنشورة.
  2. شغّل php artisan migrate --force. إذا نجحت، فإن App Service تتصل بنجاح بقاعدة بيانات MySQL. يمكن أن تستمر التغييرات التي يتم إجراؤها على الملفات في /home فقط بعد عمليات إعادة تشغيل التطبيق. التغييرات خارج /home غير مستمرة.

A screenshot showing the commands to run in the SSH shell and their output.

5 - تغيير جذر الموقع

تبدأ دورة حياة تطبيق Laravel في الدليل العام بدلاً من. تستخدم حاوية PHP الافتراضية ل App Service Nginx، والتي تبدأ في الدليل الجذر للتطبيق. لتغيير جذر الموقع، تحتاج إلى تغيير ملف تكوين Nginx في حاوية PHP (/etc/nginx/sites-available/default). لراحتك، يحتوي مستودع العينة على ملف تكوين مخصص يسمى افتراضي. كما هو ملاحظ سابقا، لا تريد استبدال هذا الملف باستخدام SSH shell، لأن التغيير خارج /home وسيتم فقدانه بعد إعادة تشغيل التطبيق.

الخطوة 1:

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

A screenshot showing how to open the general settings tab in the configuration page of App Service.

الخطوة 2: في علامة التبويب الإعدادات العامة:

  1. في مربع أمر بدء التشغيل، أدخل الأمر التالي: cp /home/site/wwwroot/default /etc/nginx/sites-available/default&service nginx reload.
  2. حدد حفظ. يحل الأمر محل ملف تكوين Nginx في حاوية PHP ويعيد تشغيل Nginx. يضمن هذا التكوين إجراء نفس التغيير على الحاوية في كل مرة تبدأ فيها.

A screenshot showing how to configure a startup command in App Service.

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

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

  1. من القائمة اليسرى، حدد نظرة عامة.
  2. حدد عنوان URL لتطبيقك. يمكنك أيضًا الانتقال مباشرة إلىhttps://<app-name>.azurewebsites.net.

A screenshot showing how to launch an App Service from the Azure portal.

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

A screenshot of the Laravel app running in App Service.

تلميح

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

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

تلتقط Azure App Service جميع الرسائل التي تم تسجيلها في وحدة التحكم لمساعدتك في تشخيص المشكلات المتعلقة بالتطبيق الخاص بك. يقوم نموذج التطبيق بإخراج رسائل سجل وحدة التحكم في كل نقطة من نقاط النهاية الخاصة به لتوضيح هذه الإمكانية. بشكل افتراضي، تقوم وظيفة تسجيل Laravel (على سبيل المثال، Log::info()) بإخراج ملف محلي. يجعل إعداد التطبيق الخاص بك LOG_CHANNEL من وقت سابق إدخالات السجل قابلة للوصول من دفق سجل App Service.

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

  1. من القائمة اليسرى، حدد تسجيلات خدمة التطبيق.
  2. ضمن سجل التطبيقات، حدد نظام الملفات.

A screenshot showing how to enable native logs in App Service in the Azure portal.

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

A screenshot showing how to view the log stream in the Azure portal.

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

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

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

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

A screenshot showing how to search for and navigate to a resource group in the Azure portal.

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

A screenshot showing the location of the Delete Resource Group button in the Azure portal.

الخطوة 3:

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

A screenshot of the confirmation dialog for deleting a resource group in the Azure portal. :

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

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

أسعار موارد الإنشاء كما يلي:

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

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

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

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

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

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

لماذا توزيع إجراءات GitHub بطيء جدًا؟

يعرف ملف سير العمل الذي تم إنشاؤه تلقائيا من خدمة التطبيق البناء ثم التوزيع والتشغيل على وظيفتين. لأن كل مهمة تعمل في بيئتها النظيفة الخاصة، يضمن ملف سير العمل أن deploy الوظيفة لديها حق الوصول إلى الملفات من build الوظيفة:

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

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

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

أو، يمكنك التحقق من الموارد الأخرى: