[検証]
WindowsでインターネットWebサーバ

第3回 Server CoreにPHPをインストールする

3.Server CoreにPHPをインストールする

デジタルアドバンテージ 打越 浩幸
2008/11/27

 次はServer CoreにPHPをインストールする方法についてみていこう。

Windows Server 2008の基礎知識 第13回「より安全性の高いサーバ構築を可能にするServer Core」

 Windows Server 2008にはServer Coreというインストール・オプションがある。これは通常のWindows Server OSからGUIなどのコンポーネントを可能な限り削除し、軽量化したOSである。ファイル・サーバ機能やWebサーバ機能など、サーバOSとしての最小限の機能コンポーネントは利用可能であるが(ネットワーク越しに使う場合は通常のサーバOSと変わらない)、GUIメニューだけでなく、例えばWindowsエクスプローラやInternet Explorerといった一般ユーザー向けのコンポーネントをすべて省いている。システムに組み込むコンポーネントを限定することにより、軽量化されることはもちろん、無用なものが含まれないので、セキュリティ的にも可能な限り堅牢にすることができる。詳細については関連記事を参照していただきたい。

 Server CoreはWindows Server 2008のインストール・オプションの1つであるが、Web Server 2008にもこのServer Core版が用意されている。これを利用することにより、軽量なWebサーバ・システムを構築することができる。例えば前ページまでで紹介したWeb Server 2008 Standard Edition(32bit)では、PHP+PukiWikiを動作させた状態でメモリ使用量は500Mbytes程度になっているが、同じことをServer Core上で実現すると300Mbytes程度で済む(とはいえ、意外と差が少ないような気もするが)。

 ただしGUIの管理ツールなどをすべて排除しているため、Server Coreシステムを管理するためには、ほとんどすべての操作をコマンドライン上で行う必要がある。メモ帳やレジストリ・エディタは用意されているが、これらで操作できることは(Windows OSの性格上)あまり多くない。このような管理方法はUNIXやLinuxなどでは一般的であるが、Windows管理者にとってはまだなじみが少なく、最初はかなり戸惑うかもしれない。

 以下では、このServer Core版のWeb Server 2008 x86に、いままでと同様にIIS 7とPHP、PukiWikiをインストールしてPukiWikiサーバ環境を構築してみよう。

コンピュータ名の変更とIPアドレスの設定

 Web Server 2008をServer Coreインストールして起動すると、コマンド・プロンプトが1つだけ開いた画面が表示される。通常のGUIの管理ツールは利用できないため、その後の操作はすべてこのコマンド・プロンプトに対してコマンドを入力して行う必要がある。

Server Coreでの操作
Server Coreにログオンしても、このように、デスクトップ上にコマンド・プロンプトのウィンドウが1つ表示されるだけである。以後の操作は、このウィンドウに対してすべてキーボードで入力しなければならない。この例ではx86版のWeb Server 2008をServer Coreでインストールした直後の状態。
新しいコンピュータ名(FQDN名)を追加する。
追加したコンピュータ名をプライマリ・コンピュータ名にする。ドメイン名部分を変更せず、コンピュータ名の部分を変更するだけなら、「netdom renamecomputer 〜」コマンドでもよい。
再起動も手動で行う。「-r」は再起動、「-t 10」は10秒で再起動するという意味。
Server CoreにはGUIがないとはいえ、このようになぜかダイアログで[OK]や[Yes][No]などを選択/入力しなければならないケースがいくつかある。

 インストール後に最初に行うべき操作にはいろいろなものがあるが、Webサーバとして利用するなら、コンピュータ名の変更やIPアドレスの設定などが必要だろう(サーバはなるべく固定的なIPアドレスで運用する方が望ましいからだ)。具体的には以下のような手順でコンピュータ名やIPアドレスの設定を変更する(TIPS「Windows Server 2008のコンピュータ名をコマンドラインから変更する」も参照)。上の画面は、コンピュー名を変更して、一度再起動しようとしているところである。Server Coreの画面にはこのように文字しか表示されないため、以下、すべて入力すべきコマンド文字列部分のみを掲載する。

netdom computername %computername% /add:wikiserver03.example.jp
netdom computername %computername% /makeprimary:wikiserver03.example.jp
shutdown -r -t 10

 まず最初のnetdomコマンドで新しいコンピュータ名を追加し(FQDN名を追加している)、次のnetdomコマンドで追加した名前をプライマリ・コンピュータ名にしている。再起動を求められるので、shutdown -rコマンドで再起動する。

 再起動後、元のコンピュータ名(Server Coreのインストール時に付けられたWIN-〜という名前)を削除すると、コンピュータ名の変更が完了する。

