Windows AzureでPerlやPython、Ruby、Git、SSH、MySQLを利用しよう 3ページ
PHP/Perl/Python/Rubyをインストールする
続いてはPHPおよびPerl、Python、RubyをWindows Azure環境にインストールする方法について説明しよう。処理の流れとしては必要な配布ファイルをダウンロードし、適切なディレクトリに展開、そしてIISから実行できるようハンドラの設定変更を行う、というものになる。これらはすべてバッチファイルに記述しておき、WebRole.cs内のOnStart関数内で実行する。
なお、下記で作成したバッチファイルはすべて先に作成した「OnStart\enabled」フォルダ内に作成し、プロパティの「出力ディレクトリにコピー」を「新しい場合はコピーする」に変更しておく。
PHPのダウンロードとインストール
PHPについては「PHP For Windows」サイトで配布されているものを利用する。最新版はPHP 5.4であるが、PHP 5.3を使用しているユーザーも多いことから、今回はPHP 5.3のVC9(Visual Studio 2008)スレッドセーフ版ZIPアーカイブを使用する。
ダウンロードを行うバッチファイル(030php_download.cmd)はリスト7のようになる。
リスト7 PHPをダウンロードするバッチファイル
REM PHPのダウンロード setlocal set dl_url=http://windows.php.net/downloads/releases/php-5.3.10-Win32-VC9-x86.zip set target=php-5.3.10-Win32-VC9-x86.zip set download_dir=%APP_DIR%\Download mkdir "%download_dir%" cd /d "%download_dir%" if exist %target% del %target% %WGET_EXE% %dl_url% endlocal
なお、前述のとおりバッチファイル内の「APP_DIR」環境変数にはあらかじめ「ApplicationDir」ローカルストレージに対応するパスが格納されている。また、「WGET_EXE」環境変数にはwgetのパスおよびコマンドラインオプションが格納されている。
続いて、ダウンロードしたZIPファイルをインストールするバッチファイル(035php_install.cmd)がリスト8だ。
リスト8 PHPをインストールするバッチファイル
REM PHPのインストール setlocal set download_dir=%APP_DIR%\Download set php_zip=%download_dir%\php-5.3.10-Win32-VC9-x86.zip set php_dir=%APP_DIR%\php set php_bin=%php_dir%\php-cgi.exe REM ディレクトリの作成とパッケージの展開 mkdir "%php_dir%" cd /d "%php_dir%" %UNZIP_EXE% "%php_zip%" REM 用意しておいたphp.iniを配置 mkdir "%APP_DIR%\temp" copy "%ROLEROOT%\approot\bin\etc\php.ini" "%php_dir%" REM ログや一時ディレクトリの設定をphp.iniに追加 mkdir "%AZUREDRIVE_ROOT%\php" echo; >> "%php_dir%\php.ini" echo error_log="%AZUREDRIVE_ROOT%\php\php53_errors.log" >> "%php_dir%\php.ini" echo upload_tmp_dir="%MYAPPS_ROOT%\temp" >> "%php_dir%\php.ini" echo session.save_path="%MYAPPS_ROOT%\temp" >> "%php_dir%\php.ini" REM IISのCGI設定 cd /d %windir%\system32\inetsrv REM FastCGIの設定 appcmd set config /section:system.webServer/fastCGI /+[fullPath='%php_bin%'] REM FastCGIハンドラを追加 appcmd set config /section:system.webServer/handlers /+[name='PHP-FastCGI',path='*.php',verb='*',modules='FastCgiModule',scriptProcessor='%php_bin%',resourceType='Unspecified'] endlocal
ここではZIPファイルの展開を行ったあと、設定ファイル「php.ini」の配置やログ/一時ディレクトリの設定、FastCGIとしての登録といった作業を行っている。
PHPでは、「php.ini」という設定ファイルで動作を変更できるが。今回はデフォルトの設定ファイルである「php.ini-dist」をベースにリスト9の項目を追加したものを用意した。このファイルはWebロールに「etc\php.ini」として追加し、プロパティの「出力ディレクトリにコピー」を「新しい場合はコピーする」に変更しておく(図8)。バッチファイルを実行するとこのphp.iniがPHPのインストールディレクトリにコピーされ、設定が有効になる。
リスト9 php.iniの末尾に追加する項目
; change for IIS cgi.force_redirect=0 cgi.fix_pathinfo=1 fastcgi.impersonate=1 fastcgi.logging=0 max_execution_time=300 date.timezone=Asia/Tokyo extension_dir=".\ext\" [ExtensionList] extension=php_mysql.dll extension=php_mysqli.dll extension=php_mbstring.dll extension=php_gd2.dll extension=php_gettext.dll extension=php_curl.dll extension=php_exif.dll extension=php_xmlrpc.dll extension=php_openssl.dll extension=php_soap.dll extension=php_pdo_mysql.dll extension=php_pdo_sqlite.dll extension=php_imap.dll extension=php_tidy.dll
ここではCGI関連の設定を行っているほか、タイムゾーンやエクステンション関連の設定も追加している。このほか、PHPの動作を変更したい場合はここで適宜変更を行っておく。
Perlのインストール
Perlについては、「Strawberry Perl」というプロジェクトで開発・配布されているバイナリパッケージを利用する。Strawberry PerlにはGCCなどの開発ツールや外部ライブラリなど、CPANを利用するための環境が含まれるバイナリパッケージだ。
Strawberry PerlではMSI形式のインストーラが用意されているが、今回は展開するだけで利用できるZIP形式のパッケージを利用する。32ビット版と64ビット版が用意されているが、Windows Azure環境は64ビット環境ということで64ビット版を選択した。
ダウンロードを行うバッチファイル(040perl_download.cmd)はリスト10のようになる。
リスト10 Perlをダウンロードするバッチファイル
REM Strawberry Perlのダウンロード setlocal set dl_url=http://strawberry-perl.googlecode.com/files/strawberry-perl-5.14.2.1-64bit.zip set target=strawberry-perl-5.14.2.1-64bit.zip set download_dir=%APP_DIR%\Download mkdir "%download_dir%" cd /d "%download_dir%" if exist %target% del %target% %WGET_EXE% %dl_url% endlocal
このバッチファイルの内容は前述のPHPをダウンロードするバッチファイルとほぼ同じだ。また、ダウンロードしたZIPファイルをインストールするバッチファイル(045perl_install.cmd)がリスト11である。
リスト11 Perlをインストールするバッチファイル
REM Strawberry Perlのインストール setlocal set download_dir=%APP_DIR%\Download set perl_zip=%download_dir%\strawberry-perl-5.14.2.1-64bit.zip set perl_dir=%APP_DIR%\Perl set perl_bin=%perl_dir%\perl\bin\perl.exe REM ディレクトリの作成とパッケージの展開 mkdir "%perl_dir%" cd /d "%perl_dir%" %UNZIP_EXE% "%perl_zip%" REM IISのCGI設定 cd /d %windir%\system32\inetsrv REM CGIハンドラを追加 appcmd set config /section:handlers /+[name='CGI-Perl',path='*.pl',verb='GET,POST,HEAD',modules='CgiModule',scriptProcessor='"%perl_bin% \"%%s\" \"%%s\""'] REM CGIとしての実行を許可 appcmd set config /section:isapiCgiRestriction /+[path='"%perl_bin% \"%%s\" \"%%s\""',description='CGI-Perl',allowed='True'] endlocal
こちらもPHPの場合とほぼ同じだが、FastCGIではなく通常のCGIとしてIISに登録している点が異なる。
Pythonのインストール
Pythonについては公式サイトで配布されている64ビット版のWindows向けインストーラを使用する。Pythonは旧バージョンとの互換性を持つPython 2系と、Python 2系とは互換性がないPython 3系があるが、今回はPython 2系の最新版であるPython 2.7.2を利用する。
ダウンロードを行うバッチファイル(050python_download.cmd)はリスト12のようになる。
リスト12 Pythonをダウンロードするバッチファイル
REM Pythonのダウンロード setlocal set dl_url=http://www.python.org/ftp/python/2.7.2/python-2.7.2.amd64.msi set target=python-2.7.2.amd64.msi set download_dir=%APP_DIR%\Download mkdir "%download_dir%" cd /d "%download_dir%" if exist %target% del %target% %WGET_EXE% %dl_url% endlocal
PythonのインストーラはMSI形式となっているので、「msiexec」コマンドを使ってインストールを行う。msiexecはWindowsに標準でインストールされているインストールツールで、「/i」オプションでMSIファイルを指定し、「/qn」オプションを指定することでインストール時にウィンドウを開かないサイレントインストールが行える。これらの処理を行うバッチファイル(055python_install.cmd)がリスト13だ。
リスト13 Pythonをインストールするバッチファイル
REM Pythonのインストール setlocal set download_dir=%APP_DIR%\Download set python_msi=%download_dir%\python-2.7.2.amd64.msi set python_dir=%APP_DIR%\Python set python_bin=%python_dir%\python.exe REM Pythonのインストール msiexec /i "%python_msi%" targetdir="%python_dir%" /qn REM IISのCGI設定 cd /d %windir%\system32\inetsrv REM CGIハンドラを追加 appcmd set config /section:handlers /+[name='CGI-Python',path='*.py',verb='GET,POST,HEAD',modules='CgiModule',scriptProcessor='"%python_bin% \"%%s\" \"%%s\""'] REM CGIとしての実行を許可 appcmd set config /section:isapiCgiRestriction /+[path='"%python_bin% \"%%s\" \"%%s\""',description='CGI-Python',allowed='True'] endlocal
Rubyのインストール
一般に配布されているRubyのWindows向けバイナリはいくつかの種類があるが、今回はmswin32版を利用する。これはRubyのFTPサイトやそのミラーサイトから入手可能だ。使用するのはmswin32版では最新のものとなる「Ruby 1.9.2-p0」だ。
ダウンロードを行うバッチファイル(060ruby_download.cmd)はリスト14のようになる。
リスト14 Rubyをダウンロードするバッチファイル
REM Rubyのダウンロード setlocal set dl_url=http://core.ring.gr.jp/archives/lang/ruby/binaries/mswin32/ruby-1.9.2-p0-x64-mswin64_80.zip set target=ruby-1.9.2-p0-x64-mswin64_80.zip set download_dir=%APP_DIR%\Download mkdir "%download_dir%" cd /d "%download_dir%" if exist %target% del %target% %WGET_EXE% %dl_url% endlocal
ダウンロードしたZIPファイルをインストールするバッチファイル(065ruby_install.cmd)はリスト15だ。
リスト15 Rubyをインストールするバッチファイル
REM Rubyのインストール setlocal set download_dir=%APP_DIR%\Download set ruby_zip=%download_dir%\ruby-1.9.2-p0-x64-mswin64_80.zip set ruby_dir=%APP_DIR%\Ruby set ruby_bin=%ruby_dir%\bin\ruby.exe REM ディレクトリの作成とパッケージの展開 mkdir "%ruby_dir%" cd /d "%ruby_dir%" %UNZIP_EXE% "%ruby_zip%" REM IISのCGI設定 cd /d %windir%\system32\inetsrv REM CGIハンドラを追加 appcmd set config /section:handlers /+[name='CGI-Ruby',path='*.rb',verb='GET,POST,HEAD',modules='CgiModule',scriptProcessor='"%ruby_bin% \"%%s\" \"%%s\""'] REM CGIとしての実行を許可 appcmd set config /section:isapiCgiRestriction /+[path='"%ruby_bin% \"%%s\" \"%%s\""',description='CGI-Ruby',allowed='True'] endlocal
IISの「既定のドキュメント」設定
URLとしてディレクトリを指定した場合にどのような処理を行うかは、IISでは「規定のドキュメント」項目で設定できる。これは公開ディレクトリ中に配置する「Web.config」というXML形式設定ファイルで変更可能だ。
たとえば「index.html」を既定のドキュメントにしたい場合、次のようなWeb.configファイルを作成し、設定したいディレクトリに配置すれば良い。
リスト16 Web.configファイル内で既定のドキュメントを設定できる
<configuration> <system.webServer> <defaultDocument enabled="true"> <files> <clear /> <add value="index.html" /> </files> </defaultDocument> </system.webServer> </configuration>
既定のドキュメントに指定したいファイルは「<files>」要素内の「<add>」要素で指定する。複数のファイルを同時に指定することも可能だ。また、Web.configでの設定はその子ディレクトリにも適用される。もし親ディレクトリでの指定を無視したい場合、<files>要素内に「<clear />」要素を入れ、親ディレクトリからの継承をクリアする必要がある。親ディレクトリですでに設定されている要素を重複して設定しようとするとエラーとなるので注意したい。リスト16では、親ディレクトリからの継承をリセットし、「index.html」を規定のドキュメントとして設定している。