HHVM、Nginx、PHP(およびLaravel)

HHVM + Nginx + PHP + Laravel Laravelで使用するためにNginxにHHVMをインストールすることに多くの人が興味を持ちました。 始めましょう。



HHVM(またはHipHop Virtual Machine)は、PHPで記述されたプログラムを実行するように設計された仮想マシンです。 JITコンパイル技術を使用して、バイトコードの実行速度を向上させます。



エントリー


私のほとんどの記事と同様に、Ubuntu 12.04 LTSをサーバーとして使用して製品をインストールします。 ただし、Brew( nginxhhvm )を使用してMacにすべてをインストールすることは非常にうまくできます。 他のプラットフォーム(Ubuntuの新しいバージョンを含む)へのHHVMのインストールに関する情報は、 ここにあります



さあ、行こう!



基本を設定する


まず、目的に必要な基本的なものをインストールします。



$ sudo apt-get update $ sudo apt-get install -y unzip vim git-core curl wget build-essential python-software-properties
      
      







Nginxのインストール


次に、Nginxをインストールします。 彼が最初に来るのはなぜですか? hhvm-fastcgiパッケージをインストールするとき、それを検出すると、[パッケージ]はいくつかのNginx構成を変更します。



 $ sudo apt-get install -y nginx
      
      







HHVM FastCGIをインストールする


HHVMブログから判断すると、FastCGIでHHVMをインストールできます。 次のコードは、HHVMをインストールし、FastCGIと連携するように構成します。



 $ echo deb http://dl.hhvm.com/ubuntu precise main | sudo tee /etc/apt/sources.list.d/hhvm.list $ sudo apt-get update $ sudo apt-get install -y --force-yes hhvm-fastcgi
      
      





注:いくつかの依存関係の問題を修正するために--force-yesフラグを追加しました。



HHVMを構成する


HHVMは基本的にPHPのネイティブバージョンであるため、PHPを個別にインストールする必要はありません。 インストール後、HHVMを通常のPHPとして使用できます。 たとえば、phpファイルを実行できます。



 $ hhvm some_file.php
      
      





おそらくComposerとPHPUnitがあり、これらはコマンドラインからのアクセスを前提としているため、hhvmにphpシンボリックリンクを作成できます。



 $ sudo ln -s `which hhvm` /usr/local/bin/php
      
      





これで通常どおりPHPを使用できます!



 $ php -v HipHop VM v2.3.2 (rel) Compiler: tags/HHVM-2.3.2-0-gf951cb8d8812c59344d5322454853b584b668636 Repo schema: 5b5a4fc9cde5a5d014d1dfdb491bf74e4e700131
      
      







HHVM Fast-CGI


Vagrantを使用していますが、ルートディレクトリを/ vagrantディレクトリにする必要があります。 ルートを変更するには、HHVMとNginxの両方を構成する必要があります。



HHVMから始めましょう。 編集用ファイル:/etc/hhvm/server.hdf実行する単一行コマンドは次のとおりです。



 # Change doc root from /var/www/ to /vagrant/ $ sudo sed -i 's/SourceRoot = \/var\/www\//SourceRoot = \/vagrant\//' /etc/hhvm/server.hdf
      
      





次に、HHVMを再起動して変更を適用します。



 $ sudo service hhvm-fastcgi restart
      
      







Nginxを構成する


Nginxを構成します。 vagrantという新しい構成ファイルを作成します



 # Create and edit our new configuration file $ sudo vim /etc/nginx/sites-available/vagrant
      
      





ここで、このファイルの最終的な内容を確認できます。



 // File /etc/nginx/sites-available/vagrant server { root /vagrant; index index.html index.htm index.php; server_name localhost; # 192.168.33.10.xip.io if you are using Vaprobash include hhvm.conf; # Include HHVM's configuration file for Nginx location / { try_files $uri $uri/ /index.php?q=$uri&$args; } location ~ /\.ht { deny all; } }
      
      







2つの重要なポイント


まず、 ロケーションブロックを定義しません。 HHVMの前にNginxをインストールすると、HHVMがNginxを確認して/etc/nginx/hhvm.confファイルを作成する機会が得られます。 インクルードするhhvm.confファイルには、PHPが必要とするロケーションブロックが既に含まれています。

