البرنامج التعليمي: نشر تطبيق 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 مجاني قبل أن تبدأ.
عينات التطبيقات
لمتابعة هذا البرنامج التعليمي، قم باستنساخ أو تنزيل نموذج تطبيق 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:
- أدخل "قاعدة بيانات تطبيق ويب" في شـريط البحث في أعلى مدخل Microsoft Azure.
- حدد العنصر المسمى تطبيق ويب + قاعدة بيانات ضمن عنوان Marketplace. يمكنك أيضا الانتقال إلى معالج الإنشاء مباشرة.
الخطوة 2: في صفحة إنشاء تطبيق ويب + قاعدة بيانات ، املأ النموذج كما يلي.
- مجموعة الموارد → حَدد إنشاء جديد واستخدم اسم msdocs-laravel-mysql-tutorial.
- المنطقة → أي منطقة Azure قريبة منك.
- الاسم → msdocs-laravel-mysql-XYZ حيث XYZ هو أي ثلاثة أحرف عشوائية. يجب أن يكون هذا الاسم فريدا عبر Azure.
- مكدس وقت التشغيل → PHP 8.2.
- إضافة ذاكرة التخزين المؤقت Azure ل Redis؟ → نعم.
- خطة الاستضافة → الأساسية. عندما تكون مستعداً، يمكنك التوسع إلى مستوى أسعار الإنتاج لاحقاً.
- MySQL - يتم تحديد الخادم المرن لك بشكل افتراضي كمحرك قاعدة البيانات. قاعدة بيانات Azure لـ MySQL هي قاعدة بيانات MySQL مدارة بالكامل كخدمة على Azure، متوافقة مع أحدث إصدارات المجتمع.
- حدد "Review + create".
- وبعد اكتمال عملية التحقق، حدد Create.
الخطوة 3: يستغرق النشر بضع دقائق لإكماله. بعد اكتمال التوزيع، حدد الزر انتقال إلى المورد. يتم نقلك مباشرة إلى تطبيق App Service، ولكن يتم إنشاء الموارد التالية:
- مجموعة الموارد → الحاوية لكافة الموارد التي تم إنشاؤها.
- خطة خدمة التطبيق → تحدد موارد الحساب لخدمة التطبيق. يتم إنشاء خطة Linux في الطبقة الأساسية.
- تمثل خدمة التطبيقات → تطبيقك وتعمل في خطة خدمة التطبيق.
- → الشبكة الظاهرية متكاملة مع تطبيق خدمة التطبيق وتعزل نسبة استخدام الشبكة الخلفية.
- نقاط النهاية الخاصة → نقاط نهاية Access لخادم قاعدة البيانات وذاكرة التخزين المؤقت Redis في الشبكة الظاهرية.
- تمثل واجهات الشبكة → عناوين IP الخاصة، واحدة لكل نقطة من نقاط النهاية الخاصة.
- خادم Azure Database for MySQL المرن → يمكن الوصول إليه فقط من خلف نقطة النهاية الخاصة به. يتم إنشاء قاعدة بيانات ومستخدم لك على الخادم.
- → الوصول إلى ذاكرة التخزين المؤقت Azure ل Redis فقط من خلف نقطة النهاية الخاصة به.
- مناطق DNS الخاصة → تمكين دقة DNS لخادم قاعدة البيانات وذاكرة التخزين المؤقت Redis في الشبكة الظاهرية.
2 - إعداد اتصال قاعدة البيانات
الخطوة 1: في صفحة App Service، في القائمة اليسرى، حدد Configuration.
الخطوة 2:
- ابحث عن إعدادات التطبيق التي تبدأ AZURE_MYSQL_. تم إنشاؤها من قاعدة بيانات MySQL الجديدة بواسطة معالج الإنشاء.
- ابحث أيضا عن إعدادات التطبيق التي تبدأ AZURE_REDIS_. تم إنشاؤها من ذاكرة التخزين المؤقت Redis الجديدة بواسطة معالج الإنشاء. لإعداد التطبيق الخاص بك، هذا الاسم هو كل ما تحتاجه.
- إذا أردت ذلك، يمكنك تحديد الزر تحرير إلى يسار كل إعداد ورؤية قيمته أو نسخها. لاحقا، ستقوم بتغيير التعليمات البرمجية للتطبيق الخاص بك لاستخدام هذه الإعدادات.
الخطوة 3: في علامة التبويب إعدادات التطبيق في صفحة التكوين ، قم بإنشاء CACHE_DRIVER
إعداد:
- حدد New application setting.
- في حقل الاسم ، أدخل CACHE_DRIVER.
- في حقل القيمة ، أدخل redis.
- حدد موافق.
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.
- في شريط القوائم الموجود في الأعلى، حدد حفظ.
- عند المطالبة، حدد متابعة.
هام
APP_KEY
يتم استخدام القيمة هنا للراحة. بالنسبة لسيناريوهات الإنتاج، يجب إنشاؤه خصيصا للتوزيع الخاص بك باستخدام php artisan key:generate --show
في سطر الأوامر.
3 - توزيع نموذج التعليمات البرمجية
في هذه الخطوة، ستقوم بتكوين توزيع GitHub باستخدام GitHub. إنها مجرد واحدة من العديد من الطرق للتوزيع في خدمة التطبيق، ولكنها أيضا طريقة رائعة للحصول على تكامل مستمر في عملية التوزيع الخاصة بك. بشكل افتراضي، git push
كل إلى مستودع GitHub الخاص بك تبدأ إجراء الإنشاء والتوزيع. ستقوم بإجراء بعض التغييرات على قاعدة التعليمات البرمجية الخاصة بك باستخدام التعليمة البرمجية Visual Studio مباشرة في المتصفح، ثم السماح لإجراءات GitHub بالتوزيع تلقائيا نيابة عنك.
الخطوة 1: في نافذة مستعرض جديدة:
- قم بتسجيل الدخول إلى حساب GitHub الخاص بك.
- الانتقال إلى https://github.com/Azure-Samples/laravel-tasks.
- حدد تفريع:
- حدد Create fork.
الخطوة 2: في صفحة GitHub، افتح Visual Studio Code في المتصفح بالضغط على .
المفتاح.
الخطوة 3: في Visual Studio Code في المستعرض، افتح config/database.php في المستكشف. ابحث عن mysql
القسم وقم بإجراء التغييرات التالية:
- استبدل
DB_HOST
بـAZURE_MYSQL_HOST
. - استبدل
DB_DATABASE
بـAZURE_MYSQL_DBNAME
. - استبدل
DB_USERNAME
بـAZURE_MYSQL_USERNAME
. - استبدل
DB_PASSWORD
بـAZURE_MYSQL_PASSWORD
. - استبدل
DB_PORT
بـAZURE_MYSQL_PORT
. تذكر أنه تم إنشاء هذهAZURE_MYSQL_
الإعدادات لك بواسطة معالج الإنشاء.
الخطوة 4: في التكوين/database.php قم بالتمرير إلى قسم Redis cache
وقم بإجراء التغييرات التالية:
- استبدل
REDIS_HOST
بـAZURE_REDIS_HOST
. - استبدل
REDIS_PASSWORD
بـAZURE_REDIS_PASSWORD
. - استبدل
REDIS_PORT
بـAZURE_REDIS_PORT
. - استبدل
REDIS_CACHE_DB
بـAZURE_REDIS_DATABASE
. - في نفس القسم، أضف سطرا باستخدام
'scheme' => 'tls',
. يخبر هذا التكوين Laravel باستخدام التشفير للاتصال ب Redis. تذكر أنه تم إنشاء هذهAZURE_REDIS_
الإعدادات لك بواسطة معالج الإنشاء.
الخطوة 5:
- حدد ملحق البرنامج للتحكم بالمصادر.
- في مربع النص، اكتب رسالة تثبيت مثل
Configure DB & Redis variables
. - حدد Commit and Push.
الخطوة 6: مرة أخرى في صفحة App Service، في القائمة اليسرى، حدد Deployment Center.
الخطوة 7: في صفحة Deployment Center:
- في المصدر، حدد GitHub. بشكل افتراضي، يتم تحديد إجراءات GitHub كموفر بناء.
- سجل الدخول إلى حساب GitHub واتبع المطالبة لتخويل Azure.
- في المؤسسة، حدد حسابك.
- في Repository، حدد laravel-task.
- في الفرع، حدد رئيسي.
- في القائمة العلوية، حدد حفظ. تلتزم App Service بملف سير عمل في مستودع GitHub المختار، في الدليل
.github/workflows
.
الخطوة 8: في صفحة Deployment Center:
- حدد "Logs". تم بالفعل بدء تشغيل التوزيع.
- في عنصر السجل لتشغيل التوزيع حدد سجلات التوزيع/البناء.
الخطوة 9: يتم نقلك إلى مستودع GitHub الخاص بك وترى أن إجراء GitHub قيد التشغيل. يحدد ملف سير العمل مرحلتين منفصلتين، الإنشاء والتوزيع. انتظر حتى يتم تشغيل GitHub لإظهار حالة مكتمل. يستغرق حوالي 15 دقيقة.
4 - إنشاء مخطط قاعدة البيانات
يضع معالج الإنشاء خادم قاعدة بيانات MySQL خلف نقطة نهاية خاصة، بحيث يمكن الوصول إليه فقط من الشبكة الظاهرية. نظرا لأن تطبيق خدمة التطبيق متكامل بالفعل مع الشبكة الظاهرية، فإن أسهل طريقة لتشغيل عمليات ترحيل قاعدة البيانات مع قاعدة البيانات الخاصة بك هي مباشرة من داخل حاوية خدمة التطبيق.
الخطوة 1: مرة أخرى في صفحة App Service، في القائمة اليسرى، حدد SSH.
الخطوة 2: في محطة SSH الطرفية:
- شغّل
cd /home/site/wwwroot
. فيما يلي جميع الملفات المنشورة. - شغّل
php artisan migrate --force
. إذا نجحت، فإن App Service تتصل بنجاح بقاعدة بيانات MySQL. يمكن أن تستمر التغييرات التي يتم إجراؤها على الملفات في/home
فقط بعد عمليات إعادة تشغيل التطبيق. التغييرات خارج/home
غير مستمرة.
5 - تغيير جذر الموقع
تبدأ دورة حياة تطبيق Laravel في الدليل العام بدلاً من. تستخدم حاوية PHP الافتراضية ل App Service Nginx، والتي تبدأ في الدليل الجذر للتطبيق. لتغيير جذر الموقع، تحتاج إلى تغيير ملف تكوين Nginx في حاوية PHP (/etc/nginx/sites-available/default). لراحتك، يحتوي مستودع العينة على ملف تكوين مخصص يسمى افتراضي. كما هو ملاحظ سابقا، لا تريد استبدال هذا الملف باستخدام SSH shell، لأن التغيير خارج /home
وسيتم فقدانه بعد إعادة تشغيل التطبيق.
الخطوة 1:
- من القائمة اليسرى، حدد تكوين.
- حدد علامة التبويب إعدادات عامة.
الخطوة 2: في علامة التبويب الإعدادات العامة:
- في مربع أمر بدء التشغيل، أدخل الأمر التالي: cp /home/site/wwwroot/default /etc/nginx/sites-available/default&service nginx reload.
- حدد حفظ. يحل الأمر محل ملف تكوين Nginx في حاوية PHP ويعيد تشغيل Nginx. يضمن هذا التكوين إجراء نفس التغيير على الحاوية في كل مرة تبدأ فيها.
6 - تصفح إلى التطبيق
الخطوة 1: في صفحة App Service:
- من القائمة اليسرى، حدد نظرة عامة.
- حدد عنوان URL لتطبيقك. يمكنك أيضًا الانتقال مباشرة إلى
https://<app-name>.azurewebsites.net
.
الخطوة 2: إضافة بعض المهام إلى القائمة. تهانينا، أنت تقوم بتشغيل تطبيق PHP آمن يستند إلى البيانات في Azure App Service.
تلميح
تطبيق العينة ينفذ نمط ذاكرة التخزين المؤقت المصاحبة . عند إعادة تحميل الصفحة بعد إجراء تغييرات على البيانات، يظهر وقت الاستجابة في صفحة الويب وقتا أسرع بكثير لأنه يقوم بتحميل البيانات من ذاكرة التخزين المؤقت بدلا من قاعدة البيانات.
7 - دفق سجلات التشخيص
تلتقط Azure App Service جميع الرسائل التي تم تسجيلها في وحدة التحكم لمساعدتك في تشخيص المشكلات المتعلقة بالتطبيق الخاص بك. يقوم نموذج التطبيق بإخراج رسائل سجل وحدة التحكم في كل نقطة من نقاط النهاية الخاصة به لتوضيح هذه الإمكانية. بشكل افتراضي، تقوم وظيفة تسجيل Laravel (على سبيل المثال، Log::info()
) بإخراج ملف محلي. يجعل إعداد التطبيق الخاص بك LOG_CHANNEL
من وقت سابق إدخالات السجل قابلة للوصول من دفق سجل App Service.
الخطوة 1: في صفحة App Service:
- من القائمة اليسرى، حدد تسجيلات خدمة التطبيق.
- ضمن سجل التطبيقات، حدد نظام الملفات.
الخطوة 2: من القائمة اليسرى، حدد Log stream. ترى سجلات تطبيقك، بما في ذلك سجلات النظام الأساسي والسجلات من داخل الحاوية.
تنظيف الموارد
عند الانتهاء، يمكنك حذف جميع الموارد من اشتراك Azure الخاص بك عن طريق حذف مجموعة الموارد.
الخطوة 1: في شريط البحث أعلى مدخل Microsoft Azure:
- أدخل اسم مجموعة الموارد.
- حدد مجموعة الموارد.
الخطوة 2: في صفحة مجموعة الموارد، حدد حذف مجموعة الموارد.
الخطوة 3:
- أدخل اسم مجموعة الموارد لتأكيد حذفك.
- حدد حذف.
الأسئلة الشائعة
- كم يكلف هذا الإعداد؟
- كيف أعمل الاتصال بقاعدة بيانات MySQL المؤمنة خلف الشبكة الظاهرية باستخدام أدوات أخرى؟
- كيف يعمل تطوير التطبيقات المحلية مع إجراءات GitHub؟
- لماذا توزيع إجراءات GitHub بطيء جدًا؟
كم يكلف هذا الإعداد؟
أسعار موارد الإنشاء كما يلي:
- يتم إنشاء خطة 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
الوظيفة:
- في نهاية المهمة
build
، قم بتحميل الملفات كقطع أثرية. - في بداية المهمة
deploy
، قم بتنزيل البيانات الاصطناعية.
يتم إنفاق معظم الوقت الذي تستغرقه العملية المكونة من وظيفتين في تحميل وتنزيل البيانات الاصطناعية. إذا أردت، يمكنك تبسيط ملف سير العمل عن طريق دمج الوظيفتين في واحدة، ما يلغي الحاجة إلى خطوات التحميل والتنزيل.
الخطوات التالية
تقدم إلى البرنامج التعليمي التالي لمعرفة كيفية تأمين تطبيقك باستخدام مجال وشهادة مخصصين.
أو، يمكنك التحقق من الموارد الأخرى: