إنشاء وتشغيل مشروع NestJS محليًا باستخدام ServBay على macOS
NestJS هو إطار عمل تدريجي مبني على Node.js لتطوير تطبيقات خوادم فعّالة وقابلة للتوسع. يُكتب باستخدام TypeScript ويستمد إلهامه من Angular، معتمدًا على بنية معيارية ونمط حقن التبعيات (DI). يوفر NestJS أدوات قوية تُمكّن المطورين من بناء تطبيقات معقدة سهلة الصيانة والاختبار وذات ترابط منخفض.
أهم مميزات وفوائد NestJS
- بنية معيارية: تنظيم الكود ضمن وحدات تسهّل فهم التطبيق وصيانته.
- حقن التبعيات: نظام جيد لحقن التبعيات يُعزز سهولة الاختبار والصيانة.
- استخدام TypeScript: الاستفادة من فحص الأنواع التابع للغة، الواجهات، وميزات حديثة في JavaScript، لرفع جودة الكود وتقليل الأخطاء أثناء التشغيل.
- الديكورات الغنية: استخدام Decorators لتعريف وحدات التحكم والخدمات والوحدات لجعل الكود أكثر وضوحًا وإيجازًا.
- نظام بيئي قوي: مجتمع نشط ووفرة من الوحدات والإضافات الجاهزة للتكامل مع TypeORM، Mongoose، GraphQL، الويب سوكيت، التخزين المؤقت، التحقق وغير ذلك.
- معتمد على المعايير: مبني على Express أو Fastify، ما يتيح توافقًا ممتازًا وأداءً عالياً.
باستخدام NestJS، يمكنك تطبيق أفضل ممارسات تطوير الخوادم (مثل مبادئ SOLID وأنماط التصميم) لبناء تطبيقات ويب، خدمات API، أو خدمات مصغرة عالية الأداء.
إنشاء وتشغيل مشروع NestJS باستخدام ServBay
يوفر ServBay بيئة تطوير ويب محلية قوية ومتكاملة لنظام macOS، مع دعم لعدة إصدارات من Node.js وقواعد البيانات الشائعة وخوادم الويب. في هذا الدليل سنستخدم بيئة Node.js ومزايا "المواقع" في ServBay لإنشاء وتهيئة مشروع NestJS. كما سنوظّف ميزة الوكيل العكسي حتى تتمكن من الوصول إلى تطبيقك المحلي باسم نطاق مخصص.
المتطلبات المسبقة
قبل البدء تأكد من توفر ما يلي:
- تنصيب ServBay: يجب أن يكون ServBay منصبًا بنجاح على macOS.
- تفعيل حزمة Node.js: من خلال علامة تبويب "الحِزم" (Packages) في لوحة تحكم ServBay، تأكد من اختيار إصدار Node.js المطلوب وتفعيله. إذا لم تكن قد فعّلت Node.js، اطلع على دليل استخدام ServBay Node.js للحصول على الإعدادات.
إنشاء مشروع NestJS
تثبيت NestJS CLI عالميًا
افتح التيرمنال واستخدم npm (المرفق مع Node.js غالبًا) لتثبيت أداة CLI الخاصة بـ NestJS على مستوى النظام. تسمح لك الأداة بتأسيس وتطوير وصيانة تطبيقاتك.
bashnpm install -g @nestjs/cli
1تهيئة المشروع
انتقل إلى المجلد الجذري الموصى به لمواقع ServBay وهو
/Applications/ServBay/www
. هذا المجلد هو مكان حفظ المواقع المُعد مسبقًا في ServBay. عند إنشاء المشروع هنا، ستسهل عليك خطوات التكوين لاحقًا. أنشئ مشروعك الجديد كالتالي:bashcd /Applications/ServBay/www nest new servbay-nest-app
1
2بعد تنفيذ الأمر، سيقودك البرنامج خلال عملية التأسيس بما يشمل اختيار مدير الحزم (npm, yarn أو pnpm). يُنصح باستخدام npm لتوحيد البيئة. سينشئ المشروع في المسار
/Applications/ServBay/www/servbay-nest-app
.تثبيت تبعيات المشروع
ادخل إلى مجلد المشروع
servbay-nest-app
ونفّذ تثبيت الحزم:bashcd servbay-nest-app npm install
1
2أمر
nest new
يقوم غالبًا بتثبيت التبعيات تلقائيًا، لكن التنفيذ مرة أخرى يضمن صحة واكتمال التثبيت أو تحديث الحزم.
تعديل مخرجات NestJS الافتراضية (اختياري)
للتأكد من نجاح التشغيل والوصول عبر ServBay، يمكنك تعديل الاستجابة الافتراضية لمسار الجذر.
تعديل ملف
src/app.controller.ts
افتح الملف
src/app.controller.ts
في محررك المفضل. عدّل محتواه ليعيد رسالة "Hello ServBay!" عند زيارة المسار/
:typescriptimport { Controller, Get } from '@nestjs/common'; import { AppService } from './app.service'; // إذا أبقت على AppService @Controller() export class AppController { constructor(private readonly appService: AppService) {} // إذا أبقيت على AppService @Get() getHello(): string { // return this.appService.getHello(); // إذا كنت تستخدم AppService return 'Hello ServBay!'; // إعادة النص مباشرة } }
1
2
3
4
5
6
7
8
9
10
11
12
13يعرّف هذا الكود وحدة تحكم بسيطة لمعالجة طلبات GET على الجذر وتعيد النص المطلوب.
تشغيل مشروع NestJS في وضع التطوير والوصول إليه من خلال ServBay
غالبًا ما تُشغّل مشاريع NestJS في وضع التطوير باستخدام الخادم الداخلي على منفذٍ محدد. يمكنك بعدها إعداد ServBay ليعمل كوكيل عكسي ويعيد التوجيه إلى هذا المنفذ باستخدام نطاق مخصص.
تشغيل الخادم في وضع التطوير
من المجلد الجذري
/Applications/ServBay/www/servbay-nest-app
، شغّل الخادم بتحديد رقم المنفذ مثل8585
:bashcd /Applications/ServBay/www/servbay-nest-app PORT=8585 npm run start:dev
1
2ينفذ أمر
npm run start:dev
البرنامج بنسخة تدعم TypeScript وإعادة التحميل التلقائي عند التعديل. سيبدأ الاستماع علىlocalhost:8585
.إعداد موقع ServBay كوكيل عكسي
من لوحة تحكم ServBay، انتقل إلى تبويب "المواقع" (Websites)، واضغط "+" لإضافة موقع جديد، ثم أكمل البيانات كالتالي:
- الاسم (Name): مثلًا
موقعي التطويري الأول لـ NestJS
. - النطاق (Domains): مثل
servbay-nest-test.dev
. يقوم ServBay تلقائيًا بتحويل نطاقات مثل .dev إلى localhost دون تدخل. - النوع (Type): اختر "وكيل عكسي (Reverse Proxy)".
- عنوان الـIP (IP Address): عادةً
127.0.0.1
(محلي). - المنفذ (Port): أدخل رقم المنفذ الذي يستمع له تطبيقك (هنا
8585
).
بعد الحفظ سيحدّث ServBay إعدادات الخادم (Caddy أو Nginx) تلقائيًا. لمزيد من التفاصيل راجع دليل إضافة موقع في ServBay.
- الاسم (Name): مثلًا
الوصول إلى الموقع في وضع التطوير
افتح متصفحك وانتقل إلى النطاق الذي أعددته مثل
https://servbay-nest-test.dev
.ملاحظات:
- يوفر ServBay شهادات SSL مجانية تلقائيًا (موقعة بـ ServBay User CA)، مما يتيح تصفحًا آمنًا عبر https. إذا ظهرت رسالة تحذير، قد يحتاج متصفحك لتوثيق شهادة ServBay User CA. راجع دليل حماية الموقع باستخدام SSL للمزيد.
- تأكد من استمرار تشغيل خادم NestJS (
PORT=8585 npm run start:dev
). إذا توقف لن تتمكن من الوصول للموقع.
نشر نسخة الإنتاج والوصول إليها عبر ServBay
قبل نشر تطبيق NestJS في بيئة إنتاج (حتى لو كانت بيئة محلية)، يحتاج المشروع عادةً إلى بناء نسخة الإنتاج.
بناء نسخة الإنتاج
من مجلد المشروع، نفّذ:
bashcd /Applications/ServBay/www/servbay-nest-app npm run build
1
2سيترجم TypeScript الشيفرة المصدرية إلى مجلد
dist
.تشغيل خادم الإنتاج
بعد البناء، شغّل النسخة النهائية كالتالي بتحديد منفذ مثل
8586
وتعيين متغير البيئة:bashcd /Applications/ServBay/www/servbay-nest-app PORT=8586 NODE_ENV=production node dist/main.js
1
2عادةً لا يتوفر مراقبة ملفات أو إعادة تحميل تلقائي في وضع الإنتاج.
إعداد موقع ServBay للإنتاج
عُد إلى تبويب المواقع وعدّل أو أضف موقعًا جديدًا بالمواصفات:
- الاسم (Name): مثلًا
موقعي الإنتاجي الأول لـ NestJS
. - النطاق (Domains): مثل
servbay-nest-test.prod
. - النوع (Type): "وكيل عكسي (Reverse Proxy)".
- عنوان الـIP (IP Address):
127.0.0.1
. - المنفذ (Port):
8586
(مطابق للمنفذ المحدد).
ثم احفظ الإعدادات.
- الاسم (Name): مثلًا
الوصول إلى الموقع في وضع الإنتاج
افتح المتصفح وادخل إلى
https://servbay-nest-test.prod
لمعاينة تطبيقك في وضع الإنتاج. سيُفعّل ServBay التشفير عبر SSL مباشرةً.
الاتصال بقواعد البيانات المدمجة في ServBay
ServBay يأتي مع دعم متكامل لمجموعة من قواعد البيانات منها MariaDB (متوافقة مع MySQL)، PostgreSQL، MongoDB وRedis. أثناء تطويرك باستخدام NestJS تستطيع الاتصال بها وادارتها بسهولة.
تنويه مهم: قبل محاولة الاتصال تأكد من تفعيل الحزم الخاصة بقواعد البيانات المطلوبة عبر تبويب "الحزم" (Packages) في لوحة تحكم ServBay. ستجد هناك معلومات مثل المنفذ الافتراضي واسم المستخدم وكلمة المرور. ننصحك بشدة في الإنتاج بتغيير الإعدادات الافتراضية وإنشاء مستخدمين مخصصين بصلاحيات محدودة.
فيما يلي أمثلة تهيئة الاتصال بقواعد البيانات الشائعة من خلال NestJS (داخل AppModule أو وحدات قواعد بيانات خاصة):
الاتصال بـ MongoDB
باستخدام حزمة
@nestjs/mongoose
:bashnpm install @nestjs/mongoose mongoose
1ثم إعداد الوحدة:
typescriptimport { Module } from '@nestjs/common'; import { MongooseModule } from '@nestjs/mongoose'; // ... استيرادات أخرى @Module({ imports: [ MongooseModule.forRoot('mongodb://localhost:27017/servbay-nest-app'), // المنفذ الافتراضي 27017 // ... وحدات أخرى ], controllers: [], // ... providers: [], // ... }) export class AppModule {}
1
2
3
4
5
6
7
8
9
10
11
12
13سلسلة الاتصال الافتراضية لـ ServBay غالبًا هي
mongodb://localhost:27017/
. يمكنك إنشاء قاعدة البيانات المطلوبة من خلال أداة MongoDB Compass أو الأمرmongosh
.الاتصال بـ Redis
عبر
@nestjs/redis
:bashnpm install @nestjs/redis redis @types/redis
1ثم التهيئة:
typescriptimport { Module } from '@nestjs/common'; import { RedisModule } from '@nestjs/redis'; // ... استيرادات أخرى @Module({ imports: [ RedisModule.forRoot({ url: 'redis://localhost:6379', // المنفذ الافتراضي 6379 }), // ... وحدات أخرى ], controllers: [], // ... providers: [], // ... }) export class AppModule {}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15عنوان الاتصال الافتراضي في ServBay هو
localhost:6379
.الاتصال بـ MariaDB (متوافق مع MySQL)
عبر حزمة
@nestjs/typeorm
:bashnpm install @nestjs/typeorm mysql2 typeorm
1ثم ضبط الاتصال:
typescriptimport { Module } from '@nestjs/common'; import { TypeOrmModule } from '@nestjs/typeorm'; // ... استيرادات أخرى @Module({ imports: [ TypeOrmModule.forRoot({ type: 'mariadb', // أو 'mysql' host: 'localhost', port: 3306, // المنفذ الافتراضي username: 'root', // اسم المستخدم الافتراضي password: 'password', // كلمة مرور المستخدم الافتراضي database: 'servbay_nest_app', // يجب إنشاء هذه القاعدة يدويًا entities: [], // مصفوفة الكيانات الخاصة بك synchronize: true, // للإنتاج أوقفها }), // ... وحدات أخرى ], controllers: [], // ... providers: [], // ... }) export class AppModule {}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22تنويه: كلمة مرور المستخدم الجذري الافتراضية هي
password
. استخدم أداة إدارة قواعد البيانات (مثل TablePlus أو DBeaver أو MySQL CLI) لإنشاء قاعدة البيانات المطلوبة وربما مستخدم جديد بصلاحيات محدودة لأغراض الأمان.الاتصال بـ PostgreSQL
أيضًا من خلال
@nestjs/typeorm
:bashnpm install @nestjs/typeorm pg typeorm
1ثم:
typescriptimport { Module } from '@nestjs/common'; import { TypeOrmModule } from '@nestjs/typeorm'; // ... استيرادات أخرى @Module({ imports: [ TypeOrmModule.forRoot({ type: 'postgres', host: 'localhost', port: 5432, // المنفذ الافتراضي username: 'servbay', // تحقق من مستخدمك الافتراضي؛ قد يكون postgres password: 'password', // يرجى التأكد من الإعداد database: 'servbay_nest_app', // يجب إنشاءها يدويًا entities: [], // الكيانات الخاصة بك synchronize: true, // التطوير فقط }), // ... وحدات أخرى ], controllers: [], // ... providers: [], // ... }) export class AppModule {}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22ملاحظة: قد يختلف المستخدم الافتراضي وكلمة المرور في PostgreSQL حسب إعداد ServBay (مثل
servbay
أوpostgres
). تحقق من لوحتك أو الوثائق لمزيد من الدقة، وأنشئ القاعدة والمستخدم المطلوبين بالأذونات المناسبة.
الخلاصة
من خلال هذا الدليل، أصبحت الآن قادراً على إنشاء وتشغيل مشروع NestJS محليًا على macOS باستخدام ServBay بسهولة وسرعة. يبسّط ServBay عملية تطوير واختبار تطبيقاتك من خلال بيئة Node.js مدمجة، وإعداد سريع للمواقع (بخاصة الوكيل العكسي)، ودعم قواعد بيانات قوي. يمكنك التبديل ببساطة بين وضعي التطوير والإنتاج، وتأمين موقعك مع نطاقات مخصصة وHTTPS. كما يمكنك الاتصال بقواعد البيانات المدمجة مباشرة، لبناء تطبيقات أكثر احترافية وكفاءة.