So installieren Sie HHVM mit Nginx unter Ubuntu 14.04

Einführung

HHVM ist eine virtuelle Open Source-Maschine zum Ausführen von PHP- und Hack -Code. HHVM wird von Facebook entwickelt und unterstützt, eine Tatsache, die in letzter Zeit immer mehr Aufmerksamkeit auf HHVM lenkt.

HHVM unterscheidet sich von anderen PHP-Engines durch den JIT-Kompilierungsansatz (Just-in-Time). HHVM kompiliert PHP-Code in einen Zwischenbyte-Code und dann direkt in x64-Maschinenanweisungen. Dies ermöglicht mehr Optimierungen und eine höhere Leistung im Vergleich zu anderen Motoren.

HHVM ist leistungsstark und schnell, erfordert aber auch Ressourcen wie jede andere virtuelle Maschine (z. JVM). Daher benötigt HHVM im Vergleich zu anderen leichteren PHP-Interpreter wie PHP-FPM mehr RAM und CPU. Unsere Tests haben gezeigt, dass eine ordentliche Leistung ein Droplet mit mindestens 1 GB RAM erfordert.

In diesem Artikel zeigen wir Ihnen, wie Sie HHVM installieren und in Nginx integrieren.

Voraussetzungen

Dieses Handbuch wurde unter Ubuntu 14.04 getestet. Die beschriebene Installation und Konfiguration ist unter anderen Betriebssystemen oder Betriebssystemversionen ähnlich, die Befehle und der Speicherort der Konfigurationsdateien können jedoch variieren.

Für dieses Tutorial benötigen Sie:

Alle Befehle in diesem Lernprogramm sollten als Benutzer ohne Rootberechtigung ausgeführt werden. Wenn für den Befehl root-Zugriff erforderlich ist, wird vor + sudo + angezeigt.

Installation

Für Ubuntu 14.04 gibt es ein offiziell unterstütztes HHVM-Repository. Um dieses Repository hinzuzufügen, müssen Sie seine öffentlichen GnuPG-Schlüssel mit dem folgenden Befehl importieren:

sudo apt-key adv --recv-keys --keyserver hkp://keyserver.ubuntu.com:80 0x5a16e7281be7a449

Danach können Sie das Repository von HHVM mit dem folgenden Befehl sicher installieren:

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

Sobald Sie das Repository hinzugefügt haben, müssen Sie apt, den Ubuntu-Software-Manager, darauf hinweisen, dass es neue Pakete gibt, die mit ihm installiert werden können. Dies kann erreicht werden, indem der Cache von apt mit dem folgenden Befehl aktualisiert wird:

sudo apt-get update

Schließlich können Sie HHVM mit dem Befehl installieren:

sudo apt-get install hhvm

Der obige Befehl installiert HHVM und startet es zum ersten Mal. Um sicherzustellen, dass HHVM automatisch mit dem Droplet gestartet und gestoppt wird, fügen Sie HHVM mit dem folgenden Befehl zu den Standard-Runlevels hinzu:

sudo update-rc.d hhvm defaults

Aufbau

HHVM wird mit einem Skript geliefert, das die Integration mit Nginx sehr einfach macht. Vorausgesetzt, Sie haben eine Standard-Nginx-Installation, können Sie das Skript ohne folgende Argumente ausführen:

sudo /usr/share/hhvm/install_fastcgi.sh

Bei der Ausführung fügt dieses Skript die Konfigurationsdatei "+ / etc / nginx / hhvm.conf " zur standardmäßigen Nginx-Serverblockkonfiguration " / etc / nginx / sites-enabled / default +" hinzu. Es funktioniert nur mit einer Nginx-Standardkonfiguration ohne FastCGI-Konfigurationen.

Wenn Sie Ihren Standard-Serverblock bereits mit einer benutzerdefinierten FastCGI-Konfiguration wie der für PHP-FPM geändert haben, müssen Sie Ihre vorherige FastCGI-Konfiguration manuell durch diese ersetzen:

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

Das oben Gesagte bedeutet, dass Nginx HHVM verwenden sollte, um alle angeforderten + .php + oder + .hh + (Hack) -Dateien zu verarbeiten.

Sie müssen Nginx auch neu starten, um die Änderung zu aktivieren:

sudo service nginx restart

Es wird außerdem davon ausgegangen, dass Sie die Standard-HHVM-Konfiguration nicht geändert haben, die den Dienst unter +127.0.0.1: 9000 + zugänglich macht. Diese Einstellung stammt aus der HHVM-Hauptkonfigurationsdatei "+ /etc/hhvm/server.ini +", die Folgendes enthält:

