blog/2011-03-30
nginx+php-fpm(PHP5.3)環境にPHPMotionを導入してみた。
以前は、画像と動画はGallery3、オーディオファイルはPodHawkを使っていたが、複数こういったプログラムがあると管理が面倒である。というわけで、動画や画像、音楽などを管理できるツールがないかと探していた。そんななか見つけたのがPHPMotionである。正確には、YouTubeクローンと紹介されているが、メディアファイル専門のCMSといったほうが正しいだろう。公式サイトを見る限りHTMLソースは汚いが、テーマが充実している。日本でもVPSの流行と共に、少しずつだが知られているようだ。
以前は、PHP5.3に対応していなかったので見送っていたが、ちょうと3日前に対応版をリリースしたらしい。早速インストールしてみた。やり方は、まず、必要なライブラリをapt-getでインストールする。ちなみに、今まで使っていたUbuntu x64 10.10が相次ぐトラブルの挙句、壊れたのに頭に来たので、OSをDebianに変更した。
下準備
まず、/etc/apt/sources.listに以下の行を追加
deb http://www.debian-multimedia.org squeeze main non-free deb-src http://www.debian-multimedia.org sid main
で、次に、キーを読み込ませる。
aptitude install debian-multimedia-keyring
そしたら、
apt-get update apt-get install ffmpeg php5-ffmpeg mplayer mencoder flvtool2 unzip
次に、Installing PHPShield Loaders - PHP5.3.x Serverを参考にプロテクトをインストールする。OSSと異なり、コア部分は、プロプライエタリらしい。これを使って復号化して実行しているようだ。まず、
php -i|grep extension_dir
で、phpのextension_dirを取得する。自分の場合、extension_dir => /usr/lib/php5/20090626だった。
cd /usr/lib/php5/20090626 wget http://downloads.phpmotion.com/phpshield-loaders/linux/i386/ixed.5.3
で、PHPShieldをインストールする。で、php.iniに読み込ませるわけだが、最近のPHPは、/etc/php5/conf.d内にファイルをおけば、わざわざphp.iniを書き換えなくても済む。したがって、/etc/php5/conf.d/内にphpshield.iniを設置して、中身を
extension=ixed.5.3
と入れるだけで、問題は無い。あとは、php5-fpmをリロードするだけだ。
service php5-fpm reload
これで、準備完了。
インストール
公式サイトのダウンロードのページに自分のメールアドレスを入れてファイルをダウンロードし、インストールしたい場所で展開する。
unzip phpmotion.zip
で、ブラウザからそこにアクセス。サブドメインのルートにおいているものとする。
http://[Your server]/setup/
あとは、ガイド通りに進めていくだけ。nginxでは、php.iniをオーバーライド(.htaccessにおけるphp_valueみたいなの)するときに、fastcgi_param PHPVALUE ""の括弧内に記入する。したがって、nginxのphpのlocation設定は以下のようになる。ちなみに、自分はphp5-fpmへの接続をポート開放などが面倒なので、ソケット接続にしているので注意。
location ~ \.php$ { fastcgi_pass unix:/var/run/php-fpm.socket; fastcgi_index index.php; fastcgi_param PHP_VALUE " upload_max_filesize = 100M post_max_size = 100M max_execution_time = 1500 session.gc_maxlifetime = 14000 safe_mode = off Thread saftery = disabled enable_dl = On "; include fastcgi_params;
括弧内に改行があるって?気にしないでくれ。
次にパーミッションの設定、データーベースの設定など、これらは説明する必要はないだろう。画面の指示通りに進めればいい。
RewriteRuleをNginx用に書き換える
どうも、PHPMotionは、デフォルトで静的なURLにアクセスするようハードコーディングされているらしい。Apacheを使っている場合は問題ないが、Nginxを使っているので独自に設定が必要である。とりあえず、.htaccessの設定をnginxの設定ファイルにコピーして、RewriteBaseが、/になっているので、RewriteRuleをrewriteに書き換えて^を^/にして、書き換え先のスクリプトのファイル名の前に/を追加し、[L]をlast;に書き換えてはい終わり。
#PHP Motion server{ listen 80; server_name [ドメイン名]; root [PHPMotion設置ディレクトリ]; index index.php; add_header X-UA-Compatible edge; add_header X-Content-Type-Options nosniff; add_header X-Frame-Options SameDomain; # Main Menu Links # rewrite ^/videos/load/(.+)$ /seemore.php?load=$1 last; rewrite ^/videos/load/(.+)/(.+)$ /seemore.php?load=$1&page=$2 last; rewrite ^/audios/load/(.+)$ /audio.php?load=$1 last; rewrite ^/audios/load/(.+)/(.+)$ /audio.php?load=$1&page=$2 last; rewrite ^/audio/album/(.+)/(.+)$ /audio.php?album=$1 last; rewrite ^/audio/album/(.+)/(.+)/(.+)$ /audio.php?album=$1&page=$3 last; rewrite ^/blogs/load/(.+)$ /blogs.php?load=$1 last; rewrite ^/blogs/load/(.+)/(.+)$ /blogs.php?load=$1&page=$2 last; rewrite ^/albums/load/(.+)$ /albums.php?load=$1 last; rewrite ^/albums/(.+)/(.+)$ /albums.php?load=$1&page=$2 last; rewrite ^/people_ajax /people_ajax.php last; rewrite ^/people/(.+)/(.+)$ /people.php?load=$1&page=$2 last; rewrite ^/people /people.php last; rewrite ^/upload-media /upload.php last; rewrite ^/groups$ /groups.php last; rewrite ^/search /search.php last; # Action Links # rewrite ^/videos/(.+)/(.+)$ /play.php?vid=$1 last; # rewrite ^/audio/(.+)/(.+)$ /play_audio.php?audio=$1 rewrite ^/category/(.+)$ /category_home.php?cid=$1 last; rewrite ^/category/(.+)/(.+)$ /category_home.php?cid=$1&page=$2 last; rewrite ^/subcategory/(.+)/(.+)$ /category_home.php?sub=$1 last; rewrite ^/subcategory/(.+)/(.+)/(.+)$ /category_home.php?sub=$1&page=$3 last; rewrite ^/genre/(.+)$ /genre_home.php?cid=$1 last; rewrite ^/genre/(.+)/(.+)$ /genre_home.php?cid=$1&page=$2 last; # rewrite ^/view-album/(.+)/(.+)$ /album_view.php?album=$1 # rewrite ^/view-image/(.+)/(.+)$ /album_view.php?image=$1 rewrite ^/read_blog/(.+)/(.+)$ /read_blog.php?id=$1 last; rewrite ^/blogs/category/(.+)/(.+)$ /blogs.php?cat_id=$1 last; rewrite ^/blogs/category/(.+)/(.+)/(.+)$ /blogs.php?cat_id=$1&page=$3 last; rewrite ^/members/(.+)$ /memberprofile.php?user=$1 last; #-------------------------------------------------------------# # redirect directory browsing attempts rewrite ^/videos(.?)$ /seemore.php last; rewrite ^/audios(.?)$ /audio.php last; rewrite ^/blogs(.?)$ /blogs.php last; # rewrite ^/members(.?)$ /people [R=301] rewrite ^/albums(.?)$ /albums.php last; location ~ \.php$ { fastcgi_pass unix:/var/run/php-fpm.socket; fastcgi_index index.php; fastcgi_param PHP_VALUE " upload_max_filesize = 100M post_max_size = 100M max_execution_time = 1500 session.gc_maxlifetime = 14000 safe_mode = off Thread saftery = disabled enable_dl = On "; include fastcgi_params;
これでよしと。
Last Modified: 2011-03-30 21:51:50