تثبيث NodeJS ليعمل على حساب Cpanel لا يدعم Node.js Selector

من عرب اندكس

كتبه: محمد الشناق.

من المعروف انه يمكن تشغيل تطبيقات Node.js علي مواقع الانترنت التي تعمل بلوحة التحكم Cpanel وتعمل بنظام التشغيل CloudLinux وذلك بفضل Node.js Selector المدمجة مع CloudLinux و Cpanel. ولكن ماذا لو كان نظام التشغيل ليس كلاود لينكس ٫ فكيف يمكن لنا جعل سي بنل تدعم تشغيل تطبيقات Node.js.

هناك العديد من الشروحات ويختلف السناريو باختلاف نوع نظام التشغيل Linux للسيرفر ٫ فلنظام التشغيل Ubuntu يمكن مراجعة https://docs.cpanel.net/knowledge-base/web-services/using-passenger-applications/ ولانظمة RHEL مثل Centos و AlmaLinux راجع https://docs.cpanel.net/knowledge-base/web-services/how-to-install-a-node.js-application/

واليوم سوف اتحدث في هذا المقال عن تشغيل Node.js على انظمة Ubuntu (اقرا كامل المقال فضلا قبل التطبيق)

اذا كان النظام لديك CloudLinux فان Node.js Selector تقدم هذه الميزه وبالتالي لا داعي لاستخدام هذا الشرح.

تثبيت Node.js على لوحة تحكم سي بنل تعمل على سيرفر بنظام التشغيل Ubuntu 22.04

ماذا سوف نحتاج؟

  1. سيرفر متصل بالانترنت يعمل بنظام التشغيل Ubuntu يفضل Ubuntu 22.04 حيث انه ما تم التطبيق عليه.
  2. يجب ان تكون لوحة السي بنل قد تم تثبيتها على السيرفر بنجاح وتعمل بشكل سليم.
  3. امكانيه الوصول الى SSH السيرفر عن طريق المستخدم root.
  4. امكانيه انشاء حسابات استضافة على السيرفر.

تشغيل Passenger من خلال ea-apache24-mod-passenger

قم على اعادة بناء Easy Apache 4 والتاكد من اختيار mod-passenger كما في الصوره التالية ادناه وقم باعادة بناء Apache


بعد ذلك يجب عليك التاكد من تنصيب nodejs و npm على السيرفر

باستخدام المستخدم root على السيرفر قم بتحرير الملف /etc/cpanel/ea4/passenger.nodejs

nano /etc/cpanel/ea4/passenger.nodejs

في حال عدم توفر nodejs في السيرفر سوف تجد ان محتويات الملف سوف تكون كما يلي

/usr/local/bin/ea-passenger-runtime_nodejs-is-not-installed

في هذه الحاله فانه يجب علينا ان نقوم بتثبيت nodejs و npm، يمكنك التاكد من توفر هذه الاوامر في ال terminal وفي حال عدم وجودها قم على تثبيتها باستخدام الاوامر التالية:

apt install nodejs
apt install npm

عند تثبيث nodejs و npm والتاكد من اصداراتها قم على تنفيذ الامر التالي (من اجل اعادة ضبط اعدادات تطبيقات Passenger في السي بنل):

/usr/local/bin/ea-passenger-runtime-applications-settings --fix

وبهذا نكون قد وفرنا امكانية تشغيل تطبيقات nodejs من خلال passenger في السي بنل ٫ بامكانك التحقق من محتوى الملف /etc/cpanel/ea4/passenger.nodejs مره اخرى لتجد انه يحتوي على المسار الصحيح ل nodejs

تشغيل تطبيق Node.js علي حساب سي بنل على دومين اساسي او فرعي

في البدايه يجب ان نقوم برفع مجلد تطبيق nodejs في اي مكان مناسب خارج public_html ، انا في مثالي هذا قمت على رفع مشروع nodejs بسيط بداخل مجلد باسم nodjsapp