/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 der obigen Konfiguration können Sie die Variable + hhvm.server.port + bemerken, die bestimmt, dass HHVM den TCP-Port 9000 überwacht. Sofern nicht anders angegeben, wird standardmäßig localhost abgehört.

HHVM wird für Umgebungen mit hoher Auslastung in Betracht gezogen. Die erste Konfigurationsänderung, die Sie vornehmen können, besteht darin, dass HHVM einen Socket anstelle eines TCP-Ports überwacht. Somit wird die Kommunikation zwischen Nginx und HHVM weniger CPU und Speicher erfordern.

Um HHVM für das Abhören eines Sockets zu konfigurieren, öffnen Sie die Datei "+ / etc / hhvm / server.ini " in Ihrem bevorzugten Editor, z. B. mit " vim +":

sudo vim /etc/hhvm/server.ini

Entfernen Sie dann die Zeile, die mit + hhvm.server.port + beginnt, und fügen Sie stattdessen die folgende hinzu:

/etc/hhvm/server.ini

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

Speichern Sie die Konfigurationsdatei und starten Sie HHVM mit dem folgenden Befehl neu:

sudo service hhvm restart

Als Nächstes müssen Sie Nginx auf diese Änderung aufmerksam machen. Öffnen Sie dazu die Datei + / etc / nginx / hhvm.conf + zur Bearbeitung:

sudo vim /etc/nginx/hhvm.conf

Stellen Sie in dieser Datei sicher, dass die Direktive "+ fastcgi_pass +" auf den HHVM-Socket verweist und folgendermaßen aussieht:

fastcgi_pass ;

Sie müssen auch Nginx neu starten, damit diese Änderung wirksam wird. Verwenden Sie dazu den Befehl:

sudo service nginx restart

Das Skript + / usr / share / hhvm / install_fastcgi.sh + kann Ihnen einige Zeit sparen, aber es gibt Dinge, die Sie manuell anpassen müssen, insbesondere in Bezug auf Ihre Nginx-Serverblöcke. Beispielsweise wird die standardmäßige Serverblockkonfiguration nur als Indexdateien geöffnet, + index.html + und + index.htm +, während die Verzeichnisauflistung verboten ist. Dies ist eine Sache, die Sie unbedingt ändern sollten und die + index.php -Dateien auch als Indexdateien enthält. Öffnen Sie dazu erneut die Konfigurationsdatei für den Standardserverblock mit Ihrem bevorzugten Editor:

sudo vim /etc/nginx/sites-enabled/default

Gehen Sie dann zum Teil "+ server " und fügen Sie " index.php +" in die Zeile mit den Indizes ein, so dass es so aussieht:

/ etc / nginx / sites-enabled / default

index index.html index.htm index.php;

Starten Sie Nginx erneut, damit diese Einstellung wirksam wird:

sudo service nginx restart

Testen und Optimieren von HHVM

Der erste Test, den Sie durchführen können, ist mit der PHP-Befehlszeilenschnittstelle (cli) + / usr / bin / php +, die auf + / etc / alternatives / php + verweist, was in Begriff auf die HHVM-Binärdatei `+ / usr verweist / bin / hhvm + `.

/usr/bin/php --version

Wenn Sie den obigen Befehl ausführen, sollten die gedruckten Versions- und Repository-Informationen von HHVM folgendermaßen angezeigt werden:

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

Wenn Sie PHP vor HHVM installiert haben, sehen Sie möglicherweise immer noch die Ausgabe des alten PHP. Führen Sie den folgenden Befehl aus, um dies zu ändern und auf HHVM zu verweisen:

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

Als nächstes können Sie die bekannte Funktion "+ phpinfo () " verwenden, um die Einstellungen und Optionen von HHVM anzuzeigen. Erstellen Sie zu diesem Zweck eine neue Datei mit dem Namen " info.php" in Ihrem Standard-Dokumentenstamm - "+ / usr / share / nginx / html" mit Ihrem bevorzugten Editor.

sudo vim /usr/share/nginx/html/info.php

Die neue Datei sollte enthalten:

/usr/share/nginx/html/info.php

<?php
phpinfo();
?>

Es ist immer ratsam, sicherzustellen, dass alle Nginx-Webdateien dem Nginx-Benutzer "+ www-data " gehören. Dies ändert den Besitz dieser Datei in " www-data" mit dem Befehl:

sudo chown www-data: /usr/share/nginx/html/info.php

