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

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

لقطة شاشة لمثال تطبيق Azure بعنوان قائمة المهام تظهر مهامًا جديدة مضافة.

إذا لم يكن لديك اشتراك في 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. يمكنك أيضا الانتقال إلى معالج الإنشاء مباشرة.

لقطة شاشة تعرض كيفية استخدام مربع البحث في شريط الأدوات العلوي للعثور على تطبيق الويب + معالج إنشاء قاعدة البيانات.

الخطوة 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.

لقطة شاشة توضح كيفية تكوين تطبيق جديد وقاعدة بيانات جديدة في تطبيق الويب + معالج قاعدة البيانات.

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

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

لقطة شاشة تعرض الانتهاء من عملية التوزيع.

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

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

لقطة شاشة توضح كيفية فتح صفحة التكوين في خدمة التطبيقات.

الخطوة 2:

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

لقطة شاشة توضح كيفية إنشاء إعداد التطبيق.

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

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

لقطة شاشة توضح كيفية رؤية سلسلة الاتصال المُنشأ تلقائيًا.

الخطوة 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. عند المطالبة، حدد متابعة.

لقطة شاشة توضح كيفية حفظ الإعدادات في صفحة التكوين.

هام

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.

لقطة شاشة توضح كيفية إنشاء نسخة مستودع من نموذج مستودع GitHub.

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

لقطة شاشة توضح كيفية فتح تجربة متصفح تعليمة برمجية Visual Studio في 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_ الإعدادات لك بواسطة معالج الإنشاء.

لقطة شاشة تعرض Visual Studio Code في المتصفح وملف مفتوح مع متغيرات MySQL المعدلة.

الخطوة 4: في التكوين/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_ الإعدادات لك بواسطة معالج الإنشاء.

لقطة شاشة تعرض Visual Studio Code في المتصفح وملف مفتوح مع متغيرات Redis المعدلة.

الخطوة 5:

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

لقطة شاشة تعرض التغييرات التي يتم تنفيذها ودفعها إلى GitHub.

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

لقطة شاشة توضح كيفية فتح مركز التوزيع في خدمة التطبيقات.

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

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

لقطة شاشة توضح كيفية تكوين CI / CD باستخدام إجراءات GitHub.

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

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

لقطة شاشة توضح كيفية فتح سجلات التوزيع في مركز التوزيع.

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

لقطة شاشة تعرض تشغيل GitHub قيد التقدم.

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

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

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

لقطة شاشة توضح كيفية فتح SSH shell لتطبيقك من مدخل Microsoft Azure.

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

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

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

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

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

الخطوة 1:

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

لقطة شاشة توضح علامة تبويب الإعدادات العامة كيفية فتح صفحة التكوين في خدمة التطبيقات.

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

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

لقطة شاشة توضح كيفية تكوين أمر بدء التشغيل في خدمة التطبيقات.

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

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

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

لقطة شاشة توضح كيفية إطلاق خدمة التطبيق في مدخل Microsoft Azure

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

لقطة شاشة لتطبيق Laravel قيد التشغيل في خدمة التطبيقات.

تلميح

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

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

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

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

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

لقطة شاشة توضح كيفية تمكين السجلات الأصلية في خدمة التطبيقات في مدخل Microsoft Azure.

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

لقطة شاشة توضح كيفية عرض تدفق السجل في مدخل Microsoft Azure.

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

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

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

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

لقطة شاشة توضح كيفية البحث عن مجموعة موارد والتنقل إليها في مدخل Microsoft Azure.

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

لقطة شاشة تعرض موقع زر حذف مجموعة الموارد في مدخل Microsoft Azure.

الخطوة 3:

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

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

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

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

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

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

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

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

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

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