وقمت على تحرير ملف app.js الموجود بداخل مجلد nodejsapp وكانت محتوياته كالتالي (للاطلاع):

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}/`);
});

الان لتسجيل التطبيق وتشغيله نقوم بالدخول الى واجهة السي بنل للحساب المطلوب ومن Software نختار Application Manager (التي ظهرت مؤخرا بعد ان قمنا على تثبيث Passenger Application.

في ال Application Manager سوف نشاهد جميع التطبيقات التي قمنا بتسجيلها ٫ ولتسجيل تطبيق جديد كل ما علينا هو النقر على Register Application كما في الصوره

في شاشة Register Application سوف يظهر لنا النموذج الخاص بتسجيل التطبيق ٫ قبل تسجيل التطبيق يجب علينا التاكد من ان مجلة تطبيق Node.js الذي نود تشغيله موجود في المجلد الاساسي لمساحه الاستضافه خارج public_html لاننا سوف نحتاج ادخال اسمه اثناء تسجيل التطبيق. في مثالي هذا فانني قمت على انشاء مجلد باسم nodejsapp في المجلد الاساسي لمساحه الاستضاف.

عند الدخول الى Register Application سوف تلاحظ ظهور النموذج التالي:

تلاحظ في النموذج الخانات التالية:

  1. Application Name: وهو اسم التطبيق للاستدلال عليه وقد قمت في مثالي هذا على اختيار mynodeapp كمثال.
  2. Deployment domain: وهو عنوان الدومين او الصب دومين الذي تود تشغيل التطبيق عليه (لاحظ انه قد يظهر لديك الدومين الاساسي فقط٫بالتالي اذا كنت تود تشغيل التطبيق علي صب دومين فيجب عليك اولا اضافه الصب دومين من خلال السي بنل ثم Domains واضافة الصب دومين ثم العودة الى Register Application وسوف تجد ان الصب دومين موجود في قائمة ال Deployment domain).
  3. Base Application URL: العنوان الخاص بالتطبيق وفي مثالي هذا وضعت / لانني ارغب بتشغيل التطبيق على الجذر الاساسي للصب دومين.
  4. Application Path: وهو مسار تواجد تطبيق Node.js الذي تود تشغيله بحيث يكون خارج public_html وانا في مثالي هذا اخترت nodejsapp لانه ه، اسم المجلد والدي يحتوي علي ملفات التطبيق بما في ذلك ملف app.js.
  5. Deployment Environment: اختيار هل نود ان يعمل التطبيق في بيئة Development تطوير او Production انتاح ، وانا في مثالي هذا اخرت production.

بعد ان نقوم بتعبئة النموذج بالبيانات الصحيحه نقوم بالنقد على Deploy من اجل نشر التطبيق.

وبعدها نقوم بتصفح الدومين او الصب دومين الذي خصصناه لتطبيق Node.js من خلال المتصفح فنجد انه يعرض لنا محتويات التطبيق (وهو في مثالنا هذا node.ndtest.massar.cloud وظهر لنا في المتصفح كما في الصوره التالية:

وبهذا نكون قد قمنا على تشغيل تطبيق Node.js بنجاح

على الهامش

nodejs is not installed

عند تثبيت mod-passenger وفي حال قمت على معاينه الملف /etc/cpanel/ea4/passenger.nodejs سوف تجد ان بداخله الامر التالي /usr/local/bin/ea-passenger-runtime_nodejs-is-not-installed ولو قمت على تنفيذ ذلك الامر سوف تظهر لك الرساله التالية:

!!!! “nodejs” is not installed !!

Applications using it will not function until you:

   1. Install nodejs and npm
   2. Run `/usr/local/bin/ea-passenger-runtime-applications-settings --fix`

وهذا يعود لكون passenger لم يتكشف وجود nodejs و npm على السيرفر لذا يجب تثبيتهم ومن ثم تنفيد الامز /usr/local/bin/ea-passenger-runtime-applications-settings --fix من اجل ضبط المسارات الصحيحة ل nodejs في passenger.

بخصوص تعديل اسم الملف الاساسي للتطبيق app.js

يقوم Passenger بالبحث عن ملف app.js عند تنفيذه. لهذا يجب ان يكون الملف الاساسي هو app.js في حال كنت تستخدم ملف اساسي اخر غير هذا الملف فيجب عليك تحرير الملف

sudo nano /etc/apache2/conf.d/userdata/ssl/2_4/{username}/{domain}/{mynodeapp}.conf

#استبدل {username} باسم المستخدم
#استبدل {domain} بالدومين الخاص بك
#استبدل {mynodeapp} باسم التطبيق الخاص بك

وحدد الملف الاساسي الذي تود استخدامه ضمن التعليميه ٫ كما في المثال التالي:

PassengerStartupFile index.js

ومن ثم تنفيد الاوامر التالية:

sudo /usr/local/cpanel/scripts/rebuildhttpdconf
sudo /usr/local/cpanel/scripts/restartsrv_httpd

وعندها سوف يتغير الملف الاساسي من app.js الى index.js او الى الملف الذي قمت على اختياره. ولكن في حال كنت تستخدم Phusion Passenger open source وهو الغالب على الآمر فربما تتلقى الخاط التالي عند تنفيد الامرrebuildhttpdconf

Failed to generate a syntactically correct Apache configuration.
Bad configuration file located at /etc/apache2/conf/httpd.conf.work.64623ca8
Error:
The “/usr/sbin/httpd -DSSL -t -f /etc/apache2/conf/httpd.conf.work.64623ca8.cfgcheck -C Include "/etc/apache2/conf.modules.d/*.conf"” command (process 89275) reported error number 1 when it ended.
Configuration problem detected on line 12 of file /etc/apache2/conf.d/userdata/ssl/2_4/user/domain/appname.conf:	this feature is only available in Phusion Passenger Enterprise. You are currently running the open source Phusion Passenger Enterprise. Please learn more about and/or buy Phusion Passenger Enterprise at https://www.phusionpassenger.com/features#premium-features

--- /etc/apache2/conf.d/userdata/ssl/2_4/user/domain/appname.conf ---
	6        PassengerBaseURI "/"
	7        PassengerAppRoot "/home/user/nodejsapp"
	8        PassengerAppGroupName "user - mynodeapp"
	9        PassengerRuby /usr/bin/ruby3.0
	10        PassengerPython /usr/bin/python3.10
	11        PassengerNodejs /usr/bin/nodejs
	12 ===>         PassengerStartupFile index.js <===
	13    </IfModule>
	14</Location>
	15<Directory "/home/ndmast/nodejsapp">
	16    Allow from all
	17    Options -MultiViews
	--- /etc/apache2/conf.d/userdata/ssl/2_4/user/domain/mynodeapp.conf ---

وفي هذه الحالة اذا لم تكن ترغب بالترقيه الى Phusion Passenger Enterprise يمكنك اعادة الوضع كما كان بان يكون الملف app.js هو الاساسي ولكن في حال كان تطبيقك يتطلب اسم يكون الاسم مختلفنا فبامكانك عمل symbolic link للملف الاساسي مثال كما في الكود التالي:

cd ~/nodejsapp
ln -s index.js app.js

وفي هذه الحاله سوف يتم انشاء ملف تحويلي باسم app.js بحيث يتم التحويل الى الملف index.js وبالتالي تستطيع تنفيد التطبيق الان.

الخاتمة

يمكن تشغيل Node.js على السيرفرات التي تعمل بلوحة التحكم سي بنل وبنظام التشغيل Ubuntu. الا انني افضل ان يتم استخدام CloudLinux للتطبيقات التجاريه.

مراجع