How to Install HipHop Virtual Machine (HHVM) on an Ubuntu 17.04 VPS or Dedicated Server

Most of the websites and application we have today are powered by the LAMP stack, consisting of Linux, PHP, MySQL, and the Apache web server software.

A popular alternative to PHP in the LAMP stack is HHVM (HipHop Virtual Machine). It’s an open-source system designed to execute a variety of programs written in Hack code and PHP. It is developed by Facebook to run scripts and programs written in PHP. Facebook developed this service to improve performance and serve the large applications built in PHP, something both Zend and Apache cannot achieve.

HHVM utilizes its essential principle of just-in-time (JIT) technique to achieve excellent performance and maintain high flexibility offered by PHP. HHVM helps to execute Hack code and PHP into intermediate bytecode and then translates them dynamically into x64 machine code.

Since HHVM is powerful, it requires more CPU and RAM compared to other lightweight PHP dealers such as PHP-FPM.

In this guide, we will take through you step-by-step on how to install HHVM on Ubuntu systems (version 17.04).

Special Note: using a specialized Linux hosting plan will allow you to enjoy expert Linux support. This can be a major help if you run into trouble performing more complex installations.  Check out the Linux Hosting services featured on HostAdvice.

Requirements

For this article, you will need:

  • A sudo non-root user
  • Ubuntu 17.04 Droplet
  • Installed Nginx

Step 1: Installation on Ubuntu 17.04

For installation on Ubuntu 17.04, ensure the system packages are updated by running the commands below:

$ sudo apt-get update
$ sudo apt-get upgrade

Now, add HHVM repository on your virtual machine before you proceed with the installation.

$ sudo apt-get install software-properties-common
$ sudo apt-key adv --recv-keys --keyserver #hkp://keyserver.ubuntu.com:80 0x5a16e7281be7a449

To add the repository to Ubuntu system, run the command below:

$ sudo add-apt-repository "deb http://dl.hhvm.com/ubuntu $(lsb_release -sc) main"

Finally, install HHVM using the command below:

$ sudo apt-get install hhvm

This command will automatically install HHVM and start it immediately. To ensure the installation starts and stops automatically with Droplet, add HHVM to your default settings with the command below:

$ sudo update-rc.d hhvm defaults

To ensure HHVM has been installed successfully, run the following command:

$ php -v

#HipHop VM 3.15.0 (rel)
Compiler: tags/HHVM-3.15.0-0-g92a682ebaa3c85b84857852d8621f528607fe27d
Repo schema: 225d4323575bbc8a498dc809a1c41354f6bca83

Step 2: Configuring HHVM on Ubuntu 17.04

HHVM comes with an excellent script to install FastCGI based on a web server in your system.  In this section, we shall configure HHVM with the Apache and Nginx servers.

Apache

To install Apache server, run the command below:

$ sudo apt-get install -y apache2

Then configure HHVM in the FastCGI with Apache using the following command:

$ sudo /usr/share/hhvm/install_fastcgi.sh

Nginx

Once you run the script above, it adds a configuration file written as /etc/nginx/hhvm.conf to the default configuration of the Nginx server written as /etc/nginx/sites-enabled/default.

If you are using Nginx with PHP-FPM, then you will need to manually replace the previous FastCGI configuration with the text below:

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

Restart Nginx on your machine to apply these changes.

$ sudo service nginx restart

The process assumes that the default configuration of HHVM hasn’t changed. The setting originates from the main HHVM configuration file written as /etc/hhvm/server.ini and contains the following information.

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

In this configuration, the variable hhvm.server.port shows that HHVM is expected to listen to TCP port 9000. By default, it should listen on the localhost.

HHVM is ideal for heavy load configuration, so the first step is to change the ports and ensure HHVM is listening to socket instead of the TCP port.

To do so, open the file name /etc/hhvm/server.ini and run the command below:

$ sudo vim /etc/hhvm/server.ini

Spot the line hhvm.server.port and delete it then replace it with the text below:

/etc/hhvm/server.ini
hhvm.server.file_socket=/var/run/hhvm/hhvm.sock

Save the file, and restart HHVM to apply these changes. Use the command below:

$ sudo service hhvm restart

Update the system to ensure it applies to Nginx too. To do so, open the file /etc/nginx/hhvm.conf and edit as shown below:

$ sudo vim /etc/nginx/hhvm.conf

Ensure the fastgi_pass is directed to the HHVM socket and should be displayed in the format below:

fastcgi_pass unix:/var/run/hhvm/hhvm.sock;

Restart Nginx to apply these changes using the following command:

$ sudo service nginx restart

Step 3: Testing HHVM

The first critical test you can perform is the PHP command /usr/bin/php with directives that point to /etc/alternatives/php which finally points to HHVM.

/usr/bin/php --version

Once you run this command, the output should show a printed version of HHVM plus relevant repository information as shown below:

HipHop VM 3.8.1 (rel)
Compiler: tags/HHVM-3.8.1-0-g3006bc45691762b5409fc3a510a43093968e9660
Repo schema: 253b3802ce1bcd19e378634342fc9c245ac76c33

In case you have installed PHP before HHVM, it's still possible to see the output from the previous PHP. If you want to change it and point it to HHVM, use the command below:

$ sudo /usr/bin/update-alternatives --install /usr/bin/php php /usr/bin/hhvm 60

To view the HHVM settings, use the function phpinfo(). You need to create a new file in your default document /usr/share/nginx/html and run the command below:

$ sudo vim /usr/share/nginx/html/info.php
Your file should contain the following:
/usr/share/nginx/html/info.php
<?php
phpinfo();
?>

Try to access your files from your IP on Droplet. The address should look like this:

http://your_server_ip/info.php

Make sure your browser results resemble the output below:

If this image does not appear, make sure you check the installation process again from the beginning. Also, check for errors in Nginx and HHVM.

Conclusion

Congratulations! Now you have successfully installed HHVM. We hope this tutorial will help you install HHVM on your Ubuntu 17.04.

 

Check out these top 3 Linux hosting services

Was this article helpful?