كيفية نشر تطبيق Node.js إلى Amazon Web Services باستخدام Docker

المكونات: نشرت أصلا في مجلة Zeolearn.
للعديد من محتوى مطور أكثر فائدة مثل هذه المقالة ، تفضل بزيارة مدونة Zeolearn. تحتوي المدونة على مقالات تركز على تطوير الويب / البرامج: AngularJS و ReactJS و NodeJS و Django وعلوم البيانات (بما في ذلك التعلم الآلي وعلوم البيانات وبيثون والتعلم العميق).

جدول المحتويات

1 المقدمة
2. المتطلبات الأساسية
3. التمهيدي السريع على Docker و AWS
4. ما سنقوم بنشره
5. إنشاء Dockerfile
6. بناء صورة عامل ميناء
7. تشغيل حاوية عامل ميناء
8. إنشاء السجل (ECR) وتحميل صورة التطبيق إليه
9. إنشاء تعريف مهمة جديد
10. إنشاء كتلة
11. إنشاء خدمة لتشغيله
12. الخاتمة

1 المقدمة

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

في هذا البرنامج التعليمي ، سأوضح لك كيفية تثبيت تطبيق Node.js ونشره على Amazon Web Service (AWS) باستخدام Amazon ECR (Elastic Container Registry) و ECS (خدمة الحاويات المرنة).

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

لمتابعة هذا البرنامج التعليمي ، ستحتاج إلى ما يلي:

  1. العقدة و Npm: اتبع هذا الرابط لتثبيت أحدث الإصدارات.
  2. المعرفة الأساسية ل Node.js.
  3. Docker: يوفر التثبيت Docker Engine ، عميل Docker CLI ، وغيرها من الأشياء الرائعة. اتبع التعليمات لنظام التشغيل الخاص بك. للتحقق من نجاح التثبيت ، قم بإطلاق النار على الجهاز:
عامل ميناء - الإصدار

يجب أن يعرض الأمر أعلاه رقم الإصدار. إذا لم يكن الأمر كذلك ، فإن التثبيت لم يكتمل بشكل صحيح.

4. حساب AWS: اشترك للحصول على فئة مجانية. هناك فترة انتظار للتحقق من رقم هاتفك وبطاقة البنك. بعد ذلك ، سيكون لديك الوصول إلى وحدة التحكم.

5. AWS CLI: اتبع التعليمات لنظام التشغيل الخاص بك. تحتاج تثبيت بايثون.

3. التمهيدي السريع على Docker و AWS

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

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

تقدم Amazon Web Services (AWS) خدمة حوسبة سحابية موثوقة وقابلة للتطوير وغير مكلفة للشركات. كما ذكرت من قبل ، سوف يركز هذا البرنامج التعليمي على استخدام خدمات ECR و ECS.

4. ما سنقوم بنشره

لنقم بإنشاء تطبيق نموذجي سريعًا نستخدمه لغرض هذا البرنامج التعليمي. سيكون تطبيق Node.js بسيطًا جدًا.

أدخل ما يلي في الجهاز:

// إنشاء دليل جديد
mkdir sample-nodejs-app
// التغيير إلى الدليل الجديد
مؤتمر نزع السلاح عينة nodejs التطبيق
// تهيئة npm
npm init -y
// تثبيت صريح
npm تثبيت صريح
/ / قم بإنشاء ملف server.js
اتصال server.js

افتح server.js والصق الكود أدناه فيه:

// server.js
const صريح = يتطلب ('صريح')
التطبيق const = اكسبريس ()
app.get ('/'، (req، res) => {
    res.send ('مرحبًا أيها العالم من تطبيق Node.js!')
})
app.listen (3000، () => {
    console.log ('الخادم قيد التشغيل على 3000')
})

بدء التطبيق مع:

عقدة server.js

الوصول إليه على http: // localhost: 3000. يجب أن تحصل على Hello world من تطبيق Node.js! عرض في متصفحك. الكود الكامل متاح على جيثب.

الآن دعنا ننتقل إلى تطبيقنا المهم للغاية للإنتاج .

5. إنشاء Dockerfile

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

Dockerfile هو المخطط الذي تم بناء صورنا منه. ثم تتحول الصور إلى حاويات ، حيث نقوم بتشغيل تطبيقاتنا.

