مقدمة
تعتمد تطبيقات الويب الحديثة على دعم قوي وآمن. لذلك، من الضروري إنشاء تطبيقات قابلة للتوسع وآمنة ومعقدة من الناحية المعمارية بحيث يمكن إدارتها بواسطة فرق صغيرة أو كبيرة من المطورين.
يفضل المطورون المعاصرون استخدام جافا سكريبت في كلٍ من واجهة المستخدم والخادم. يُعد Express.js إطار عمل جافا سكريبت ممتازًا يستخدمه معظم المطورين. مع ذلك، فإن بنيته البسيطة تجعله غير مناسب للتوسع والصيانة من قِبل فرق كبيرة. هنا يأتي دور Nest.js. يتميز Nest.js ببنية مدمجة تجعله مناسبًا جدًا للتوسع والنشر. كما أن دعمه الأصلي لـ TypeScript يجعله أكثر ملاءمة للمطورين من جافا سكريبت العادية.
في هذا الدرس التعليمي، ستتعلم كيفية نشر تطبيق NestJS باستخدام خادم الويب Nginx على خادم افتراضي خاص (VPS). ستتعلم كيفية نشر تطبيقك على الويب بشكل آمن.
المتطلبات الأساسية
- خادم افتراضي خاص (VPS) يعمل بنظام Ubuntu 20.04+ أو جهاز Ubuntu فعلي
- Node.js ومدير الحزم npm (أو yarn).
- خادم الويب Nginx
الخطوة 1 - إعداد ونشر تطبيق NestJS
في هذا القسم، ستقوم بتثبيت NestJS CLI وإنشاء تطبيق NestJS أساسي، والذي ستتعلم كيفية نشره باستخدام Nginx في الأقسام التالية.
قم بتثبيت NestJS CLI عالميًا
لتثبيت NestJS CLI على جهاز Ubuntu الخاص بك، افتح نافذة طرفية واكتب الأمر التالي.
npm i -g @nestjs/cliسيؤدي هذا إلى تثبيت واجهة سطر أوامر NestJS على جهازك. بعد ذلك، ستتعلم كيفية إنشاء مشروع NestJS جديد.
أنشئ مشروع NestJS جديد
يوفر NestJS الآن طريقتين لبدء مشروع جديد. يمكنك اختيار الطريقة الأنسب لك.
لإنشاء مشروع NestJS باستخدام واجهة سطر الأوامر، اكتب الأمر التالي.
nest new <project-name>Output? Which package manager would you ❤️ to use? (Use arrow keys)
❯ npm
yarn
pnpmبمجرد الانتهاء، ستتلقى مخرجات مشابهة لما يلي.
OutputCREATE node_app/.eslintrc.js (663 bytes)
CREATE node_app/.prettierrc (51 bytes)
CREATE node_app/README.md (3340 bytes)
CREATE node_app/nest-cli.json (171 bytes)
CREATE node_app/package.json (1947 bytes)
CREATE node_app/tsconfig.build.json (97 bytes)
CREATE node_app/tsconfig.json (546 bytes)
CREATE node_app/src/app.controller.ts (274 bytes)
CREATE node_app/src/app.module.ts (249 bytes)
CREATE node_app/src/app.service.ts (142 bytes)
CREATE node_app/src/main.ts (208 bytes)
CREATE node_app/src/app.controller.spec.ts (617 bytes)
CREATE node_app/test/jest-e2e.json (183 bytes)
CREATE node_app/test/app.e2e-spec.ts (630 bytes)سيؤدي هذا إلى إنشاء مشروع جديد في دليل العمل الحالي. يمكنك استخدام بدلاً من ذلك. ; قم بتوفير المسار المطلق إلى دليل آخر أيضًا.
محاكاة قالب البداية
يوفر NestJS طريقة بديلة لبدء مشروع جديد. إنه مستودع Git يعمل كقالب جاهز. يمكنك استنساخ هذا المستودع وبدء المشروع باستخدام الأوامر التالية.
git clone https://github.com/nestjs/typescript-starter.git <project-directory >بعد اكتمال عملية الاستنساخ، تحتاج إلى الانتقال إلى دليل المشروع ثم تشغيل npm install لتثبيت التبعيات من package.json.
cd <project-directory>
npm installبمجرد أن يصبح المشروع جاهزًا، يمكنك بدء تشغيل خادم التطبيق باستخدام الأمر التالي:
npm run startسيؤدي هذا إلى تشغيل التطبيق على الرابط http://localhost:3000. الآن، لديك تطبيق NestJS أساسي جاهز للتشغيل على localhost.
اختبار التطبيقات
بعد تطوير تطبيقك، يمكنك تشغيل اختبارات عليه للتأكد من أدائه كما هو متوقع. يوفر NestJS اختبارات Jest افتراضية لتشغيل الاختبارات على تطبيقك. يمكنك بدء الاختبار باستخدام الأمر التالي:
npm run testسيختبرك هذا البرنامج ويعرض نتائج مشابهة لما يلي:
Output> [email protected] test
> jest
PASS src/app.controller.spec.ts
AppController
root
✓ should return "Hello World!" (24 ms)
Test Suites: 1 passed, 1 total
Tests: 1 passed, 1 total
Snapshots: 0 total
Time: 2.895 s
Ran all test suites.في القسم التالي، ستتعلم كيفية نشر تطبيق NestJS هذا باستخدام Nginx كخادم وكيل عكسي على خادم الويب الخاص بك.
الخطوة 2 - تهيئة Nginx لخدمة تطبيق NestJS
الآن، يمكننا الانتقال إلى إعداد خادم ويب لاستضافة تطبيق NestJS هذا. سنستخدم أسلوب الخادم الوكيل العكسي. في هذا الأسلوب، نشغل تطبيقنا على الخادم المحلي (localhost) على منفذ محدد، ثم نستخدم خادم Nginx لتوجيه أي طلبات إلى عنوان IP العام أو النطاق الخاص بالخادم الافتراضي الخاص (VPS) إلى التطبيق على الخادم المحلي. يُعد استخدام خوادم الوكيل العكسي ممارسة شائعة في هذا المجال، لأنه يُعزز أمان خادم الويب من خلال إنشاء حاجز بين الطلبات الواردة وتطبيق الواجهة الخلفية نفسه. كما تُتيح خوادم الوكيل العكسي إدارة أفضل للأحمال على الخادم، خاصةً عند استخدامه لاستضافة تطبيقات ويب متعددة.
نقوم بتثبيت مدير الحزم بي ام 2 نبدأ بالبرنامج الذي يدير البرنامج أثناء التشغيل.
تثبيت pm2 مدير
يمكنك استخدام الأمر التالي لفتح مدير العمليات. بي ام 2 ثَبَّتَ.
npm install -g pm2بهذا العمل بي ام 2 يتم تثبيته عالميًا على جهازك.
إنشاء إعدادات Nginx لتطبيق NestJS
الآن، قم بتهيئة Nginx لتشغيل التطبيق. كما ذُكر في الدليل التمهيدي، تأكد من السماح لتطبيق Nginx بالوصول إلى HTTP وHTTPS في جدار الحماية. إذا كنت تستخدم جدار حماية ufw، يمكنك القيام بذلك باتباع التعليمات.
ufw enable
ufw allow ‘Nginx Full‘الآن، ستقوم بإنشاء كتلة تهيئة لتطبيق NestJS الخاص بنا. يُنصح بإنشاء كتل تهيئة جديدة للتطبيقات الجديدة بدلاً من تعديل الإعدادات الافتراضية. لإنشاء الكتلة، اكتب الكود التالي في سطر الأوامر.
sudo nano /etc/nginx/sites-available/your_domainهنا، استخدمنا your_domain للتطبيق، ولكن عليك تغييره إلى اسم تطبيقك. ثم في المحرر، أدخل الكود التالي:
server {
server_name your_domain www.your_domain;
location / {
proxy_pass http://localhost:3000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
}الآن، قم بإنشاء رابط رمزي يخبر Nginx بالبحث عن تطبيقات الويب المتاحة في مجلد sites-available:
sudo ln -s /etc/nginx/sites-available/your_domain /etc/nginx/sites-enabled/كذلك، عليك تعطيل الرابط الافتراضي، وإلا سيقوم nginx بإعادة توجيه جميع الطلبات إلى الموقع الافتراضي. استخدم الأمر التالي لإلغاء الربط.
sudo unlink /etc/nginx/sites-enabled/defaultأعد تشغيل خدمة Nginx الآن باستخدام الأمر التالي.
sudo systemctl restart nginxنشر تطبيق NestJS باستخدام Nginx
الآن، قم بتشغيل مدير الحزم pm2 لإدارة تنفيذ تطبيق NestJS الخاص بك. انتقل إلى مجلد تطبيق Nestjs واكتب الأمر التالي.
pm2 start npm --name "your_domain" – startيمكنك تشغيل الأمر التالي لضبط pm2 ليتم تشغيله عند إعادة تشغيل الخادم.
pm2 startupبعد الانتهاء من إعداد البرنامج في pm2، قم بحفظ قائمة عمليات pm2 بالبيانات التالية:
pm2 save
الآن، قمنا بضبط تطبيق الويب ليعمل عند بدء التشغيل وقمنا بتكوين Nginx ليكون بمثابة وكيل عكسي لتطبيقنا الذي يعمل على المضيف المحلي.
اختبار تطبيقات الويب
يمكنك اختبار تطبيق الويب من وحدة التحكم الخاصة بك عن طريق كتابة الأمر التالي.
curl http://localhostبما أننا قمنا بتعيين الوكيل العكسي إلى عنوان IP الخاص بالخادم نفسه، فسيتم إعادة توجيه أي طلب إلى عنوان IP العام للخادم أو نطاقه أو طلب localhost من الخادم إلى التطبيق. NestsJS your_domain إنه موجه.
OutputHello World!في القسم التالي، ستتعلم كيفية إضافة SSL إلى تطبيقك، مما سيسمح لك باستخدام بروتوكول HTTPS لطلباتك.
الخطوة 3 - إضافة شهادة SSL باستخدام Let's Encrypt (اختياري)
لقد تعلمت حتى الآن كيفية نشر تطبيق NestJS كامل الوظائف باستخدام خادم Nginx. مع ذلك، يستخدم هذا النشر بروتوكول HTTP، وهو غير مُوصى به في بيئات الإنتاج نظرًا لثغراته الأمنية. لذا، ننصحك بالتحويل إلى بروتوكول HTTPS، وهو نسخة مُشفّرة من HTTP. يستخدم HTTPS شهادات SSL/TLS الصادرة عن جهة إصدار الشهادات. هذه الشهادات خاصة بموقع الويب وتُشفّر الاتصال بين العميل والخادم.
قم بتثبيت Let's Encrypt Certbot CLI
توفر Let's Encrypt واجهة سطر أوامر لإدارة شهادات SSL للمستخدمين وأتمتتها. يمكنك تثبيت الأداة باستخدام الأمر التالي:
sudo apt install certbot python3-certbot-nginxسيؤدي هذا إلى تثبيت عميل certbot على خادم Ubuntu VPS الخاص بك.
احصل على شهادات SSL/TLS لنطاقك
يمكنك الآن الحصول على شهادات SSL لنطاقك باستخدام الأمر التالي
sudo certbot --nginx -d <your_domain> -d <www.your_domain>يجب عليك أن نطاقك استبدل certbot باسم نطاقك الفعلي. إذا كانت هذه هي المرة الأولى التي تُشغّل فيها certbot على خادمك الافتراضي الخاص (VPS)، فسيُطلب منك إدخال بريدك الإلكتروني والموافقة على شروط الاستخدام. قدّم المعلومات المطلوبة وتابع.
بمجرد تثبيت الشهادات، يمكنك إعادة توجيه جميع الطلبات إلى بروتوكول HTTPS. يُنصح بإعادة توجيه جميع الطلبات لضمان سلامة موقعك الإلكتروني.
نتيجة
في هذا الدرس، تعلمت كيفية نشر تطبيق NestJS باستخدام خادم الويب Nginx على خادم افتراضي خاص (VPS) يعمل بنظام Ubuntu في بيئة الإنتاج. كما تعلمت كيفية إعداد مشروع NestJS وخادم وكيل عكسي لتطبيقك باستخدام Nginx. وأخيرًا، تعلمت كيفية إضافة شهادات SSL/TLS لنطاق خادمك وضمان سلامة الاتصالات بين عملائك وخادمك.









