نشر تطبيق ويب Node.js + MongoDB إلى Azure

توفر Azure App Service خدمة استضافة ويب قابلة للتطوير بدرجة كبيرة وذاتية التصحيح باستخدام نظام التشغيل Linux. يوضح هذا البرنامج التعليمي كيفية إنشاء تطبيق Node.js آمن في Azure App Service المتصل بقاعدة بيانات Azure Cosmos DB لقاعدة بيانات MongoDB . عند الانتهاء، سيكون لديك تطبيق Express.js يعمل على Azure App Service على Linux.

A diagram showing how the Express.js app will be deployed to Azure App Service and the MongoDB data will be hosted inside of Azure Cosmos DB.

تفترض هذه المقالة أنك على دراية بالفعل بتطوير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:

  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. مجموعة الموارد → حَدد Create new واستخدم اسم msdocs-expressjs-mongodb-tutorial.
  2. المنطقة → أي منطقة Azure قريبة منك.
  3. الاسمmsdocs-expressjs-mongodb-XYZ حيث XYZ يمثل أي ثلاثة أحرف عشوائية. يجب أن يكون هذا الاسم فريدا عبر Azure.
  4. مكدس وقت التشغيلالعقدة 16 LTS.
  5. خطة الاستضافةالأساسية. عندما تكون مستعداً، يمكنك التوسع إلى مستوى أسعار الإنتاج لاحقاً.
  6. يتم تحديد Azure Cosmos DB ل MongoDB بشكل افتراضي كمحرك قاعدة البيانات. Azure Cosmos DB هي قاعدة بيانات سحابية أصلية تقدم واجهة برمجة تطبيقات متوافقة مع MongoDB بنسبة 100%. لاحظ اسم قاعدة البيانات الذي تم إنشاؤه لك (<app-name-database>). سوف تحتاجها لاحقًا.
  7. حدد "Review + create".
  8. وبعد اكتمال عملية التحقق، حدد Create.

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

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

  • مجموعة الموارد → الحاوية لكافة الموارد التي تم إنشاؤها.
  • خطة خدمة التطبيق → تحدد موارد الحساب لخدمة التطبيق. يتم إنشاء خطة Linux في الطبقة الأساسية.
  • تمثل خدمة التطبيقات → تطبيقك وتعمل في خطة خدمة التطبيق.
  • الشبكة الظاهرية متكاملة مع تطبيق خدمة التطبيق وتعزل نسبة استخدام الشبكة الخلفية.
  • نقطة النهاية الخاصة → الوصول إلى نقطة النهاية لمورد قاعدة البيانات في الشبكة الظاهرية.
  • واجهة الشبكة → تمثل عنوان IP خاصاً لنقطة النهاية الخاصة.
  • → يمكن الوصول إلى Azure Cosmos DB ل MongoDB فقط من خلف نقطة النهاية الخاصة. يتم إنشاء قاعدة بيانات ومستخدم لك على الخادم.
  • تمكن منطقة DNS الخاصة → دقة DNS لخادم Azure Cosmos DB في الشبكة الظاهرية.

A screenshot showing the deployment process completed.

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

قام معالج الإنشاء بإنشاء عنوان MongoDB URI لك بالفعل، ولكن التطبيق الخاص بك يحتاج إلى متغير DATABASE_URL ومتغير DATABASE_NAME. في هذه الخطوة، يمكنك إنشاء إعدادات التطبيق بالتنسيق الذي يحتاجه تطبيقك.

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

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

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

  1. حدد New application setting.
  2. في حقل الاسم، أدخِل DATABASE_NAME.
  3. في حقل القيمة، أدخل اسم قاعدة البيانات الذي تم إنشاؤه تلقائيا من معالج الإنشاء، والذي يبدو مثل msdocs-docs-laravel-mysql-XYZ-database.
  4. حدد موافق.

A screenshot showing how to see the autogenerated connection string.

الخطوة 3:

  1. مرر إلى أسفل الصفحة، وحدد سلسلة الاتصال MONGODB_URI. تم إنشاؤه بواسطة معالج الإنشاء.
  2. في حقل القيمة، حدد الزر نسخ، والصق القيمة في ملف نصي في الخطوة التالية. إنه يوجد بتنسيق URI لسلسلة اتصال MongoDB.
  3. حدد إلغاء.

A screenshot showing how to create an app setting.

الخطوة 4:

  1. باستخدام نفس الخطوات في الخطوة 2، أنشئ إعداد تطبيق يسمى DATABASE_URL، وعيّن القيمة إلى القيمة التي نسختها من سلسلة الاتصال MONGODB_URI (أي mongodb://...).
  2. في شريط القوائم الموجود في الأعلى، حدد حفظ.
  3. عند المطالبة، حدد متابعة.

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

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

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

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

  1. قم بتسجيل الدخول إلى حساب GitHub الخاص بك.
  2. الانتقال إلى https://github.com/Azure-Samples/msdocs-nodejs-mongodb-azure-sample-app.
  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/connection.js في المستكشف. في الدالة getConnectionInfo، راجع استخدام إعدادات التطبيق التي قمت بإنشائها سابقاً لاتصال MongoDB (DATABASE_URL وDATABASE_NAME).

A screenshot showing Visual Studio Code in the browser and an opened file.

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

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

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

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

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

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

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

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

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

A screenshot showing a GitHub run in progress.

4- الاستعراض وصولاً إلى التطبيق

الخطوة 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: إضافة بعض المهام إلى القائمة. تهانينا، أنت تقوم بتشغيل تطبيق Node.js آمن مستند إلى البيانات في Azure App Service.

A screenshot of the Express.js app running in 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:

  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.

6 - فحص الملفات الموزعة باستخدام Kudu

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

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

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

A screenshot showing how to navigate to the App Service Kudu page.

الخطوة 2: في صفحة Kudu، حدد Deployments.

A screenshot of the main page in the Kudu SCM app showing the different information available about the hosting environment.

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

A screenshot showing deployment history of an App Service app in JSON format.

الخطوة 3: ارجع إلى صفحة Kudu الرئيسية وحدد الموقع wwwroot.

A screenshot showing site wwwroot selected.

يمكنك مشاهدة بنية المجلد الموزع والنقر لاستعراض الملفات وعرضها.

A screenshot of deployed files in the wwwroot directory.

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

عند الانتهاء، يمكنك حذف جميع الموارد من اشتراك 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.
  • يتم إنشاء خادم 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 الوظيفة:

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

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