كيفية نشر تطبيق Nest.js؟

How to Deploy a Nest.js Application_
How to Deploy a Nest.js Application_

يعد اختيار استراتيجية النشر الصحيحة أمرًا مهمًا لضمان عمل تطبيقك بسلاسة وقدرته على التوسع حسب الحاجة. تستكشف هذه المقالة خيارات النشر المختلفة المتاحة لتطبيقات Nest.js. وتركز بشكل خاص على كيفية نشر تطبيقات Nest.js في حاوية Back4app.

الوجبات الرئيسية

  • يعد اختيار استراتيجية النشر الصحيحة لتطبيق Nest.js أمرًا بالغ الأهمية لقابلية التوسع والتشغيل السلس.
  • تتضمن خيارات النشر البنية التحتية كخدمة (IaaS) والحاوية كخدمة (CaaS).
  • Back4app Containers هو مزود خدمة CaaS شائع لنشر تطبيقات Nest.js، حيث يقدم تجريدًا أعلى وإدارة مبسطة.

ما هو Nest.js؟

Nest.js هو إطار عمل Node.js لبناء تطبيقات قابلة للتطوير من جانب الخادم. إنه يحل مشكلة البنية التي لا تعالجها معظم الأطر والمكتبات الحديثة باستخدام إطار عمل معماري معياري معياري. تسمح هذه البنية للمطورين بإنشاء قواعد برمجية منظمة وقابلة للتطوير والصيانة.

مزايا استخدام Nest.js

فيما يلي بعض مزايا استخدام Nest.js:

  • لدى Next.js رأي قوي حول كيفية تنظيم الشيفرة البرمجية. وبالتالي، فهو يزيل عبء اكتشاف كيفية تنظيم شفرتك البرمجية بنفسك.
  • يدعم TypeScript افتراضيًا ولكنه يسمح لك أيضًا بكتابة شيفرة JavaScript خالصة.
  • يستخدم إطار Express بشكل افتراضي تحت الغطاء ولكن يمكن تهيئته لاستخدام Fastify، وهو أسرع.
  • يتكامل Nest.js بسلاسة مع مكتبات الواجهة الأمامية مثل React و Angular.
  • يحتوي على أداة مساعدة لسطر الأوامر تسمى NestCLI. وهي تنشئ تلقائيًا كودًا مكتوبًا مسبقًا لأجزاء مهمة من تطبيقك، مثل وحدات التحكم والوحدات النمطية والبرامج الوسيطة التي تساهم في تحسين تجربة المطورين.
  • يحتوي Nest.js على دعم مدمج للخدمات المصغرة. يوفر ناقلات مختلفة لتبادل الرسائل بين الخدمات المصغرة المختلفة.
  • يدعم Nest.js التكامل مع أي قاعدة بيانات SQL أو NoSQL.
  • يوفر التكامل مع مكتبات الاختبار الشائعة مثل Supertest و Jest. وهذا يجعل كتابة اختبارات الوحدة واختبارات التكامل والاختبارات الشاملة أسهل.
  • يقدم Nest.js وثائق شاملة ومنظمة، كاملة مع أمثلة برمجية.

عيوب استخدام Nest.js

فيما يلي بعض عيوب استخدام Nest.js:

  • قد لا يتوافق نمط تصميم تطبيقات Nest.js مع تفضيلات الجميع أو متطلبات المشروع.
  • يُلخص Nest.js تعقيد العمليات المختلفة وطريقة عملها الداخلية. يسمح هذا التجريد للمطورين بالتركيز على منطق التطبيق الأساسي دون القلق بشأن التفاصيل المعقدة. ومع ذلك، قد يؤدي هذا المستوى من التجريد إلى الشعور بالتبعية، حيث أن المطورين لديهم رؤية محدودة لتفاصيل التنفيذ المحددة.
  • يتم شحن Nest.js مع الكثير من الميزات والإمكانيات. هناك خطر محتمل على المطورين من الإفراط في الحلول الهندسية والتأثير على الجداول الزمنية للمشروع.
  • لدى Nest.js منحنى تعليمي أكثر انحدارًا بسبب بنيته المعقدة واستخدام TypeScript خارج الصندوق,

