نشر تطبيق ويب Node.js + MongoDB إلى Azure
توفر Azure App Service خدمة استضافة ويب قابلة للتطوير بدرجة كبيرة وذاتية التصحيح باستخدام نظام التشغيل Linux. يوضح هذا البرنامج التعليمي كيفية إنشاء تطبيق Node.js آمن في Azure App Service المتصل بقاعدة بيانات Azure Cosmos DB لقاعدة بيانات MongoDB . عند الانتهاء، سيكون لديك تطبيق Express.js يعمل على Azure App Service على Linux.
تفترض هذه المقالة أنك على دراية بالفعل بتطويرNode.js وتثبيت Node وMongoDB محلياً. تحتاج أيضاً إلى حساب Azure باشتراك نشط. إذا لم يكن لديك حساب Azure، يمكنك إنشاء حساب مجانا.
عينات التطبيقات
لمتابعة هذا البرنامج التعليمي، قم باستنساخ نموذج التطبيق أو تنزيله من المستودع https://github.com/Azure-Samples/msdocs-nodejs-mongodb-azure-sample-app.
git clone https://github.com/Azure-Samples/msdocs-nodejs-mongodb-azure-sample-app.git
إذا كنت تريد تشغيل التطبيق محليا، فقم بما يلي:
- تثبيت تبعيات الحزمة عن طريق تشغيل
npm install
. - انسخ الملف
.env.sample
إلى.env
وقم بتعبئة قيمة DATABASE_URL بعنوان URL MongoDB (على سبيل المثال mongodb://localhost:27017/). - ابدأ في تشغيل التطبيق باستخدام
npm start
. - لعرض التطبيق، استعرض للوصول إلى
http://localhost:3000
.
1. إنشاء App Service وAzure Cosmos DB
في هذه الخطوة، يمكنك إنشاء موارد Azure. تنشئ الخطوات المستخدمة في هذا البرنامج التعليمي مجموعة من الموارد الآمنة بشكل افتراضي التي تتضمن App Service وAzure Cosmos DB ل MongoDB. بالنسبة لعملية الإنشاء، ستحدد:
- اسم تطبيق الويب. هو الاسم المستخدم كجزء من اسم DNS لتطبيق الويب الخاص بك في شكل
https://<app-name>.azurewebsites.net
. - المنطقة لتشغيل التطبيق فعلياً في العالم.
- مكدس الذاكرة المؤقتة لوقت التشغيل للتطبيق. هو المكان الذي تحدد فيه إصدار Node لاستخدامه لتطبيقك.
- خطة الاستضافة للتطبيق. إنها طبقة الأسعار التي تتضمن مجموعة الميزات وسعة التحجيم لتطبيقك.
- مجموعة الموارد للتطبيق. تتيح لك مجموعة الموارد تجميع (في حاوية منطقية) جميع موارد Azure المطلوبة للتطبيق.
سجّل الدخول إلى مدخل Azure واتبع هذه الخطوات لإنشاء مورد Azure App Service.
الخطوة 1: في مدخل Microsoft Azure:
- أدخل "قاعدة بيانات تطبيق ويب" في شـريط البحث في أعلى مدخل Microsoft Azure.
- حدد العنصر المسمى تطبيق ويب + قاعدة بيانات ضمن عنوان Marketplace. يمكنك أيضا الانتقال إلى معالج الإنشاء مباشرة.
الخطوة 2: في صفحة إنشاء تطبيق ويب + قاعدة بيانات ، املأ النموذج كما يلي.
- مجموعة الموارد → حَدد Create new واستخدم اسم msdocs-expressjs-mongodb-tutorial.
- المنطقة → أي منطقة Azure قريبة منك.
- الاسم → msdocs-expressjs-mongodb-XYZ حيث XYZ يمثل أي ثلاثة أحرف عشوائية. يجب أن يكون هذا الاسم فريدا عبر Azure.
- مكدس وقت التشغيل → العقدة 16 LTS.
- خطة الاستضافة → الأساسية. عندما تكون مستعداً، يمكنك التوسع إلى مستوى أسعار الإنتاج لاحقاً.
- يتم تحديد Azure Cosmos DB ل MongoDB بشكل افتراضي كمحرك قاعدة البيانات. Azure Cosmos DB هي قاعدة بيانات سحابية أصلية تقدم واجهة برمجة تطبيقات متوافقة مع MongoDB بنسبة 100%. لاحظ اسم قاعدة البيانات الذي تم إنشاؤه لك (<app-name-database>). سوف تحتاجها لاحقًا.
- حدد "Review + create".
- وبعد اكتمال عملية التحقق، حدد Create.
الخطوة 3: يستغرق النشر بضع دقائق لإكماله. بعد اكتمال التوزيع، حدد الزر انتقال إلى المورد. يتم نقلك مباشرة إلى تطبيق App Service، ولكن يتم إنشاء الموارد التالية:
- مجموعة الموارد → الحاوية لكافة الموارد التي تم إنشاؤها.
- خطة خدمة التطبيق → تحدد موارد الحساب لخدمة التطبيق. يتم إنشاء خطة Linux في الطبقة الأساسية.
- تمثل خدمة التطبيقات → تطبيقك وتعمل في خطة خدمة التطبيق.
- → الشبكة الظاهرية متكاملة مع تطبيق خدمة التطبيق وتعزل نسبة استخدام الشبكة الخلفية.
- نقطة النهاية الخاصة → الوصول إلى نقطة النهاية لمورد قاعدة البيانات في الشبكة الظاهرية.
- واجهة الشبكة → تمثل عنوان IP خاصاً لنقطة النهاية الخاصة.
- → يمكن الوصول إلى Azure Cosmos DB ل MongoDB فقط من خلف نقطة النهاية الخاصة. يتم إنشاء قاعدة بيانات ومستخدم لك على الخادم.
- تمكن منطقة DNS الخاصة → دقة DNS لخادم Azure Cosmos DB في الشبكة الظاهرية.
2 - إعداد اتصال قاعدة البيانات
قام معالج الإنشاء بإنشاء عنوان MongoDB URI لك بالفعل، ولكن التطبيق الخاص بك يحتاج إلى متغير DATABASE_URL
ومتغير DATABASE_NAME
. في هذه الخطوة، يمكنك إنشاء إعدادات التطبيق بالتنسيق الذي يحتاجه تطبيقك.
الخطوة 1: في صفحة App Service، في القائمة اليسرى، حدد Configuration.
الخطوة 2: في علامة التبويب إعدادات التطبيق في صفحة التكوين ، قم بإنشاء DATABASE_NAME
إعداد:
- حدد New application setting.
- في حقل الاسم، أدخِل DATABASE_NAME.
- في حقل القيمة، أدخل اسم قاعدة البيانات الذي تم إنشاؤه تلقائيا من معالج الإنشاء، والذي يبدو مثل msdocs-docs-laravel-mysql-XYZ-database.
- حدد موافق.
الخطوة 3:
- مرر إلى أسفل الصفحة، وحدد سلسلة الاتصال MONGODB_URI. تم إنشاؤه بواسطة معالج الإنشاء.
- في حقل القيمة، حدد الزر نسخ، والصق القيمة في ملف نصي في الخطوة التالية. إنه يوجد بتنسيق URI لسلسلة اتصال MongoDB.
- حدد إلغاء.
الخطوة 4:
- باستخدام نفس الخطوات في الخطوة 2، أنشئ إعداد تطبيق يسمى DATABASE_URL، وعيّن القيمة إلى القيمة التي نسختها من سلسلة الاتصال
MONGODB_URI
(أيmongodb://...
). - في شريط القوائم الموجود في الأعلى، حدد حفظ.
- عند المطالبة، حدد متابعة.
3 - توزيع عينة التعليمات البرمجية
في هذه الخطوة، ستقوم بتكوين توزيع GitHub باستخدام GitHub. إنها مجرد واحدة من العديد من الطرق للتوزيع في خدمة التطبيق، ولكنها أيضا طريقة رائعة للحصول على تكامل مستمر في عملية التوزيع الخاصة بك. بشكل افتراضي، git push
كل إلى مستودع GitHub الخاص بك سيبدأ إجراء الإنشاء والتوزيع.
الخطوة 1: في نافذة مستعرض جديدة:
- قم بتسجيل الدخول إلى حساب GitHub الخاص بك.
- الانتقال إلى https://github.com/Azure-Samples/msdocs-nodejs-mongodb-azure-sample-app.
- حدد تفريع:
- حدد Create fork.
الخطوة 2: في صفحة GitHub، افتح Visual Studio Code في المتصفح بالضغط على .
المفتاح.
الخطوة 3: في Visual Studio Code في المستعرض، افتح config/connection.js في المستكشف.
في الدالة getConnectionInfo
، راجع استخدام إعدادات التطبيق التي قمت بإنشائها سابقاً لاتصال MongoDB (DATABASE_URL
وDATABASE_NAME
).
الخطوة 4: مرة أخرى في صفحة App Service، في القائمة اليسرى، حدد Deployment Center.
الخطوة 5: في صفحة Deployment Center:
- في المصدر، حدد GitHub. بشكل افتراضي، يتم تحديد إجراءات GitHub كموفر بناء.
- سجل الدخول إلى حساب GitHub واتبع المطالبة لتخويل Azure.
- في المؤسسة، حدد حسابك.
- في المستودع، حدد msdocs-nodejs-mongodb-azure-sample-app.
- في الفرع، حدد رئيسي.
- في القائمة العلوية، حدد حفظ. تلتزم App Service بملف سير عمل في مستودع GitHub المختار، في الدليل
.github/workflows
.
الخطوة 6: في صفحة Deployment Center:
- حدد "Logs". تم بالفعل بدء تشغيل التوزيع.
- في عنصر السجل لتشغيل التوزيع حدد سجلات التوزيع/البناء.
الخطوة 7: يتم نقلك إلى مستودع GitHub الخاص بك وترى أن إجراء GitHub قيد التشغيل. يحدد ملف سير العمل مرحلتين منفصلتين، الإنشاء والتوزيع. انتظر حتى يتم تشغيل GitHub لإظهار حالة مكتمل. يستغرق حوالي 15 دقيقة.
4- الاستعراض وصولاً إلى التطبيق
الخطوة 1: في صفحة App Service:
- من القائمة اليسرى، حدد نظرة عامة.
- حدد عنوان URL لتطبيقك. يمكنك أيضًا الانتقال مباشرة إلى
https://<app-name>.azurewebsites.net
.
الخطوة 2: إضافة بعض المهام إلى القائمة. تهانينا، أنت تقوم بتشغيل تطبيق Node.js آمن مستند إلى البيانات في Azure App Service.
5. دفق سجلات التشخيص
تلتقط Azure App Service جميع الرسائل التي تم تسجيلها في وحدة التحكم لمساعدتك في تشخيص المشكلات المتعلقة بالتطبيق الخاص بك. يقوم نموذج التطبيق بإخراج رسائل سجل وحدة التحكم في كل نقطة من نقاط النهاية الخاصة به لتوضيح هذه الإمكانية. على سبيل المثال، تُصدر نقطة النهاية get
رسالة بشأن عدد المهام التي تم استردادها من قاعدة البيانات وتظهر رسالة خطأ إذا حدث خطأ ما.
router.get('/', function(req, res, next) {
Task.find()
.then((tasks) => {
const currentTasks = tasks.filter(task => !task.completed);
const completedTasks = tasks.filter(task => task.completed === true);
console.log(`Total tasks: ${tasks.length} Current tasks: ${currentTasks.length} Completed tasks: ${completedTasks.length}`)
res.render('index', { currentTasks: currentTasks, completedTasks: completedTasks });
})
.catch((err) => {
console.log(err);
res.send('Sorry! Something went wrong.');
});
});
الخطوة 1: في صفحة App Service:
- من القائمة اليسرى، حدد تسجيلات خدمة التطبيق.
- ضمن سجل التطبيقات، حدد نظام الملفات.
الخطوة 2: من القائمة اليسرى، حدد Log stream. ترى سجلات تطبيقك، بما في ذلك سجلات النظام الأساسي والسجلات من داخل الحاوية.
6 - فحص الملفات الموزعة باستخدام Kudu
توفر Azure App Service وحدة تحكم تشخيصية مستندة إلى الويب تسمى Kudu تتيح لك فحص بيئة استضافة الخادم لتطبيق الويب الخاص بك. باستخدام Kudu، يمكنك عرض الملفات المنشورة في Azure، ومراجعة محفوظات نشر التطبيق، وحتى فتح جلسة SSH في بيئة الاستضافة.
الخطوة 1: في صفحة App Service:
- من القائمة اليمنى، حدد أدوات متقدمة.
- حدد Go. يمكنك أيضًا الانتقال مباشرة إلى
https://<app-name>.scm.azurewebsites.net
.
الخطوة 2: في صفحة Kudu، حدد Deployments.
إذا قمت بتوزيع التعليمة البرمجية في App Service باستخدام توزيع zip أو Git، فسترى محفوظات عمليات توزيع تطبيق الويب الخاص بك.
الخطوة 3: ارجع إلى صفحة Kudu الرئيسية وحدد الموقع wwwroot.
يمكنك مشاهدة بنية المجلد الموزع والنقر لاستعراض الملفات وعرضها.
7. تنظيف الموارد
عند الانتهاء، يمكنك حذف جميع الموارد من اشتراك Azure الخاص بك عن طريق حذف مجموعة الموارد.
الخطوة 1: في شريط البحث أعلى مدخل Microsoft Azure:
- أدخل اسم مجموعة الموارد.
- حدد مجموعة الموارد.
الخطوة 2: في صفحة مجموعة الموارد، حدد حذف مجموعة الموارد.
الخطوة 3:
- أدخل اسم مجموعة الموارد لتأكيد حذفك.
- حدد حذف.
الأسئلة المتداولة
- كم يكلف هذا الإعداد؟
- كيف أعمل الاتصال بخادم Azure Cosmos DB المؤمن خلف الشبكة الظاهرية باستخدام أدوات أخرى؟
- كيف يعمل تطوير التطبيقات المحلية مع إجراءات GitHub؟
- لماذا توزيع إجراءات GitHub بطيء جدًا؟
كم يكلف هذا الإعداد؟
أسعار موارد الإنشاء كما يلي:
- يتم إنشاء خطة App Service في الطبقة الأساسية، ويمكن تغيير حجمها زيادة أو نقصانًا. راجع تسعير App Service.
- يتم إنشاء خادم Azure Cosmos DB في منطقة واحدة ويمكن توزيعه على مناطق أخرى. راجع أسعار Azure Cosmos DB.
- لا تتحمل الشبكة الظاهرية رسوما ما لم تقم بتكوين وظائف إضافية، مثل التناظر. راجع أسعار شبكة Azure الظاهرية.
- تتحمل منطقة DNS الخاصة رسوما صغيرة. راجع أسعار Azure DNS.
كيف أعمل الاتصال بخادم Azure Cosmos DB المؤمن خلف الشبكة الظاهرية باستخدام أدوات أخرى؟
- للوصول الأساسي من أداة سطر الأوامر، يمكنك التشغيل
mongosh
من وحدة SSH الطرفية للتطبيق. لا تأتي حاوية التطبيق معmongosh
، لذا يجب عليك تثبيتها يدوياً. تذكر أن العميل المثبت لا يستمر عبر عمليات إعادة تشغيل التطبيق. - للاتصال من عميل MongoDB GUI، يجب أن يكون جهازك داخل الشبكة الظاهرية. على سبيل المثال، قد يكون جهاز Azure ظاهري متصل بإحدى الشبكات الفرعية، أو جهازا في شبكة محلية لديه اتصال VPN من موقع إلى موقع مع شبكة Azure الظاهرية.
- للاتصال من MongoDB shell من صفحة إدارة Azure Cosmos DB في المدخل، يجب أن يكون جهازك أيضا داخل الشبكة الظاهرية. يمكنك بدلا من ذلك فتح جدار حماية خادم Azure Cosmos DB لعنوان IP الخاص بالجهاز المحلي، ولكنه يزيد من سطح الهجوم للتكوين الخاص بك.
كيف يعمل تطوير التطبيقات المحلية مع إجراءات GitHub؟
خذ ملف سير العمل الذي تم إنشاؤه تلقائيا من خدمة التطبيق كمثال، git push
كل يبدأ تشغيل بنية وتوزيع جديد. من نسخة محلية من مستودع GitHub، يمكنك إجراء التحديثات المطلوبة دفعه إلى GitHub. على سبيل المثال:
git add .
git commit -m "<some-message>"
git push origin main
لماذا توزيع إجراءات GitHub بطيء جدًا؟
يعرف ملف سير العمل الذي تم إنشاؤه تلقائيا من خدمة التطبيق البناء ثم التوزيع والتشغيل على وظيفتين. لأن كل مهمة تعمل في بيئتها النظيفة الخاصة، يضمن ملف سير العمل أن deploy
الوظيفة لديها حق الوصول إلى الملفات من build
الوظيفة:
- في نهاية المهمة
build
، قم بتحميل الملفات كقطع أثرية. - في بداية المهمة
deploy
، قم بتنزيل البيانات الاصطناعية.
يتم إنفاق معظم الوقت الذي تستغرقه العملية المكونة من وظيفتين في تحميل وتنزيل البيانات الاصطناعية. إذا أردت، يمكنك تبسيط ملف سير العمل عن طريق دمج الوظيفتين في واحدة، ما يلغي الحاجة إلى خطوات التحميل والتنزيل.