netdom computername %computername% /enum
netdom computername %computername% /remove:WIN-???????????
shutdown -r -t 10

 最初のコマンド(netdom 〜 /enum)は名前の一覧を表示させるコマンドであり、ここで元の名前を確認できる(「nbtstat -n」コマンドでもよい)。2つ目のnetdom 〜 /removeは指定した名前を削除するコマンドである(remove:〜には、1つ目のコマンドで確認した名前を指定すること)。

 名前の変更が完了したら、次はIPアドレスなどを設定する。具体的な手順は別稿の「Server Coreの初期設定を行う」を参照していただきたいが、例えば次のようなコマンドを実行すればよい。

netsh interface ipv4 show interfaces
netsh interface ipv4 set address name="<Idx>" source=static address=192.168.0.33 mask=255.255.255.0 gateway=192.168.0.1
netsh interface ipv4 add dnsserver name="<Idx>" address=192.168.0.11 index=1
netsh interface ipv4 add dnsserver name="<Idx>" address=192.168.0.12 index=2
netsh interface ipv4 add winsserver name="<Idx>" address=192.168.0.11 index=1
netsh interface ipv4 add winsserver name="<Idx>" address=192.168.0.12 index=2
shutdown -r -t 10

 最初のコマンドはシステムに実装されているネットワーク・インターフェイスを列挙するコマンドである。このコマンドの出力にある「Idx」の数値はインターフェイスの番号を表すので、それを2番目以降のコマンドの「"<Idx>"」の部分に指定する。この例では、IPアドレスを192.168.0.33、ネットマスクを255.255.255.0、ゲートウェイ・アドレスを192.168.0.1、DNS/WINSサーバを192.168.0.11と192.168.0.12に設定しているが、これらの値は環境に合わせて適宜変更していただきたい(末尾のindex=1やindex=2は、DNS/WINSサーバの優先度である)。

IISと関連サービスのインストール

 以上でネットワーク関連の設定は終わりである。これ以外にもファイアウォールの設定やリモート管理用のポートの設定などの作業が必要になるが、ここでは詳しくは触れないので、先の関連記事などを参照していただきたい。

 次はIISをインストールしてみよう。手順がやや複雑なので、以下のページなども参照していただきたい。

 IISをデフォルト設定でインストールし、PHP用にCGI(FastCGI)も有効にするには、次のコマンドを実行する。先頭の「start /w 〜」は、コマンドの実行が終了するまで待つという指示である。これがないと、コマンドの実行が終了していなくても、すぐにコマンド・プロンプトへ戻って来てしまうので、いつ次のコマンドを実行してよいかが分からなくなる(システムにもよるが、この例ではインストールに1分程度かかる)。

start /w pkgmgr /iu:IIS-WebServerRole;IIS-WebServer;IIS-CommonHttpFeatures;IIS-StaticContent;IIS-DefaultDocument;IIS-DirectoryBrowsing;IIS-HttpErrors;IIS-ApplicationDevelopment;IIS-CGI;IIS-HealthAndDiagnostics;IIS-HttpLogging;IIS-LoggingLibraries;IIS-RequestMonitor;IIS-Security;IIS-RequestFiltering;IIS-HttpCompressionStatic;IIS-WebServerManagementTools;WAS-WindowsActivationService;WAS-ProcessModel

 pkgmgr以下がIISの役割と、その関連サービス、およびCGIをインストールするためのコマンドである。Server Coreではこのように、インストールするコンポーネントをすべて列挙しなければならない。

長いコマンドの入力について
  この例のように、Server Coreでは長いコマンドを間違いなく入力しなければならない。だがいちいち手動で入力していたのでは間違えるので、Webブラウザでこのページを表示させておいて、コピー&ペーストでコマンド・プロンプトに貼り付けるとよい。とはいえ、Server CoreにはWebブラウザすら用意されていないので、Server Coreのコンソール画面上でこの作業を行うのは難しい。このようなケースでは、Server Coreにリモート・デスクトップ接続し、クライアントのコンピュータ上で作業するとよい。ただしデフォルトではServer Coreに対するリモート・デスクトップは許可されていないので、まず「cscript %windir%\system32\SCRegEdit.wsf /ar 0」コマンドを実行して、外部からのリモート・デスクトップ接続を有効にしていただきたい。詳細は「Server Coreを外部のコンピュータから操作する」を参照のこと。また、修正プログラムのファイルやインストールするべきプログラムなどのファイルは、net useコマンドで外部のコンピュータへ接続してコピーし、それを利用するとよい。

 インストールが完了したら、次はIIS 7のCGI用の修正プログラム(KB954946)を適用する(入手方法については1ページ目の末尾のリンク参照)。入手した.MSUファイルをコマンド・プロンプト上で実行すると修正プログラムが自動的にインストールされる(インストール後に一度再起動すること)。