يعتمد استخدام Nest.js لمشروعك في نهاية المطاف على متطلبات المشروع وخبرة الفريق وتفضيلاته الشخصية.

ضع في اعتبارك مزايا Nest.js وميزاته وعيوبه وحجم مشروعك قبل اتخاذ القرار.

خيارات نشر Nest.js

عند نشر تطبيقات Nest.js، لديك خيارات مختلفة، بما في ذلك البنية التحتية كخدمة (IaaS) والحاوية كخدمة (CaaS). دعنا نناقش هذين النهجين.

البنية التحتية كخدمة

البنية التحتية كخدمة (IaaS) هي شكل من أشكال الحوسبة السحابية التي توفر بنية تحتية للخوادم عبر الإنترنت. تتضمن هذه البنية التحتية موارد التخزين والشبكة والحوسبة المتوفرة عند الطلب، مما يتيح لك توسيع نطاق بنيتك التحتية حسب الحاجة.

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

الجانب السلبي لامتلاك هذا القدر الكبير من التحكم هو أن على فريقك إدارة كل شيء. وهذا قد يكون مكلفاً.

تتضمن بعض موفري خدمات IaaS الشهيرة ما يلي:

  • Microsoft Azure
  • Amazon Web Services (AWS)
  • Google Cloud Platform (GCP)

الحاويات كخدمة

الحاوية كخدمة (CaaS) هي خدمة سحابية لإدارة الحاويات. وهي توفر مستوى أعلى من التجريد على موارد الحوسبة والشبكة والتخزين مقارنةً بالخدمة كخدمة IaaS.

باستخدام CaaS، تقوم بتجميع كود تطبيق Nest.js الخاص بك، وتوابعه، ووقت تشغيله، والتكوين اللازم لتشغيل التطبيق في حاوية.

تُنشأ هذه الحاوية باستخدام أدوات تهيئة الحاويات مثل Docker. بمجرد أن تصبح الحاوية جاهزة، يمكنك نشرها إلى موفر خدمة كخدمة. يتولى موفر CaaS إدارة ومراقبة التطبيق الذي تم نشره نيابةً عنك.

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

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

تتضمن بعض موفري خدمات CaaS المشهورين ما يلي:

  • Back4app Containers
  • Amazon Elastic Container Service (ECS)
  • Google Kubernetes Engine (GKE)

كيفية نشر تطبيقات Nest.js في حاوية Back4app

المتطلبات الأساسية

لمتابعة هذا البرنامج التعليمي، تأكد من أن لديك ما يلي:

  • Node.js (الإصدار >= 16) مثبت على نظام التشغيل الخاص بك.
  • حساب GitHub مع تكوين Git على نظام التشغيل الخاص بك.
  • تثبيت Docker على جهازك. يمكنك تثبيت سطح مكتب Docker من موقع Docker الرسمي.
  • معرفة عملية بـ Nest.js.

نظرة عامة على حاويات Back4app Containers

Back4app Containers هو مزود خدمة CaaS يتولى عملية النشر نيابةً عنك. فهو يدير البنية التحتية للخادم، مما يلغي الحاجة إلى التهيئة اليدوية.

يتكامل Back4app مع GitHub ويسمح لك بإضافة مستودعات docker إلى تطبيقك. هذا التكامل يجعل الحفاظ على تحديث تطبيقك أسهل.

من خلال ميزة النشر التلقائي، يستمع Back4app في الوقت الفعلي إلى مستودعك ويعيد نشر التطبيق في كل مرة تقوم فيها بدمج الالتزامات في الفرع الذي تم نشره.