كل Dockerfile يبدأ مع الصورة الأساسية كأساس لها. هناك طريقتان للتعامل مع إنشاء Dockerfile الخاص بك:

  1. استخدم صورة أساسية لنظام تشغيل عادي (على سبيل المثال ، Ubuntu OS و Debian و CentOS وغيرها) وتثبيت بيئة تطبيق فيها مثل Node.js OR
  2. استخدم صورة أساسية جاهزة للبيئة للحصول على صورة نظام تشغيل مع وجود بيئة تطبيق مثبتة بالفعل.

سوف نمضي في النهج الثاني. يمكننا استخدام صورة Node.js الرسمية المستضافة على Dockerhub والتي تستند إلى Alpine Linux.

اكتب هذا في Dockerfile:

من العقدة: 8 جبال الألب
RUN mkdir -p / usr / src / app
WORKDIR / usr / src / app
نسخة. .
تشغيل npm تثبيت
كشف 3000
CMD ["العقدة" ، "server.js"]

دعنا نسير عبر هذا السطر سطراً لمعرفة ما يحدث هنا ولماذا.

من العقدة: 8 جبال الألب

هنا ، نقوم ببناء صورة Docker الخاصة بنا باستخدام صورة Node.js الرسمية من Dockerhub (مستودع للصور الأساسية).

  • بدء Dockerfile لدينا مع بيان من. هذا هو المكان الذي تحدد فيه صورتك الأساسية.
  • سوف يسمح لنا بيان RUN بتنفيذ أمر لأي شيء تريد القيام به. لقد أنشأنا دليلًا فرعيًا / usr / src / app سيحتفظ برمز التطبيق الخاص بنا داخل صورة عامل الميناء.
  • يحدد تعليمات WORKDIR الدليل الفرعي الذي أنشأناه كدليل عمل لأي تعليمات RUN و CMD و ENTRYPOINT و COPY و ADD تتبعها في Dockerfile. / usr / src / app هو دليل عملنا.
  • COPY يتيح لنا نسخ الملفات من مصدر إلى وجهة. قمنا بنسخ محتويات رمز تطبيق العقدة لدينا (server.js و package.json) من دليلنا الحالي إلى دليل العمل في صورة عامل الميناء الخاص بنا.
  • يُعلم تعليمة EXPOSE Docker أن الحاوية تستمع على منافذ الشبكة المحددة في وقت التشغيل. حددنا منفذ 3000.
  • أخيرًا وليس آخرًا ، تحدد عبارة CMD الأمر لبدء تطبيقنا. هذا يخبر Docker كيفية تشغيل التطبيق الخاص بك. نحن هنا نستخدم عقدة server.js وهي الطريقة التي يتم بها تشغيل الملفات في Node.js.

باستخدام هذا الملف المكتمل ، أصبحنا الآن على استعداد لإنشاء صورة Docker جديدة.

6. بناء صورة عامل ميناء

تأكد من أن لديك عامل الميناء وتشغيلها. الآن وقد حددنا Dockerfile لدينا ، دعونا نبني الصورة باستخدام عنوان -t:

عامل بناء بناء -t عينة nodejs- التطبيق.

سيؤدي ذلك إلى إخراج تجزئة وسلاسل أبجدية رقمية تحدد الحاويات والصور التي تقول "تم الإنشاء بنجاح" في السطر الأخير:

إرسال سياق الإنشاء إلى Docker daemon 1.966 ميغابايت
الخطوة 1/7: من العقدة: 6-جبال الألب
 ---> 998971a692ca
الخطوة 2/7: RUN mkdir -p / usr / src / app
 ---> استخدام ذاكرة التخزين المؤقت
 ---> f1aa1c112188
الخطوة 3/7: WORKDIR / usr / src / app
 ---> استخدام ذاكرة التخزين المؤقت
 ---> b4421b83357b
الخطوة 4/7: نسخة. .
 ---> 836112e1d526
الخطوة 5/7: تثبيت RUN npm
 ---> الجري في 1c6b36b5381c
npm WARN sample-nodejs-app@1.0.0 لا يوجد وصف
npm WARN sample-nodejs-app@1.0.0 لا يوجد مستودع تخزين.
إزالة الحاوية الوسيطة 1c6b36b5381c
 ---> 93999e6c807f
الخطوة 6/7: كشف 3000
 ---> الركض في 7419020927f1
إزالة الحاوية الوسيطة 7419020927f1
 ---> ed4ac8a31f83
الخطوة 7/7: CMD ["العقدة" ، "server.js"]
 ---> الجري في c77d34f4c873
