البحث في الموقع
المحتوى عن 'hhvm'.
-
HHVM هي آلة افتراضية مفتوحة المصدر لتنفيذ الشيفرة المكتوبة بلغتي PHP وHACK. تُطور HHVM وتدعمها فيس بوك، الأمر الذي لفت الانتباه إليها كثيرا في الآونة الأخيرة. تختلف HHVM عن باقي محركات PHP لأنها تتبع منهج "الترجمة فقط في الوقت المناسب" JIT. HHVM تترجم الشيفرة PHP إلى شيفرة ثنائية وسيطة intermediate byte code ثم بعد ذلك إلى شيفرة بلغة الآلة x64 machine instructions قبيل وقت التنفيذ، هذا الأمر يسمح بكثير من التحسين وسرعة في الأداء مقارنة بالطرق التي تتبعها محركات PHP الأخرى. HHVM قوية وسريعة ، ولكنها -مقارنة بمحركات PHP الأخرى- تتطلب موارد أكثر من ذاكرة الوصول العشوائي RAM والمعالج CPU، مثلها مثل الآلات الافتراضية الأخرى (JVM مثلا). في هذه المقالة سوف نبين لك كيف تثبت HHVM وتدمجه مع Nginx. المتطلبات الأساسيةقد تم اختبار هذا الدرس على أوبنتو 14.04 . طريقة التثبيت الموصوفة في هذه المقالة والإعدادات المشروحة فيها ستكون هي نفسها في كل أنظمة التشغيل إلا بعض الأوامر ومسارات ملفات الإعداد. من أجل إتمام هذا الدرس وتطبيقه لا بد لك من الأمور التالية: نظام أوبنتو 14.04 مع ذاكرة وصول عشوائي RAM لا تقل عن 1 جيجا.مستخدم عادي له صلاحيات sudo.خادوم Nginx مثبت على النظام.كل الأوامر في هذا الدرس ينبغي أن تنفذ بصلاحيات المستخدم العادي، وفي حال كانت صلاحيات الجذر مطلوبة فسيُسبق الأمر بالكلمة sudo . في حال استخدمت أوبنتو 14.04 فإن له مستودعا رسميا يدعم HHVM، ومن أجل إضافة هذا المستودع يجب عليك استيراد المفتاح العام GnuPG بالأمر التالي: sudo apt-key adv --recv-keys --keyserver hkp://keyserver.ubuntu.com:80 0x5a16e7281be7a449بعد هذا يمكنك تثبيت مستودع HHVM بكل أمان بالأمر التالي: sudo add-apt-repository "deb http://dl.hhvm.com/ubuntu $(lsb_release -sc) main"بعد إضافة المستودع يجب عليك تحديث قاعدة بيانات الحزم حتى تنضاف إليها حزم المستودع الجديد وذلك يكون بالأمر التالي: sudo apt-get updateوأخيرا يمكنك تثبيت HHVM بالأمر التالي: sudo apt-get install hhvmالأمر السابق يقوم بتثبيت HHVM وتشغيلها في الوقت نفسه ، ولكي نجعل التشغيل تلقائيا مع تشغيل النظام فلابد لنا من تنفيذ الأمر: sudo update-rc.d hhvm defaultsالإعداداتيأتي مع HHVM سكريبت يجعل دمجها مع خادوم Nginx أسهل. ونحن نفترض أنك ثبتّ خادوم Nginx بالطريقة الافتراضية، وعليه يمكنك تنفيذ السكريبت من غير أي مدخلات بالأمر التالي: sudo /usr/share/hhvm/install_fastcgi.shعند تنفيذ هذا السكريبت يقوم بإضافة ملف الإعدادات etc/nginx/hhvm.conf/ إلى الملف الافتراضي لإعدادات Nginx server block ألا وهو الملف etc/nginx/sites-enabled/default/، هذا السكربت يعمل فقط مع الإعدادت الإفتراضية لخادوم Nginx بدون أي تغييرات في FastCGI. إذا كنت قد غير في إعدادات Nginx server block وإعدادات FastCGI كما هو الشأن في PHP-FPM فيجب عليك استبدال الإعدادات الجديدة بالقديمة يدويا وذلك بالتعديل على الملف etc/nginx/sites-enabled/default/: location ~ \.(hh|php)$ { fastcgi_keep_conn on; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; }تعني الأسطر السابقة أنه على Nginx أن يعالج أي ملف مطلوب ينتهي باللاحقة php. أو hh. الخاصة بلغة hack، ويجب عليك بعدئذ إعادة تشغيل الخادوم Nginx من أجل تفعيل التغييرات: sudo service nginx restartوأيضا يفترض هذا السكريبت أنك لم تغير إعدادات HHVM التي تجعل الخدمة قابلة للوصول إليها عبر العنوان 127.0.0.1:9000، هذه الإعدادات تأتي افتراضيا في الملف etc/hhvm/server.ini/ الذي محتواه: ; php options pid = /var/run/hhvm/pid ; hhvm specific hhvm.server.port = 9000 hhvm.server.type = fastcgi hhvm.server.default_document = index.php hhvm.log.use_log_file = true hhvm.log.file = /var/log/hhvm/error.log hhvm.repo.central.path = /var/run/hhvm/hhvm.hhbcولعلك لاحظت في هذه الإعدادات لـ HHVM المتغير hhvm.server.port الذي يحدد أن هذه HHVM سوف تستمع على منفذ البروتوكول TCP 9000، وعلى الهوست المحلي localhost ما لم يتم تغيير ذلك. يفترض ب HHVM أن تعمل في بيئات ذات عبء ثقيل ، لذلك فإن التغيير الأول الذي ينبغي عليك فعله هو تغيير طريقة الاستماع من المنفذ TCP إلى المقبس socket ، هذا سيستهلك موارد أقل من الذاكرة العشوائية والمعالج في حال التواصل بين الخادوم Nginx والآلة الافتراضية HHVM. لكي تغير تلك الإعدادات افتح الملف etc/hhvm/server.ini/ بأي محرر نصوص مفضل لديك مثل vim : sudo vim /etc/hhvm/server.ini ثم احذف السطر الذي يبدأ بـ hhvm.server.port، وضع في مكانه السطر التالي: hhvm.server.file_socket=/var/run/hhvm/hhvm.sockاحفظ الإعدادات ثم أعد تشغيل HHVM بالأمر: sudo service hhvm restartبعد ذلك يجب عليك أن تجعل الخادوم Nginx يأخذ بعين الاعتبار التغييرات السابقة وذلك بتعديل الملف etc/nginx/hhvm.conf/: sudo vim /etc/nginx/hhvm.confفي هذا الملف تأكد أن الموجه fastcgi_pass يشير إلى مقبس HHVM وأنه يظهر بالشكل التالي: fastcgi_pass unix:/var/run/hhvm/hhvm.sock;ثم بعد ذلك يجب عليك أن تعيد تشغيل الخادوم Nginx حتى يتم تفعيل تلك التغييرات ، من أجل ذلك نفذ الأمر: sudo service nginx restartيمكن للسكريبت usr/share/hhvm/install_fastcgi.sh/ أن يوفر عليك بعض الوقت، ولكن هناك أشياء لابد عليك من فعلها بنفسك لا سيما فيما يخص Nginx server blocks ، مثال على ذلك أن الإعدادات الافتراضية لـ Nginx server blocks إذا طلب منه صفحة index فإنه يفتح فقط الملفين index.html و index.htm عندما يكون سرد المجلدات ممنوعا، هذا أحد الأشياء التي يجب عليك تغييرها لكي يضاف index.php إلى الملفات التي يفتحها الخادوم عند طلب index. لفعل ذلك افتح ملفات إعدادات server block بمحررك المفضل: sudo vim /etc/nginx/sites-enabled/defaultثم اذهب إلى الجزء المخصص للخادوم ثم أضف index.php حيث يوجد ملفات index ، سيظهر ذلك الجزء بالشكل التالي: index index.html index.htm index.php;مرة اخرى أعد تشغيل خادوم Nginx ليتم تفعيل هذه الإعدادات: sudo service nginx restartاختبار وتعديل HHVMأول اختبار يمكنه أداؤه هو بواجهة أوامر PHP (cli) /usr/bin/php التي تشير إلى etc/alternatives/php/، والتي هي أيضا تشير إلى الملف التنفيذي usr/bin/hhvm/ الخاص بـ HHVM، نفذ الأمر: /usr/bin/php --versionعندما تنفذ هذا الأمر فإنه ينبغي أن ترى رقم إصدار HHVM ومعلومات أخرى كهذا: HipHop VM 3.8.1 (rel) Compiler: tags/HHVM-3.8.1-0-g3006bc45691762b5409fc3a510a43093968e9660 Repo schema: 253b3802ce1bcd19e378634342fc9c245ac76c33إذا كنت قد ثبتّ PHP من قبل فربما ظهر لك معلومات النسخة القديمة من PHP، من أجل تغيير ذلك وجعله يشير إلى HHVM نفذ هذا الأمر: sudo /usr/bin/update-alternatives --install /usr/bin/php php /usr/bin/hhvm 60بعد ذلك يمكنك استعمال الدالة ()phpinfo من أجل إظهار إعدادات وخواص الـ HHVM، لفعل ذلك أنشئ ملفا اسمه info.php في المجلد الافتراضي لخادوم الويب Nginx والذي هو usr/share/nginx/html/ باستخدام محررك المفضل: sudo vim /usr/share/nginx/html/info.phpثم أضف فيه الأسطر التالية: <?php phpinfo(); ?>إنه من المنصوح به لدى الخبراء أن تجعل كل ملفات الويب التي يشغلها الخادوم Nginx مملوكة للمستخدم الخاص به www-data. قم بعمل ذلك بالأمر التالي: sudo chown www-data: /usr/share/nginx/html/info.phpالآن جرب الدخول إلى هذا الملف الذي أنشأته عبر هذا الرابط: http://your_server_ip/info.php. يجب عليك استبدال your_server_ip بـ IP خادومك، والنتيجة ستكون في متصفحك هكذا: إذا لم يظهر لك مثل هذه الصورة فتأكد أنك اتبعت الخطوات السابقة بطريقة صحيحة ، ثم تفقد ملف أخطاء الخادوم Nginx الذي مساره var/log/nginx/error.log/ وملف HHVM الذي مساره var/log/hhvm/error.log/. ارجع الآن إلى متصفحك وأعد النظر تر أن هذه البيانات التي أظهرتها الدالة ()phpinfo هي نفسها التي تظهر مع محركات PHP الأخرى غير أن كل المتغيرات كانت مسبوقة بـ hhvm. عند استكشاف المتغيرات ستلحظ أن الحد الأقصى للذاكرة المسموحة هو 17179869184 بايت أي ما يقارب 17 غيغابايت، وهذا بالتأكيد سوف يقتل النظام إذا كان لا يملك سوى القليل من ذاكرة الوصول العشوائي ويجعلها لا تستجيب، لذلك يجب عليك أن تخفض ذلك الحد إلى قيمة هي أقل من سعة الذاكرة العشوائية لكي نضمن أن أي خدمة أخرى لن تتأثر بنقص في موارد النظام. كمثال عام، إذا كان نظامك يملك ذاكرة بسعة 2 جيغا فإنه ينبغي عليك تخفيض الحد الأقصى لـ HHVM إلى ما يقارب 1.2 جيغا. لفعل ذلك عدّل الملف etc/hhvm/php.ini/ بمحررك المفضل: sudo vim /etc/hhvm/php.iniثم أضف المتغير الجديد بعد القسم ; php options memory_limit = 1200Mبالطريقة نفسها يمكنك تغيير أي شيء تريده في إعدادات PHP ، فقط تأكد دائما أن تعيد تشغيل HHVM بعد انتهائك من التغييرات بالأمر: sudo service hhvm restartبعد كل ذلك يمكنك إجراء اختبار أكثر تعقيدا مع تطبيق ويب مشهور. من المهم أن تعرف أن HHVM ليس متوافقا مائة بالمائة مع PHP المعتاد ولا مع جميع أطر PHP الأكثر الشعبية. وقد أظهرت اختباراتنا خلال وقت كتابة هذا المقال أن العديد من تطبيقات PHP على شبكة الإنترنت مثل ووردبريس تعمل بشكل جيد. ومع ذلك فإن أطر العمل المدعومة محدودة العدد. عندما تقوم بالاختبار مع تطبيق ويب حقيقي فإنه لا شيء يخص HHVM يجب فعله، التثبيت والإعدادات هي نفسها كما هو الشأن في LEMP القياسية، وذلك لأن HHVM تأتي مجمعة بوحدات PHP القياسية ، وذلك يجعلها أكثر توافقية مع تطبيقات وأطر PHP. مع ذلك وفي بعض الحالات النادرة قد تحتاج لتثبيت وحدة إضافية لـ HHVM. على سبيل المثال إذا كنت تستخدم PostgreSQL بمثابة خادوم قاعدة البيانات فسوف تحتاج إلى وحدة pgsql. في مثل هذه الحالات راجع الوثائق الرسمية لـ HHVM. الخلاصةكما رأيت في هذا المقال فإن HHVM سهلٌ تثبيتها سهل إعدادها سهل دمجها مع خادوم الويب Nginx. فإن كان لديك ما يكفي من الموارد فينبغي أن تجربها ثم ترى كيف يعمل منهج JIT الذي تتبعه HHVM من حيث الأداء والاستقرار. لابد من سبب وجيه لموقع مثل فايس بوك بوظائفه المعقدة وحركة بيانات لا مثيل لها أن تثق به. وأما المواقع الصغيرة التي لها حركة بيانات أقل فأولى لها أن تختار حلولا أقل استهلاكا للذاكرة مثل PHP-FPM، فإنه بالتأكيد أفضل خيار. مقال مترجم من How To Install HHVM with Nginx on Ubuntu 14.04 للكاتب Anatoliy Dimitrov.