يمكنك أيضاً مراقبة عملية النشر من لوحة التحكم ومعالجة أي مشكلات قد تظهر.

مقدمة المشروع

في هذا الدليل، سنستعرض في هذا الدليل عملية نشر تطبيق Nest.js على Back4app. للبدء، سننشئ تطبيق Nest.js الأساسي الذي سنقوم بإرساءه ثم ندفعه إلى GitHub. أخيرًا، سننشر التطبيق في حاوية Back4app.

إنشاء تطبيق Nest.js

اتبع الخطوات التالية لإنشاء تطبيق Nest.js:

  • قم بتشغيل الأمر أدناه في جهازك الطرفي لتثبيت Nest.js CLI على مستوى العالم.
npm install -g @nestjs/cli
  • نفّذ الأمر التالي لإنشاء تطبيق Nest.js جديد.
nest new project-name

لا تتردد في استبدال “اسم المشروع” باسم التطبيق الخاص بك. يستخدم هذا البرنامج التعليمي nestjs-deploys-bloyched-back4app.

nest new  nestjs-deploy-back4app

سينشئ هذا الأمر جميع الملفات والمجلدات الضرورية التي ستحتاجها للبدء.

  • انتقل إلى دليل المشروع الذي تم إنشاؤه وقم بتشغيل الأمر التالي لتشغيل خادم التطوير.
npm run start:dev

سيراقب هذا الأمر أي تغييرات في الشيفرة البرمجية الخاصة بك ويعيد تشغيل الخادم تلقائيًا عند حفظ ملف.

إرساء تطبيق Nest.js في قفص الاتهام

من أجل نشر تطبيق Nest.js في حاوية Back4app، تحتاج إلى إرساء تطبيقك باستخدام Docker.

Dockerizing تطبيق يعني إنشاء صورة حاوية للتطبيق. صورة الحاوية هذه هي حزمة برامج معزولة وقابلة للتنفيذ تتضمن كل ما يلزم لتشغيل التطبيق.

لإنشاء صورة حاوية تحتاج إلى إضافة ملف Dockerfile إلى مشروعك.

ملف Dockerfile هو ملف نصي يوفر تعليمات حول كيفية بناء صورة Docker. وهو يحدد الصورة الأساسية التي ستنشئ الصورة منها.

كما يحتوي على تعليمات لتعيين دليل العمل وتثبيت التبعيات وتحديد الأمر الخاص بتشغيل التطبيق.

اتبع الإرشادات أدناه لإرساء مشروع Nest.js:

  • تأكد من تثبيت Docker على جهازك. اتبع دليل تثبيت Docker الرسمي لتثبيت Docker إذا لم يكن لديك.
  • انتقل إلى جذر دليل مشروع Nest.js الخاص بك وأنشئ ملفًا باسم Dockerfile.
touch Dockerfile
  • باستخدام محرر التعليمات البرمجية المفضل لديك، افتح Dockerfile وحدد الصورة الأساسية. هذه هي الصورة التي ستنشئ منها صورة الإنتاج الخاصة بك. يستخدم هذا البرنامج التعليمي صورة Node 20. تأتي مع تثبيت Node و npm.
FROM node:18-alpine
  • بعد ذلك، قم بإنشاء دليل العمل داخل الصورة. هذا هو المكان الذي سيتم فيه تخزين كود التطبيق الخاص بك.
 WORKDIR /usr/src/app
  • انسخ ملفات package.json و package-lock.json إلى الحاوية. ثم قم بتشغيل الأمر npm install لتثبيت تبعيات المشروع.
# A wildcard ensures package.json AND package-lock.json are copied
COPY package*.json ./

# Install project dependencies
RUN npm install
  • انسخ بقية كود التطبيق الخاص بك إلى الحاوية.
COPY ..
  • قم بتشغيل أمر الإنشاء لتجميع تطبيقك. يقوم هذا الأمر بتجميع شيفرة TypeScript إلى JavaScript وتخزينها في مجلد التوزيع.