إزالة الحاوية الوسيطة c77d34f4c873
 ---> eaf97859f909
بنيت بنجاح eaf97859f909
// لا تتوقع نفس القيم من جهازك.

7. تشغيل حاوية عامل الميناء

لقد بنينا صورة عامل الميناء. لمشاهدة الصور التي تم إنشاؤها مسبقًا ، قم بتشغيل:

صور عامل ميناء

يجب أن ترى الصورة التي أنشأناها للتو على أنها الأحدث بناءً على الوقت:

نسخ معرف الصورة. لتشغيل الحاوية ، نكتب على المحطة:

عامل التشغيل - 80: 3000 {image-id}
// ملء مع معرف الصورة الخاصة بك

بشكل افتراضي ، يمكن أن تقوم حاويات Docker بالاتصال بالعالم الخارجي ، لكن لا يمكن للعالم الخارجي الاتصال بالحاويات. -p ينشر جميع المنافذ المكشوفة إلى واجهات المضيف. هنا ننشر التطبيق إلى المنفذ 80: 3000. نظرًا لأننا نقوم بتشغيل Docker محليًا ، انتقل إلى http: // localhost لعرضه.

في أي وقت ، يمكنك التحقق من تشغيل حاويات Docker عن طريق كتابة:

حاوية عامل ميناء ليرة سورية

أخيرًا ، يمكنك إيقاف تشغيل الحاوية بواسطة:

عامل ميناء توقف {image-id}

ترك الخفي دوكر على التوالي.

8. قم بإنشاء السجل (ECR) وتحميل صورة التطبيق إليه

يعد Amazon Elastic Container Registry (ECR) بمثابة سجل حاويات Docker مُدار بالكامل ، مما يسهل على المطورين تخزين صور حاويات Docker وإدارتها ونشرها. تم دمج Amazon ECR مع خدمة حاوية الأمازون المرنة (ECS) ، مما يعمل على تبسيط عملية التطوير إلى سير العمل في الإنتاج.

تعني كلمة "مرن" أنه يمكنك زيادة السعة أو تقليلها حسب الرغبة.

خطوات:

  1. انتقل إلى AWS وحدة التحكم وتسجيل الدخول.
  2. حدد خدمة حاوية EC2 وابدأ

3. تظهر صفحة التشغيل الأولى ، قم بالتمرير لأسفل وانقر فوق "إلغاء"> أدخل لوحة معلومات ECS.

4. لضمان اتصال CLI بحساب AWS الخاص بك ، قم بتشغيله على الجهاز الطرفي:

أوس تكوين

إذا تم تثبيت AWS CLI بشكل صحيح ، فستطلب تهيئة aws ما يلي:

$ أوس تكوين
معرف مفتاح الوصول AWS [بلا]: مفتاح الوصول
مفتاح الوصول السري لـ AWS [بلا]: المفتاح السري
اسم المنطقة الافتراضي [بلا]: us-west-2
تنسيق الإخراج الافتراضي [بلا]:

احصل على بيانات اعتماد الأمان من حساب AWS الخاص بك تحت اسم المستخدم الخاص بك> مفاتيح الوصول. تشغيل aws تكوين مرة أخرى وملء بشكل صحيح.

4. أنشئ مستودعًا جديدًا وأدخل اسمًا (يفضل أن يكون له نفس اسم الحاوية كما هو الحال في بيئة التطوير المحلية لديك من أجل التناسق).

على سبيل المثال ، استخدم sample-nodejs-app.

اتبع الإرشادات الخمسة من وحدة التحكم AWS لإنشاء صور Docker ووضع علامات عليها ودفعها:

ملاحظة: الوسيطات التالية هي وسيطات وسيختلف عنها ، لذا اتبع فقط الخطوات الموضحة على وحدة التحكم الخاصة بك.

  1. استرداد أمر تسجيل الدخول Docker الذي يمكنك استخدامه لمصادقة عميل Docker الخاص بك إلى السجل الخاص بك:
    ملاحظة: إذا تلقيت خطأ "خيارات غير معروفة: - no-include-email" ، فقم بتثبيت أحدث إصدار من AWS CLI. تعلم المزيد هنا.
aws ecr get-login - no-include-email --region us-east-2

2. قم بتشغيل أمر تسجيل الدخول إلى عامل ميناء الذي تم إرجاعه في الخطوة السابقة (فقط انسخ والصق). ملاحظة: إذا كنت تستخدم Windows PowerShell ، فقم بتشغيل الأمر التالي بدلاً من ذلك:

