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のインストールディレクトリにコピーされ、設定が有効になる。

図8 Webロール内に「etc」フォルダを作成し、そこに「php.ini」を配置する
図8 Webロール内に「etc」フォルダを作成し、そこに「php.ini」を配置する

リスト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」を規定のドキュメントとして設定している。