RUN npm run build
  • كشف المنفذ 3000. يحدد هذا المنفذ الذي يجب أن تستخدمه التطبيقات الأخرى للاتصال بهذا التطبيق المعبأ في حاوية.
EXPOSE 3000/tcp
  • قم بتشغيل تطبيقك. هنا، سنستخدم node dist/ main.js. يحتوي مجلد dist على الشيفرة المجمّعة بينما key.js هو نقطة دخول التطبيق.
CMD [ "node", "dist/main.js" ]

إجمالاً، يجب أن يبدو ملف Dockerfile الخاص بك هكذا:

FROM node:20-alpine

WORKDIR /usr/src/app

COPY package*.json  ./

RUN npm ci

COPY . .

RUN npm run build

EXPOSE 3000/tcp

CMD [ "node", "dist/main.js" ]

إضافة ملف .dockerignore

يعمل ملف .dockerignore مثل ملف .gitignore. وهو يحدد الملفات التي يجب على Docker تجاهلها. يمنعك من إضافة ملفات كبيرة وغير ضرورية أو بيانات حساسة إلى الصورة.

لإنشائه، أضف ملفًا جديدًا باسم .dockerignore في قاعدة مجلد مشروع Nest.js الخاص بك وأضف ما يلي.

.git
.gitignore
.env
README.md
Dockerfile
node_modules/
.github
.vscode
npm-debug.log
npm-debug.log.*

والآن، لن تُنسخ وحدات العقدة وملفات الترميز ومتغيرات البيئة وسجلات التصحيح إلى صورة Docker الخاصة بك.

بناء صورة Docker محلياً

قم بتشغيل الأمر أدناه على جهازك الطرفي للتأكد من عمل ملف Dockerfile.

docker build -t nestjs-back4app .

تتيح لك علامة -t وسم صورتك باسم. في هذه الحالة، nestjs-back4app.

إذا قمت بتشغيل صور docker على الجهاز الطرفي، يجب أن ترى الصورة التي تم إنشاؤها.

REPOSITORY        TAG       IMAGE ID       CREATED          SIZE
nestjs-back4app   latest    afcba89613fc   39 seconds ago   333MB

لتشغيل التطبيق محلياً، استخدم الأمر التالي.

docker run -p 49160:3000 -d nestjs-back4app

هذا يعيد توجيه المنفذ 49160 إلى المنفذ 3000 الذي حددناه في ملف Dockerfile. إذا قمت بزيارة المضيف المحلي:49160، يجب أن تكون قادرًا على الوصول إلى الصفحة الرئيسية لتطبيقك.

نشر تطبيق Nest.js في حاوية Back4app

بمجرد أن تتأكد من أن ملف Dockerfile يعمل، فأنت الآن جاهز لنشر التطبيق على Back4app.

دفع التطبيق إلى GitHub

يصل Back4app إلى تطبيقك من خلال GitHub. أنشئ مستودعًا جديدًا يحتوي على تطبيق Nest.js باتباع الخطوات التالية:

  • قم بزيارة GitHub وسجّل الدخول إلى حسابك.
  • بمجرد تسجيل الدخول، انقر على أيقونة “+” في الزاوية العلوية اليمنى من الصفحة وحدد “مستودع جديد” من القائمة المنسدلة.
  • في صفحة “إنشاء مستودع جديد”، قم بتسمية المستودع الخاص بك. ثم انقر فوق “إنشاء اسم مستودع”. لاحظ عنوان URL للمستودع في الصفحة التالية.

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

git remote add origin <https://github.com/remigathoni/nestjs-deploy-back4app.git>
git branch -M main
git push -u origin main

بعد تشغيل هذه الأوامر، ستتم إضافة ملفات تطبيقك إلى مستودع GitHub.

نشر تطبيق Nest.js الخاص بك