Versuchen Sie nun, über die IP-Adresse Ihres Droplets auf diese Datei zuzugreifen. Die URL in Ihrem Browser sollte wie folgt aussehen: "+ http: /// info.php +".

Das Ergebnis in Ihrem Browser sollte folgendermaßen aussehen:

Wenn Sie keine ähnliche Seite sehen, vergewissern Sie sich zunächst, dass Sie die Installationsanweisungen unter den Voraussetzungen korrekt befolgt haben. Suchen Sie im zweiten Schritt nach Fehlern im Fehlerprotokoll von Nginx (+ / var / log / nginx / error.log +) und HHVM (+ / var / log / hhvm / error.log +).

Wenn Sie zu Ihrem Browser zurückkehren, werden Sie feststellen, dass diese Seite der von "+ phpinfo () " mit dem üblichen PHP-Code erstellten Seite ähnelt. Tatsächlich sind die meisten Variablen mit Ausnahme der HHVM-spezifischen Variablen, die mit dem Präfix " hhvm. +" Beginnen, mit denen aus dem üblichen PHP identisch.

Beachten Sie beim Erkunden der Variablen, dass "+ memory limit +" 17179869184 Byte entspricht, was etwas mehr als 17 GB entspricht. Solch eine hohe Speicherressourcenbeschränkung tötet ein Droplet mit ein paar GB RAM, wodurch es nicht mehr reagiert. Sie sollten diesen Wert auf einen niedrigeren Wert als den verfügbaren RAM Ihres Droplets verringern, um sicherzustellen, dass andere Dienste auf dem Droplet nicht unter RAM-Mangel leiden.

Wenn Ihr Droplet über 2 GB RAM verfügt, sollten Sie ungefähr 1,2 GB für HHVM reservieren. Bearbeiten Sie dazu die Datei "+ / etc / hhvm / php.ini " mit Ihrem bevorzugten Editor (" sudo vim / etc / hhvm / php.ini ") und fügen Sie nach dem "" eine neue Variable hinzu. PHP-Optionen + `Abschnitt:

/etc/hhvm/php.ini

memory_limit =

In ähnlicher Weise können Sie alle PHP-Einstellungen und -Variablen Ihren Bedürfnissen und Wünschen anpassen. Stellen Sie einfach sicher, dass Sie HHVM nach jeder Änderung mit dem folgenden Befehl neu starten:

sudo service hhvm restart

Als Nächstes können Sie einen komplexeren Test mit einer allgemeinen Webanwendung durchführen. Es ist wichtig zu wissen, dass HHVM weder zu 100% mit dem üblichen PHP noch mit allen gängigen PHP-Frameworks kompatibel ist. Unsere Tests während des Schreibens dieses Artikels haben gezeigt, dass viele PHP-Webanwendungen wie WordPress anscheinend einwandfrei funktionieren. Offiziell ist die Anzahl der unterstützten Frameworks jedoch begrenzt.

Wenn Sie mit einem vollständigen Framework / einer Webanwendung testen, sollte nichts HHVM-spezifisches zu berücksichtigen sein. Die Installations- und Betriebsanweisungen sollten mit denen eines regulären LEMP-Stacks identisch sein. Dies liegt daran, dass HHVM standardmäßig mit allen meisten PHP-Modulen gebündelt wird, um eine gute Kompatibilität zu gewährleisten.

In einigen seltenen Fällen müssen Sie jedoch möglicherweise ein zusätzliches Modul für HHVM installieren. Wenn Sie beispielsweise PostgreSQL als Datenbankserver verwenden, benötigen Sie das Modul + pgsql. In solchen Fällen konsultieren Sie zuerst die offizielle Dokumentation von HHVM, obwohl Sie möglicherweise an Ressourcen Dritter weitergeleitet werden, z. B. im Fall von "+ pgsql +".

Fazit

Wie dieser Artikel gezeigt hat, kann HHVM einfach installiert, konfiguriert und in Nginx integriert werden. Wenn Sie über genügend Ressourcen verfügen, sollten Sie auf jeden Fall ausprobieren, wie der einzigartige JIT-Compiler von HHVM in Bezug auf Leistung und Stabilität für Sie funktioniert. Es muss einen guten Grund dafür geben, dass eine Website wie Facebook mit komplexen Funktionen und unübertroffenem Datenverkehr ihr vertraut. Für kleinere Sites mit weniger Datenverkehr ist jedoch möglicherweise eine Lösung mit geringerem Speicherbedarf wie PHP-FPM die bessere Wahl.