次に、 hhvm.confファイルはルートディレクトリ/ var / wwwを想定しています。 これにより、 root / vagrant設定が上書きされます hhvm.confファイルのルートディレクティブを削除して、vagrantファイルがルートディレクトリを決定するように、これを変更する必要があります。



 $ sudo vim /etc/nginx/hhvm.conf # Then comment out the line 'root /var/www' and save
      
      





/etc/nginx/hhvm.confファイル自体:



 location ~ \.php$ { # root /var/www fastcgi_keep_conn on; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME /var/www$fastcgi_script_name; include fastcgi_params; }
      
      





次に、作成した仮想ホストをオンにします。



 $ sudo ln -s /etc/nginx/sites-available/vagrant /etc/nginx/sites-enabled/vagrant
      
      







変更を有効にするには、HHVM-FastCGIとNginxを再起動する必要があります。 ただし、最初にテスト用のphpファイルを作成します。



少しのPHP


簡単なテストファイルを作成します。



 $ vim /vagrant/index.php
      
      





このような単純なもの:



 <?php echo phpinfo(); // Expected output: HipHop
      
      





小さい場合。 hhvm-fastcgiとnginxを再起動するだけです。 その後、ブラウザでサーバーのIPアドレス(またはVaprobash使用している場合は192.168.33.10.xip.io)に接続すると、index.phpが表示されます。



 $ sudo service hhvm-fastcgi restart $ sudo service nginx reload
      
      





ブラウザに「HipHop」が表示されます。



ララヴェル


私たちの場合、Laravelのインストールは通常のインストールと変わりません。 PHPをリンクしたため、すべてが時計のように機能するはずです。 やってみましょう。



Composerをインストールする


これは通常のグローバルインストールになります。



 $ curl -sS https://getcomposer.org/installer | php $ sudo mv composer.phar /usr/local/bin/composer
      
      







Laravelをインストールする


これで、新しいlaravelプロジェクトを作成する機会が与えられました。 hhlaravelと名付けます:



 # Move to /vagrant so we install Laravel # into /vagrant/hhlaravel $ cd /vagrant $ composer create-project laravel/laravel hhlaravel
      
      





すべての依存関係が確立されるまで、お茶またはコーヒーを飲むことができます:)



最後のステップ:Laravelのセットアップ


少し調整して、/ publicにルートディレクトリを設定しましょう。



 # Fast CGI document root $ sudo sed -i 's/SourceRoot = \/vagrant\//SourceRoot = \/vagrant\/hhlaravel\/public\//' /etc/hhvm/server.hdf # Nginx document root sudo sed -i 's/root \/vagrant;/root \/vagrant\/hhlaravel\/public;/' /etc/nginx/sites-available/vagrant # Reload configuration $ sudo service hhvm-fastcgi restart $ sudo service nginx reload
      
      





すべて準備完了です! ブラウザを使用してパフォーマンスを確認できます。



注意と注意


エラーログにはさらに注意を払う必要があります。 デフォルトでは、HHVMはブラウザーにエラーを表示しません。 Laravelログを確認します。



 # Show last 50 lines written out to laravel log $ tail -n 50 -f /vagrant/hhlaravel/app/logs/laravel.log
      
      





HHVMログを確認します。



 $tail -n 50 -f /var/log/hhvm/error.log
      
      





サーバー構成を変更することにより、ログにスタックトレースを取得することもできます



/etc/hhvm/server.hdfを編集し、 InjectedStackTraceおよびNativeStackTraceディレクティブを追加します。

 Log { Level = Warning AlwaysLogUnhandledExceptions = true RuntimeErrorReportingLevel = 8191 UseLogFile = true UseSyslog = false File = /var/log/hhvm/error.log InjectedStackTrace = true NativeStackTrace = true Access { * { File = /var/log/hhvm/access.log Format = %h %l %u % t \"%r\" %>s %b } } }
      
      





最後に、デバッグの設定を/etc/hhvm/server.hdfに追加することにより、ブラウザーウィンドウに出力を少し追加できます。



 Debug { FullBacktrace = true ServerStackTrace = true ServerErrorMessage = true TranslateSource = true }
      
      





ただし、エラーログにはより詳細なエラー情報が含まれることに注意してください。 HHVM用のリモートデバッガーの使用に関する記事を次に示します (私は自分でテストしていません)。



All Articles