يمكنك الآن نشر تطبيقك على Back4app باتباع الخطوات التالية:

قم بالتسجيل للحصول على حساب على Back4App إذا لم تكن قد قمت بتسجيل الدخول إلى حسابك بالفعل. ستتم إعادة توجيهك إلى لوحة التحكم.

في لوحة التحكم، انقر على إنشاء تطبيق جديد.

نشر Nest.js على Back4app


يقدم Back4app خيارين لإنشاء تطبيق. يمكنك استخدام الخلفية كخدمة (BaaS) أو الحاوية كخدمة (CaaS).

تتعامل BaaS مع الواجهة الخلفية بأكملها نيابةً عنك بينما تتيح لك CaaS نشر تطبيق مرساة. نحن نريد فقط نشر تطبيق Nest.js المخصص لـ dockerized، لذا اختر الحاويات كخدمة.

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

سيطالبك Back4app بتوصيل حسابك ب GitHub ومنحه الإذن بالوصول إلى مستودعاتك.

لقطة شاشة توضح كيفية تثبيت حاويات Back4app وتفويضها

حدد مستودع Nest.js.

لقطة شاشة توضح كيفية تحديد مستودع GitHub للتحميل إلى Back4app

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

لقطة شاشة توضح كيفية تهيئة النشر الأولي لتطبيق Nestjs على تطبيق Back4app

انقر على زر إنشاء تطبيق لنشر التطبيق. قد تستغرق هذه العملية بضع دقائق.

هذا كل ما في الأمر! لقد نجحت في نشر تطبيق Nest.js على Back4app مجاناً.

تحسين عملية النشر باستخدام بناء متعدد المراحل

في الوقت الحالي حجم صورة docker كبير جدًا حيث يبلغ 333 ميغابايت.

REPOSITORY        TAG       IMAGE ID       CREATED          SIZE
nestjs-back4app   latest    afcba89613fc   39 seconds ago   333MB

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

لتقليل حجم الصورة، يمكننا الاستفادة من الإنشاءات متعددة المراحل.

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

للبدء، افتح ملف Dockerfile في تطبيق Nest.js باستخدام محرر التعليمات البرمجية واحذف محتوياته.

في ملف Dockerfile، سيكون لدينا مرحلتين:

  • مرحلة الإنشاء المسؤولة عن بناء التطبيق. ويتضمن ذلك تثبيت التبعيات وتجميع TypeScript إلى JavaScript.
  • صفحة الإنتاج التي تنشئ صورة وقت التشغيل. تحتوي على جميع الملفات اللازمة لتشغيل التطبيق.

تتم تسمية المرحلة عن طريق إلحاق *اسم المرحلة* بالتعليمات من.

تحديد مرحلة البناء

اتبع التعليمات أدناه لاستخدام البناء متعدد المراحل:

  • في ملف DockerFile الخاص بك، حدد مرحلة من صورة Node الأساسية وسمها بناء.
FROM node:20-alpine as build

لاحظ أن صور العقدة: -ألبين الأساسية أقل حجماً بكثير من صور العقدة:.

  • تحديد دليل العمل.
WORKDIR /usr/src/app
  • انسخ ملفي package.json و package-lock.json إلى الحاوية.
# A wildcard ensures package.json AND package-lock.json are copied
COPY package*.json ./
  • تثبيت التبعيات
RUN npm ci

بدلاً من تثبيت npm، نستخدم npm ci. هذان الأمران متماثلان ولكن npm ci يضمن تثبيت نظيف للتبعيات في كل مرة يتم تشغيله.

  • انسخ كود التطبيق إلى مرحلة الإنشاء.
COPY . .
  • أنشئ التطبيق عن طريق تشغيل الأمر npm build.
npm run build

تحديد مرحلة الإنتاج

بمجرد الانتهاء من بناء التطبيق، حدد مرحلة الإنتاج.

  • أضف صورة Node.js الأساسية وأطلق عليها اسم إنتاج.