Invoke-Expression -Command (aws ecr get-login - no-include-email --region us-east-2)

يجب أن الإخراج: تسجيل الدخول نجحت.

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

عامل بناء بناء -t عينة nodejs- التطبيق.

4. مع إنشاء مكتمل ، قم بتمييز صورتك بكلمة رئيسية (على سبيل المثال ، الأحدث) حتى تتمكن من دفع الصورة إلى هذا المستودع:

عامل ميناء العلامة sample-nodejs-app: أحدث 559908478199.dkr.ecr.us-east-2.amazonaws.com/sample-nodejs-app:latest

5. قم بتشغيل الأمر التالي لدفع هذه الصورة إلى مستودع AWS الذي تم إنشاؤه حديثًا:

عامل ميناء دفع 559908478199.dkr.ecr.us-east-2.amazonaws.com/sample-nodejs-app:latest

9. إنشاء تعريف مهمة جديدة

تعمل المهام مثل أمر تشغيل docker لـ Docker CLI ولكن لعدة حاويات. أنها تحدد:

  • صور الحاوية (للاستخدام)
  • المجلدات (إن وجدت)
  • متغيرات بيئة الشبكات
  • تعيينات الميناء

من تعريفات المهام في لوحة معلومات ECS ، اضغط على زر إنشاء تعريف مهمة جديد (ECS):

قم بتعيين اسم مهمة واستخدم الخطوات التالية:

  • أضف حاوية: sample-nodejs-app (تلك التي دفعناها).
  • الصورة: URL إلى الحاوية الخاصة بك. Mine هو 559908478199.dkr.ecr.us-east-2.amazonaws.com/sample-nodejs-app
  • لينة الحد: 512
  • خريطة 80 (المضيف) إلى 3000 (حاوية) للتطبيق عينة nodejs
  • متغيرات Env:

NODE_ENV: الإنتاج

10. إنشاء الكتلة

الكتلة هي المكان الذي يتم فيه تشغيل حاويات AWS. يستخدمون تكوينات مشابهة لحالات EC2. عرف التالي:

  • اسم الكتلة: demo-nodejs-app-cluster
  • نوع مثيل EC2: t2.micro

(ملاحظة: حددت المثيلات بناءً على حجم التطبيق الخاص بك. هنا اخترنا الأصغر. يؤثر اختيارك على مقدار المال الذي ستتم محاسبتك عليه في نهاية الشهر. تفضل بزيارة هنا لمزيد من المعلومات). شكرًا لك نيكولاس كولاتسيس على الإشارة إلى أن الاختيار السابق لـ m4.large كان مكلفًا لهذا البرنامج التعليمي.

  • عدد الحالات: 1
  • تخزين EBS: 22
  • زوج رئيسي: لا شيء
  • VPC: جديد

عند اكتمال العملية ، يمكنك اختيار النقر فوق "عرض المجموعة".

11. إنشاء خدمة لتشغيله

انتقل إلى تعريف المهمة> انقر فوق demo-nodejs-app> انقر على أحدث مراجعة.

داخل تعريف المهمة ، انقر على القائمة المنسدلة للإجراءات وحدد إنشاء servcie

استخدم ما يلي:

  • نوع الاطلاق: EC2
  • اسم الخدمة: demo-nodejs-app-service
  • عدد المهام: 1

تخطي الخيارات وانقر فوق إنشاء خدمة وعرض الخدمة.

سترى حالتها كـ "معلق". اعطها القليل من الوقت وسوف يشير إلى تشغيل.

انتقل إلى الكتلة (من خلال رابط من الخدمة التي أنشأناها للتو)> مثيلات EC2> انقر على مثيل الحاوية للكشف عن DNS العام.

زيارة DNS العام لعرض التطبيق لدينا! المنجم هو ec2–18–1919–111–111.us-east-2.compute.amazonaws.com

12. الخاتمة.

مبروك على الانتهاء من هذا المنصب! الحصول على رمز الجزء Docker من جيثب.

لا تتردد في دعم لي (devapparel.co) وتبدو جيدة أثناء ذلك. أيضا ، تعليق أو مشاركة هذا المنصب. شكرا للقراءة!

البرنامج المساعد: مرة أخرى ، لمزيد من المحتوى عالي الجودة مثل هذا ، تفضل بزيارة مدونة Zeolearn.