We are currently in the process of preparing the Hypernode platform for PHP 7.1. To do so, we are revisiting our packaging and build-scripts for PHP and PHP modules. In the process we are updating some modules for all other PHP versions available on Hypernode as well.

We compile PHP and a couple of PHP modules from scratch so we can strip out components irrelevant for our platform and run every upstream change through our integration testing pipeline before deploying it on critical systems. This helps us spot regressions as they are introduced and it gives us great flexibility and velocity for when changes need to be made (like security patches).

At this point in time it is not possible to use PHP 7.1 on production Hypernodes yet, but if you want to get a sneak peak you can update to the latest version of hypernode-vagrant and select the PHP 7.1 (BETA) feature in the setup wizard. Keep in mind that the current implementation is not finished yet and does not contain all required modules to run Magento and that during development regressions may occur.

PHP 7.1 sneak peek in your local development environment

If you want to play around with this PHP 7.1 in the hypernode-vagrant already (LXC only for now) you can check out the latest master, remove your local.yml, run vagrant up and follow the prompt again. You can now enter ‘7.1’ as a PHP version option.

hypernode-vagrant$ vagrant box update
hypernode-vagrant$ vagrant up
Bringing machine 'hypernode' up with 'lxc' provider...
 
hypernode: Is this a PHP 5.5 or 5.6 or 7.0 or 7.1 Hypernode? [default 7.0]: 7.1
==> hypernode: Will boot a box with PHP 7.1 installed

For the technical adjustments made to hypernode-vagrant to facilitate this change, see this pull request on GitHub.

PHP 7.1 flag for hypernode-vagrant-runner

In the hypernode-vagrant repository there is a tool named hypernode-vagrant-runner. It is a wrapper around hypernode-vagrant that starts up a VM or a container and runs some code in it before cleaning it all up again. We use this tool to perform automated package builds as part of our continuous integration process (for a short explanation see “Continuous deployment of the Hypernode control code”
in this changelog) on our Jenkins cluster.

This means we technically use Hypernodes to compile software for Hypernode, which is pretty cool. That way we know for sure that there won’t be any incompatibilities between shared libraries, or other complications like that occur. This tool now accepts 7.1 for the --php flag.

hypernode-vagrant/tools/hypernode-vagrant-runner$ export PYTHONPATH=.
hypernode-vagrant/tools/hypernode-vagrant-runner$ ./bin/start_runner.py --help
usage: hypernode-vagrant-runner [-h] [--run-once]
                                [--project-path PROJECT_PATH]
                                [--command-to-run COMMAND_TO_RUN]
                                [--pre-existing-vagrant-path PRE_EXISTING_VAGRANT_PATH]
                                [--php {5.5,5.6,7.0,7.1}] [--enable-xdebug]
                                [--skip-try-sudo] [--user {app,root,vagrant}]
                                [--xenial] [--no-provision] [--verbose]

Run a project inside a hypernode-vagrant

optional arguments:
  -h, --help            show this help message and exit
  --run-once, -1        Run the provided hook once and destroy the machine.
                        Default persists the machine until CTRL + C
  --project-path PROJECT_PATH
                        Path to upload to the /data/web/public directory. If
                        specified the command wil be run in this directory.
                        Example: ~/code/projects/your_shop
  --command-to-run COMMAND_TO_RUN, -c COMMAND_TO_RUN
                        The command to run in the uploaded directory. Example:
                        -c "sh runtests.sh"
  --pre-existing-vagrant-path PRE_EXISTING_VAGRANT_PATH, -p PRE_EXISTING_VAGRANT_PATH
                        Path to an existing hypernode-vagrant checkout. By
                        default a new checkout in a temporary directory is
                        used
  --php {5.5,5.6,7.0,7.1}
                        Specify a PHP version. Default is 7.0

ionCube loader update

We are updating the ionCube loader for all available PHP versions from 6.1.0 to 10.1.1. The new (major) version is backwards compatible with ionCube-encoded files from older versions, so no action should be required. For specifics, see the changelog on the IonCube News page.

We do not enable ionCube on Hypernode by default because of the performance implications and stability concerns (in case we need to patch PHP quickly for security reasons and the loader becomes buggy or incompatible with a new version). Instead we offer it as opt-in functionality. For information about how to enable it see this article on byte.nl.

The php-hypernode PHP extension can now be built for PHP 7.1

The open source php-hypernode PHP module can now be built for PHP 7.1. This module intercepts GONE requests (where the client has already hung up) from the NGINX queue to the FPM handler. See the ‘how to avoid an overloaded web server’ section of this earlier changelog for a quick explanation of how it works and why that is desirable.

Changes will be deployed gradually over the course of this week.