FROM node:20-alpine AS build
  • حدد دليل العمل كما فعلت في مرحلة الإنشاء.
WORKDIR /usr/src/app
  • استخدم التسمية من=بيلد لنسخ مجلد التوزيع ووحدات العقدة من الصورة الإنشائية إلى صورة الإنتاج الحالية.
COPY  --from=build usr/src/app/dist ./dist
COPY  --from=build usr/src/app/node_modules ./node_modules
  • كشف المنفذ 3000
EXPOSE 3000/tcp 
  • ابدأ تشغيل التطبيق باستخدام الأمر CMD.
CMD ["node", "dist/main.js"]

إجمالاً، يجب أن يبدو ملف Dockerfile الخاص بك هكذا:

# Build
FROM node:20-alpine AS build
WORKDIR /usr/src/app
COPY package*.json  ./
RUN npm ci
COPY . .
RUN npm run build && npm prune --production

# Production
FROM node:20-alpine AS production
WORKDIR /usr/src/app

COPY  --from=build usr/src/app/dist ./dist
COPY  --from=build usr/src/app/node_modules ./node_modules

EXPOSE 3000/tcp
CMD [ "node", "dist/main.js" ]

إذا قمتَ ببناء صورة docker الآن، ستلاحظ أن حجمها قد انخفض بشكل كبير.

REPOSITORY             TAG       IMAGE ID       CREATED          SIZE
nestjs-back4app-opt    latest    d29aedae9bef   5 seconds ago   186MB

من خلال تقليل الحجم، ستزيد من أوقات النشر وتقلل أيضًا من مقدار التخزين الذي تحتاجه.

الخاتمة

Nest.js هو إطار عمل Node.js له بنية معيارية، وهو عبارة عن بنية معيارية ذات رأي. وهو يمكّن المطورين من بناء قواعد برمجية قابلة للتطوير والصيانة.

لديك خيارات متنوعة لنشر تطبيق Nest.js بما في ذلك منصات البنية التحتية كخدمة (IaaS) والحاويات كخدمة (CaaS).

تعد حاويات Back4app Containers واحدة من أفضل مزودي خدمة CaaS. تقوم حاويات Back4app بإدارة ومراقبة عملية النشر الخاصة بك، مما يجعل الانتقال من التطوير إلى الإنتاج خاليًا من المتاعب.

لقد تعلمت في هذا الدليل كيفية نشر تطبيق Nest.js في حاوية Back4app باستخدام Docker. بالإضافة إلى ذلك، استكشفت فوائد تحسين عملية النشر باستخدام إنشاءات متعددة المراحل.

يجب أن تكون الآن قادرًا على إنشاء تطبيق Nest.js، وإرساءه ونشره على Back4app. الشيفرة المصدرية متوفرة على هذا الريبو GitHub ولمعرفة المزيد، قم بزيارة وثائق حاويات Back4app.

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

ما هو Nest.js؟

Nest.js هو إطار عمل Node.js يعتمد على TypeScript. يتبع نهج التصميم المعياري، مما يتيح للمطورين إنشاء قواعد بيانات شفرة منظمة، قابلة للتوسع، وسهلة الصيانة.

ما هي خيارات النشر لـ Docker؟

– IaaS (AWS, GCP, Azure)
– CaaS (Back4app Containers, AWS ECS, Google Kubernetes Engine (GKE))

كيف يمكن نشر تطبيق Nest.js؟

– إنشاء تطبيق Nest.js.
– تحويل تطبيق Nest.js إلى Docker.
– رفع التطبيق المحول إلى GitHub.
– إنشاء حساب على Back4app.
– إنشاء حاوية على Back4app.
– منح Back4app الوصول إلى GitHub الخاص بك.
– تحديد مستودع Nest.js ونشر تطبيقك


Leave a reply

Your email address will not be published.