Windows6.0-KB954946-x86.msu

 再起動するとすでにIISが起動しているはずなので、動作を確認しておこう。といってもServer CoreにはWebブラウザすら用意されていないので、自分自身で動作を確認するのは容易ではない。外部のコンピュータからWebブラウザを使って「http://wikiserver03.example.jp/」などとして接続し、IIS 7のスタート・ページが表示されることを確認しておく。

IISの動作確認
IISが正しくインストールされていると、このようなスタート・ページが表示されるはずである。ファイアウォールの設定も自動的に変更され、外部からのIISへの接続が許可されている。
IISをインストールしたServer Coreへ外部のコンピュータ上のWebブラウザからアクセスしてみる。
IIS 7のスタートアップ・ページ。このページが表示されないと、PHPをインストールできない。

 うまく表示されない場合は、netstat -anで80番ポート(HTTPポート)がリッスン状態になっているかどうかなどをチェックする。

PHPのインストール

 IISがインストールできたら、次はPHPをインストールし、IISからFastCGI経由で呼び出せるようにする。インストールするPHPのパッケージは、前ページのWeb Server 2008+PHP環境で利用したものと同じでよい。ダウンロード・ページから「php-5.2.6-Non-thread-safe-win32-installer.msi」というファイルを取得してきてコマンド・プロンプト上で直接起動すればよい。

php-5.2.6-Non-thread-safe-win32-installer.msi

 このコマンドを実行するとGUIベースのインストーラが表示される。インストール途中のダイアログや、選択項目(途中で[]を必ず選択しておくこと)は前ページの例と同じなので省略する。今回は「C:\APPS\PHP」というフォルダにインストールしているが、これは環境に合わせて適宜変更していただきたい。

 なお、このバージョンの.MSIファイル(Ver.5.2.6)はServer Coreでも問題なく動作するようである。プログラムによっては、Server Core上では正しく動作しないことがあるが(ウィザードの途中でダイアログ表示が消えたりすることがある。エクスプローラなどが存在しないためだと思われる)、もしうまく動作しない場合は、.ZIP形式のファイルをダウンロードし、一度ほかのサーバ上へ展開してから、xcopyコマンドなどでフォルダ構造を維持したままコピーしてインストールすればよい(注:Server Coreでは.ZIPや.LZHファイルなどを展開することはできないので、必要ならほかのコンピュータ上で展開後、コピーする)。

 なお、ダウンロードしてきた.MSIファイルを起動しようとすると、次のように「アクセスが拒否されました」と表示され、実行できないことがある。

ZoneIdによるセキュリティ警告
インターネット・ゾーンからダウンロードしてきた.MSIファイルは、デフォルトでは実行できない。このような場合はZoneId情報を消去すると実行できる。
.MSIファイルを起動してみる。通常はこの後、GUIのウィザード画面が表示され、インストールが行われる。
このようなエラー・メッセージが表示され、実行できないことがある。
ZoneId情報を表示させてみる。
このファイルに対して記録されているZoneId情報。

 これはServer Coreの持つセキュリティ機能のためのようである。インターネット・ゾーンからInternet Explorerでダウンロードしてきたファイルには「ZoneId」という情報が付加されていることがあるが、この情報が含まれるファイルはServer Coreでは(デフォルトでは)実行できなくなっている。その場合は、ファイル名の前にmsiexec /iを付けるか(「msiexec /i php-5.2.6-Non-thread-safe-win32-installer.msi」とする)、ZoneId情報を消去して再実行する。ZoneIdに関する情報や、その消去方法などについては、TIPS「XP SP2のZoneIdとは?」を参照していただきたい。エクスプローラの[プロパティ]ダイアログでZoneId情報を消去するか、「notepad php-5.2.6-Non-thread-safe-win32-installer.msi:Zone.Identifier」としてメモ帳で開き、ZoneId情報部分を消去するとよい。

 PHPのインストールが完了したら、PHPの設定ファイルであるphp.iniファイルの編集を行う(手動で展開した場合は、php.ini-recommendedをphp.iniにコピーしてから編集する)。php.iniファイルはPHPのインストール先のフォルダにあるので(今回はC:\APPS\PHPにインストールしている)、これをメモ帳で開き、先頭にmbstring関連の設定を追加する(前ページの例と同じである)。

