أعرف أنّك واحد من جهابذة الآلة العجيبة الذين لا تغلبهم الطرفية (console) ولا يرعبهم سوادها. ويوجّهون إليها الأوامر الواحد تلو الآخر بثقة وثبات حتى تدين لهم وتخضع بين أيديهم. لكن أن تكون جهبذًا فهذا لا يعني أنه يجب عليك إتمام أمورك دائمًا بالطريقة الصعبة مادام الخيار السهل متوافرًا. إنّي أنصح باستخدام أنظمة إدارة استضافات الويب لتسهيل عمليات تنصيب البرامج، والأمان، والحفاظ على الخادوم تحت السيطرة. ومن أشهر هذه البرامج لدينا سيبانل (cPanel) وهو مشهور لاستضافات بأشبي (PHP) لكن في هذه المقالة سأشرح كيف تستضيف عليه مشروعات نود (Nodejs).

التفعيل والتنصيب

على حسب كل استضافة، قد لا يكون نود مفعّلًا بشكل افتراضي، فإذا كنت أنت صاحب الاستضافة، أي لديك ولوج يوتشم (WHM)، فقم بتفعيل الحزمات أسفله، وإذا لم تكن أنت صاحب الاستضافة، أي لديك فقط ولوج سيبانل، فاطلب من مشرف الاستضافة أن يقوم بتفعيل الحزمات التالية:

ea-ruby24-mod_passenger
ea-apache24-mod_env
ea-nodejs10

إذا كنت أنت مشرف الاستضافة فقم بتفعيل الحزمات أعلاه من خلال واجهة يوتشم (WHM) على المسار التالي:

WHM >> Home >> Software >> EasyApache 4

إنشاء تطبيق نود جديد

قم بإنشاء مجلّد جديد في المكان الذي يروق لك على الخادوم وسمّه ما شئت، ثم ضع فيه ملفًا جديدًا لا تسمّه ما شئت بل سمّه app.js، هذه التسمية إجبارية لأن خادوم التطبيقات سيبحث عن هذا الاسم لتشغيل تطبيقك، وسأريك لاحقًا كيف تختار اسمًا آخر لو شئت. قم بوضع الرِماز (الكود) المبدئي التالي في الملف app.js لاختبار نجاح الإعداد.

const http = require('http')
const hostname = '127.0.0.1';
const port = 3000;
 
const server = http.createServer((req, res) => {
  res.statusCode = 200;
  res.setHeader('Content-Type', 'text/plain');
  res.end('Hello World! NodeJS \n');
});
 
server.listen(port, hostname, () => {
  console.log(`Server running at http://${hostname}:${port}/`);
});

لاحظ أن خادوم التطبيق الخاص بك سيتنصّت محلّيًا على المنفذ 3000، قم الآن بتشغيله بالأمر التالي:

/opt/cpanel/ea-nodejs10/bin/node app.js

لاحظ مسار تنصيب نود الخاص بـ سيبانل /opt/cpanel/ea-nodejs10/bin/، في حال كان سبق لك تنصيب نود أو تمّ ذلك ضمنيًا عبر تنصيبات أخرى، فإنه من الممكن أن يكون أمر node الذي تستخدمه ليس هو نفس نود التابع لـ سيبانل، لذلك تأكد منه بالأمر:

whereis node

إذا لم يعطك نفس المسار أعلاه فأنت تستخدم ثنائي نود الخاطئ، للتصحيح إمّا أدخل الأمر بالمسار الكامل كما فعلت أعلاه، أو اجعله على المسار الدائم PATH بالأمر التالي:

export PATH=/opt/cpanel/ea-nodejs10/bin/:$PATH

الآن أدخُل على الرابط http://localhost:3000 إذا كان الخادوم محليًا على حاسوبك، أو على عنوان الأيبي التابع للخادوم مثل http://x.x.x.x:3000. فإذا كانت إعداداتك ناجحة فإنك سترى الرسالة التالية:

Hello World! NodeJS

في حال أردت إعادة تشغيل التطبيق (لأنك عدّلت على المصدر أو أي سبب كان)، فقم بإنشاء أو لمس (touch) ملف فارغ باسم restart.txt ضمن مجلّدٍ باسم tmp ضمن مجلد المشروع:

touch $appDir/tmp/restart.txt

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

تسجيل التطبيق

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

من أجل التسجيل، افتح سيبانل وادخُل على سلسلة القوائم التالية:

cPanel >> Home >> Software >> Application Manager >> Register Application

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

تغيير اسم ملف التطبيق

سبق وأن أشرت أن اسم الملف الرئيسي لتطبيقك يجب أن يكون app.js، لكن ماذا لو أردت تغييره، أو كنت تستخدم إطار عمل يفرض عليك اسمًا مغايرا؟ يمكنك فعل ذلك باتّباع الخطوات أسفله.

أنشئ المسار التالي وافتحه بمحرّر النصوص الطرفي المفضل لديك:

nano /etc/apache2/conf.d/userdata/ssl/2_4/user/domain.nodejs.conf

أكتب في الملف التعليمات التالية مع تغيير exemple.com برابط موقعك وإدخال مسار تطبيقك الصحيح، التعليمات أسفله مجرّد مثال ولن تعمل طبعًا إذا لم تغيّر القيَم التمثيلة بالقيَم الصحيحة لديك:

DocumentRoot /user/example.com/public
# Use server.js as the startup file (entry point file) for
# your Node.js application, instead of the default app.js
PassengerStartupFile index.js
PassengerAppType node
PassengerAppRoot /nodejsapp/example.com

أعد بناء ملف الإعداد httpd بالأمر التالي:

/usr/local/cpanel/scripts/rebuildhttpdconf

أعد تشغيل أباتشي بالأمر التالي:

/usr/local/cpanel/scripts/restartsrv_httpd

سوف يبحث خادوم التطبيقات الآن عن الاسم index.js الذي قمنا بإعداده وذلك عوض الاسم app.js. يمكنك إعداد أي اسم آخر غير index.js.

لديك أسئلة؟ لم تشتغل معك؟ لا تتردد في ترك تعليق وسأسعد بمساعدتك.