Macでnginx+php-fpm+phalconをインストール
最近PHPがなぜか多くなってきたのですが、私も速いと言われているPHPFramework Phalcon High performance PHP framework を使う必要が出てきたので、環境をMacに作った際のメモを残します。
基本管理がめんどくさいのでbrewでやるようにしています。
■環境の確認
・Mac OSX 10.9 Mavericks■まずはbrewで最新版PHP5.5.6(2013/11/15現在)のインストールです。
・nginx 1.4.3
・PHP/PHP-FPM 5.5.6
・Phalcon 1.2.4
$ brew tap homebrew/dupes■PEARの設定です。
$ brew tap josegonzalez/homebrew-php
$ brew options php55
$ brew install php55 --with-fpm --with-debug --with-mssql --with-homebrew-openssl
$ brew info php55
$ chmod -R ug+w /usr/local/Cellar/php55/5.5.6/lib/php■PHPUnit & Phingのインストールしておきます。
$ pear config-set php_ini /usr/local/etc/php/5.5/php.ini
$ pear config-set auto_discover 1■xdebugもインストールしておきます。
$ sudo pear install pear.phpunit.de/PHPUnit
$ sudo pear install pear.phing.info/phing
$ brew install php55-xdebugでこの時点で一度LINKをし直しておきます。
$ brew unlink php55各種バージョン確認をしておきます。
$ brew link php55
$ php-fpm -v
PHP 5.5.6 (fpm-fcgi) (built: Nov 15 2013 13:59:40) (DEBUG)
Copyright (c) 1997-2013 The PHP Group
Zend Engine v2.5.0, Copyright (c) 1998-2013 Zend Technologies
with Xdebug v2.2.3, Copyright (c) 2002-2013, by Derick Rethans
$ phpunit --version
PHPUnit 3.7.28 by Sebastian Bergmann.
$ phing -v
Phing 2.6.1
で次からいよいよPhalconのインストールですが、まずはどんなのがあるのか確認しておきます。
$ brew search phalconと言う事なのでphp55-phalconをインストールします。
php53-phalcon php54-phalcon php55-phalcon
■phalconインストール
$ brew install php55-phalcon
コマンドを叩くと下記のようなログが出ます。==> Downloading https://github.com/phalcon/cphalcon/archive/v1.2.4.tar.gz
######################################################################## 100.0%
==> PHP_AUTOCONF="/usr/local/opt/autoconf/bin/autoconf" PHP_AUTOHEADER="/usr/local/opt/autoconf/bin/autoheader" /usr/local/Cellar/php55/5.5.6/bin/phpize
==> ./configure --prefix=/usr/local/Cellar/php55-phalcon/1.2.4 --with-php-config=/usr/local/Cellar/php55/5.5.6/bin/php-config --enable-phalcon
==> make
==> Caveats
To finish installing phalcon for PHP 5.5:
* /usr/local/etc/php/5.5/conf.d/ext-phalcon.ini was created,
do not forget to remove it upon extension removal.
* Restart your webserver.
* Write a PHP page that calls "phpinfo();"
* Load it in a browser and look for the info on the phalcon module.
* If you see it, you have been successful!
==> Summary
/usr/local/Cellar/php55-phalcon/1.2.4: 2 files, 2.2M, built in 30 seconds
「/usr/local/etc/php/5.5/conf.d/ext-phalcon.ini was created」と出ているので、このファイルをチェックすると
$ cat /usr/local/etc/php/5.5/conf.d/ext-phalcon.iniextensionを書いてくれているようなので、確認をすると
[phalcon]
extension="/usr/local/Cellar/php55-phalcon/1.2.4/phalcon.so"
$ php -i | grep -i phalconうん、Unableみたいです。。。
PHP Warning: PHP Startup: Unable to load dynamic library '/usr/local/Cellar/php55/5.5.6/lib/php/extensions/debug-non-zts-20121212/phalcon.so' - dlopen(/usr/local/Cellar/php55/5.5.6/lib/php/extensions/debug-non-zts-20121212/phalcon.so, 9): image not found in Unknown on line 0
Warning: PHP Startup: Unable to load dynamic library '/usr/local/Cellar/php55/5.5.6/lib/php/extensions/debug-non-zts-20121212/phalcon.so' - dlopen(/usr/local/Cellar/php55/5.5.6/lib/php/extensions/debug-non-zts-20121212/phalcon.so, 9): image not found in Unknown on line 0
Additional .ini files parsed => /usr/local/etc/php/5.5/conf.d/ext-phalcon.ini,
phalcon
Phalcon Framework => enabled
Phalcon Version => 1.2.4
よくよく見るとと、「/usr/local/Cellar/php55/5.5.6/lib/php/extensions/debug-non-zts-20121212/phalcon.so」にアクセスしようとしてるみたいですが、brewでインストールした際に「==> ./configure --prefix=/usr/local/Cellar/php55-phalcon/1.2.4」のログが出ていたので、確認すると
$ ls -al /usr/local/Cellar/php55-phalcon/1.2.4
total 4840
drwxr-xr-x 4 user admin 136 11 15 14:08 ./
drwxr-xr-x 3 user admin 102 11 15 14:08 ../
- rw-r--r-- 1 user admin 272 11 15 14:08 INSTALL_RECEIPT.json
- rwxr-xr-x 1 user wheel 2473796 11 15 14:08 phalcon.so*
と言う事なので、このディレクトリにあるようです。
方法としては、/usr/local/etc/php/5.5/conf.d/ext-phalcon.iniのextensionパスを変えてもいいと思いますが、とりあえずコピーします。
$ cp /usr/local/Cellar/php55-phalcon/1.2.4/phalcon.so /usr/local/Cellar/php55/5.5.6/lib/php/extensions/debug-non-zts-20121212/改めて確認します。
$ php -i | grep -i phalcon問題なさそうです。
Additional .ini files parsed => /usr/local/etc/php/5.5/conf.d/ext-phalcon.ini,
phalcon
Phalcon Framework => enabled
Phalcon Version => 1.2.4
nginxの設定とphp-fpm.confの設定はhttp://d.hatena.ne.jp/ke-16/20130306/1362536213:過去のエントリをご覧ください。
nginx自体はbrewで最新にしておきます。
$ brew install nginx
==> Downloading http://nginx.org/download/nginx-1.4.3.tar.gz
######################################################################## 100.0%
==> ./configure --prefix=/usr/local/Cellar/nginx/1.4.3 --with-http_ssl_module --with-pcre --with-ipv6 --sbin-path=/usr/local/Cellar/nginx/1.4.3/bin/nginx --with-cc-opt
==> make
==> make install
==> Caveats
Docroot is: /usr/local/var/wwwThe default port has been set in /usr/local/etc/nginx/nginx.conf to 8080 so that
nginx can run without sudo.To have launchd start nginx at login:
ln -sfv /usr/local/opt/nginx/*.plist ~/Library/LaunchAgents
Then to load nginx now:
launchctl load ~/Library/LaunchAgents/homebrew.mxcl.nginx.plist
Or, if you don't want/need launchctl, you can just run:
nginx
==> Summary
/usr/local/Cellar/nginx/1.4.3: 7 files, 876K, built in 20 seconds
また、Phalconの公式サイトにもnginxの設定ドキュメントがありました。Nginx Installation Notes — Phalcon 1.3.0 documentation
Phalconの動作確認のため、公式サイトからチュートリアルを取得します。
$ cd /var/www公式サイトのようにnginx.confを変更したのですが、下記のようにエラーが出てしまうので諦めて以前から動いている形にしました。
$ git clone https://github.com/phalcon/tutorial.gitpublicとappフォルダがあると思いますが、publicフォルダをdocument rootとするみたいなのでnginx.confの設定をそこにします。
[error] 57954#0: *1 FastCGI sent in stderr: "Primary script unknown" while reading response header from upstream, client: 127.0.0.1, server: localhost, request: "GET / HTTP/1.1", upstream: "fastcgi://127.0.0.1:9000", host: "localhost"そうすると、nginx.confは以下のようになります。
user nginx;これで準備が整ったはずなので、実際に動かしてみます。
worker_processes 2;pid /var/run/nginx.pid;
events {
worker_connections 1024;
}http{
include /usr/local/etc/nginx/mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';access_log /var/log/nginx/access.log main;
error_log /var/log/nginx/error.log;#sendfile on;
keepalive_timeout 0;
server_tokens off;
underscores_in_headers on;
server {
listen 80;
server_name localhost;
charset utf-8;
rewrite_log on;root /usr/local/var/www/public;
index index.html index.htm index.php;location / {
if (!-e $request_filename) {
rewrite ^/(.*)$ /index.php?_url=/$1 last;
}
}location ~ ^(.+\.php)(/.*)?$ {
fastcgi_split_path_info ^(.+\.php)(/.*)?$;set $script_filename $document_root$fastcgi_script_name;
if (!-e $script_filename) {
return 404;
}fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
include fastcgi_params;fastcgi_param APPLICATION_ENV development;
fastcgi_param SCRIPT_FILENAME $script_filename;
fastcgi_param SCRIPT_NAME $fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
}location ~ /\.ht {
deny all;
}
}
}
チュートリアルのソースに中身関しては、参考にさせて頂いたこちらのサイトが良いと思います。
Phalcon PHPを使ってみる。 » 新人Webエンジニアの記録。
php-fpmとnginxを起動します。
$ sudo php-fpm後はブラウザから http://localhost にて確認するだけです。
$ sudo nginx
後はDeveloper Toolもあって簡単にプロジェクト生成が出来るようです。
Phalcon Developer Tools — Phalcon 1.3.0 documentation
参考サイト
高速なPHPフレームワークPhalconを使ってみた~プロジェクト作成 - k-motoyan888's diary
では使い倒してその噂の速さと実感したいと思います。