notepad C:\APPS\PHP\php.ini

 メモ帳が開いたら、先頭行の「[PHP]」の下に設定を追加して、次のようにする。

[PHP]
mbstring.substitute_character=none
mbstring.language=Japanese
mbstring.internal_encoding=EUC-JP
mbstring.http_output=EUC-JP
mbstring.http_input=auto
mbstring.encoding_translation=On
mbstring.detect_order=auto
extension=php_mbstring.dll

……(以下省略)……

 また、途中にあるいくつかの設定項目も、前ページの例と同じように変更/設定しておく。

IISへの登録

 以上の設定が済んだら、次はIISから呼び出せるようにCGI(FastCGI)の設定(phpファイルに対するマッピング設定)を行う。Server CoreにはGUIのIIS管理ツールは用意されていないので、やはりこの操作もコマンドラインから行う必要がある。

 まずIIS 7がインストールされている\Windows\System32\inetsrvフォルダへ移動し、ここにあるappcmdコマンドを使って、次のようなコマンドを実行する。赤字の部分にはCGIで呼び出すPHPのCGIプログラム(php-cgi.exe)のフルパスが入るので、環境に合わせて適宜変更していただきたい。

cd \Windows\System32\inetsrv
AppCmd set config /section:system.webServer/fastCGI /+[fullPath='C:\APPS\PHP\php-cgi.exe']
AppCmd set config /section:system.webServer/handlers /+[name='PHP-FastCGI',path='*.php',verb='*',modules='FastCgiModule',scriptProcessor='C:\APPS\PHP\php-cgi.exe',resourceType='Either']

 これでPHPが呼び出せるようになっているはずなので、前ページのケースと同じく、次のようなファイルを用意して、動作を確認してみよう。

<?php phpinfo(); ?>

 これをphpinfo.phpなどというファイルに保存して、IISのルート・フォルダ(デフォルトでは「C:\inetpub\wwwroot」)に置き、外部から「http://wikiserver03/phpinfo.php」などとしてアクセスしてみる。PHPの情報ページが表示されれば成功である。

PukiWikiのインストール

 PHPがインストールできれば、後の手順は前のケースと同じである。だが、IISの仮想フォルダの作成がGUIのツールで行えないため、代わりにappcmdコマンドを使って操作する必要がある。例えばPukiWikiのファイルをC:\APPS\PukiWikiフォルダに用意し、このフォルダへ「/pukiwiki」という仮想フォルダでアクセスしたいとする。このためには、次のようなコマンドを実行する。

appcmd list site
appcmd add vdir /app.name:"Default Web Site/" /path:/PukiWiki /physicalPath:"C:\APPS\PukiWiki"
appcmd list vdir

 最初の「appcmd list site」は、デフォルトのサイトの情報を表示させるコマンドである。次のコマンドで仮想フォルダを追加し、「appcmd list vdir」でその結果を確認している。

 今回はWeb Server 2008のフルインストール版、およびServer Core版に対して、PHP(とPukiWiki)システムをインストールする例を紹介した。GUIを(ほとんど)持たないServer Coreの操作が実際にどのようになるのかをご理解いただけたであろうか。いままでのWindows OSのGUIに慣れた身からすると、かなり違和感がある。UNIXやLinuxのように、ほとんどの設定項目がテキスト・ファイルになっているならともかく、設定方法がコマンドだったり、レジストリだったり、(XML)ファイルだったりするなど、ちぐはぐ感は否めない。将来に期待というところだろうか。

 次回は、このPukiWikiサーバをインターネットに公開するという前提で、Windowsシステムのセキュリティ対策や、Web Server 2008のセキュリティ関連の機能などについて解説する。End of Article


 INDEX
  [検証]WindowsでインターネットWebサーバ
  第3回 Server CoreにPHPをインストールする
    1.Web Server 2008にPHPをインストールする(1)
    2.Web Server 2008にPHPをインストールする(2)
  3.Server CoreにPHPをインストールする

更新履歴
【2008/11/28】ZoneIdの付けられた.MSIファイルについて、msiexecによる実行方法を加筆しました。

 「検証」


Windows Server Insider フォーラム 新着記事
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Windows Server Insider 記事ランキング

本日 月間