Laurent Bonnet 著
概要
このドキュメントは新しい段階的なチュートリアルで Windows Server 2008 における symfony フレームワークのインストール、デプロイメントと機能テストをカバーします。
インターネットデプロイメントを準備するために、チュートリアルはインターネットでホストされた専用サーバー環境で実行されます。
もちろん、ローカルサーバーもしくは読者のワークステーションでのバーチャルマシンでチュートリアルを完結することは可能です。
新しいチュートリアルを書く理由
現在、symfony 公式サイトには Microsoft Internet Information Server (IIS) に関連する情報ソースとして ウィキ とクックブックの2つがあります。しかしこれらは新しいバージョンの Microsoft Windows オペレーティングシステム、とりわけ PHP 開発者が興味ある多くの変更を含む Windows Server 2008 (2008年2年リリース) は含まれていない以前のバージョンを参照しています:
Windows Server 2008 に組み込まれる IIS 7 は、完全なモジュラーデザインに書き直されました。
IIS 7 は製品の発表以降、Windows Update からのごく少数の修正が必要だっただけであり、とても信頼性のあることが証明されてきました。
IIS 7 には FastCGI アクセラレータや Windows OS のネイティブなスレッドモデルを利用するマルチスレッドを持つアプリケーションプールが含まれています。
PHP の FastCGI の実装は Windows と IIS での伝統的な ISAPI もしくは CGI の PHP のデプロイメントと比べると、実行時におけるパフォーマンスがキャッシュなしで5倍から10倍に改善されています。
つい最近 Microsoft は PHP 用のキャッシュアクセラレータを発表しました。執筆の時点 (2009-11-02) で製品候補です。
32ビットを含め、異なる Windows システムでチュートリアルを遊ぶ方法
このドキュメントは64ビット版の Windows Server 2008 に向けて書かれました。しかし、複雑な作業なしでほかのバージョンを使うことができます。
note
スクリーンショットの OS の正確なバージョンは64ビット版の Windows Server 2008 Enterprise Edition Service Pack 2 です。
32ビットバージョンの Windows
このチュートリアルは32ビットバージョンの Windows でも次のテキストを参考にして置き換えれば簡単に利用できます:
64ビットエディション:
C:\Program Files (x86)\
とC:\Windows\SysWOW64\
32ビットエディション:
C:\Program Files\
とC:\Windows\System32\
Enterprise 以外のエディションについて
Enterprise Edition がない場合でも、問題ではありません。このドキュメントは Windows Server のほかのエディションでも直接利用できます:
- Windows Server 2008 Web、Standard もしくは Datacenter
- Windows Server 2008 Service Pack 2 Web、Standard もしくは Datacenter
- Windows Server 2008 R2 Web、Standard、Enterprise もしくは Datacenter エディション
Windows Server 2008 R2 のすべてのエディションは64ビットの OS としてのみ利用可能であることを注意してください。
国際エディションについて
スクリーンショットで使われている地域の設定は en-US
です。フランス語の国際化言語パッケージもインストールしました。
Windows クライアント OS でチュートリアルを実行することは可能です: Windows XP、Windows VistaとWindows 7 の x64 と x86 モードの両方。
ドキュメントで使われる Web サーバー
IIS 7.0 で使われる Web サーバーは Windows Server 2008 のすべてのエディションにロールとして含まれています。十分な機能をもつ Windows Server 2008 サーバーで始めゼロから IIS をインストールします。インストールステップはデフォルトの選択を使います。IIS 7.0 に付属する2つのモジュール: FastCGI と URL Rewrite を追加するだけです。
データベース
SQLite は symfony のサンドボックス用にあらかじめ設定されたデータベースです。Windows では、特別にインストールするものはありません: SQLite のサポートは SQLite の PDO エクステンションによって直接実装されており、PHP インストール時に一緒にインストールされます。
そういうわけで、SQLITE.EXE の個別のインスタンスをダウンロードして実行する必要はありません:
[PHP_PDO_SQLITE] extension=php_pdo_sqlite.dll
Windows Server のコンフィギュレーション
この章の段階的なスクリーンショットに合わせるために Windows Server を新たにインストールしたほうがよいです。
もちろん既存のマシンで直接動かすことができますが、インストール済のソフトウェア、ランタイムと地域のコンフィギュレーションのために困難に遭遇することがあります。
このチュートリアルと同じスクリーンショットを得るには、インターネット上で無料で入手でき、30日の期間利用できる専用の Windows Server を仮想環境で試すことをおすすめします。
サーバーへの管理者権限が必須です。
リモートワークステーションから作業する場合、読者はリモートデスクトップサービス (以前はターミナルサーバークライアントとして知られていました) を実行しなければなりません。そして読者に管理者権限があることを確認してください。
ここで使われるディストリビューションは次のものです: Windows Server 2008 Service Pack 2
グラフィカル環境でインストールされた Windows Server 2008 は Windows Vista の見た目と一致します。ディストリビューションのサイズを減らすために同じサービスを持つコマンドラインのみのバージョンの Windows Server 2008 を使うこともできます (6.5GBの代わりに1.5 GB)。これは攻撃対象領域と適用する必要のあるたくさんの Windows Update パッチも減らします。
一時検査 - インターネット上の専用サーバー
サーバーはインターネットから直接アクセスできるので、Windows ファイアウォールがアクティブプロテクションを提供していることを確認するのはよい考えです。確認する例外は次のものだけです:
- コアネットワーキング
- リモートデスクトップ (リモートからアクセスする場合)
- Secure World Wide Web Services (HTTPS)
- World Wide Web Services (HTTP)
それから、すべてのソフトウェアピースが最新の修正、パッチとドキュメントで最新の状態になっていることを確認するために一連の Windows Update を実行するのはよいことです。
準備の最後の段階として、既存の Windows ディストリビューションもしくは IIS コンフィギュレーションでの潜在的なパラメータの衝突を削除するために、以前役割として Webサーバー を Windows Server にインストールしたのであればアンインストールすることを推奨します。
PHP をインストールする - わずか数クリック
さて、IIS と PHP は1つの単純なオペレーションでインストールできます。
PHP は Windows Server 2008 の配布物の一部ではないので、最初に Web PI 2.0 (Microsoft Web Platform Installer 2.0) をインストールする必要があります。
Web PI は Windows/IIS システムで PHP を実行するのに必要なすべての依存ソフトウェアのインストールの面倒を見てくれます。そういうわけで、これは IIS を Web サーバーのための最小限の役割サービスでデプロイし、PHP ランタイムの最小限のオプションも提供します。
Web PI 2.0 のインストールはコンフィギュレーションアナライザを含み、既存のモジュールを確認し、必要なモジュールのアップグレードを提案し、Microsoft Web プラットフォームのリリース前のエクステンションのベータテストも許可します。
Web PI 2.0 は PHP 実行環境のワンクリックインストールを提供します。セレクションは PHP の「スレッドセーフではない」Win32 実装をインストールしこれは IIS 7 と FastCGI との兼ね合いでベストです。これは最新のテストされたランタイム、ここでは5.2.11も提示します。これを見つけるには、左の「Frameworks and Runtimes」タブを選ぶだけです:
PHP を選んだ後で、Web PI 2.0 は IIS 7.0 の最小の役割サービスを含む、Web サーバーに保存される .php
ページを提供するために必要なすべての依存ソフトウェアを自動的に選択します:
次に、Install をクリックし、その次に「I Accept」ボタンをクリックします。IIS コンポーネントのインストールが始まり、平行して、ダウンロードされた PHP ランタイムとモジュールが更新されます (たとえば IIS 7.0 の FastCGI のための更新)。
最後に、PHP セットアッププログラムが実行され、数分後に次のウィンドウが表示されます:
「Finish」をクリックします。
Windows Server はポート80をリスニングしており応答できるようになっています。
これをブラウザで確認してみましょう:
PHP が正しくインストールされ、IIS から利用できることを確認するために、ポート80の Web サーバーがアクセスできる C:\inetpub\wwwroot
で小さな phpinfo.php
ファイルを作ります。
これを行う前に、Windows Explorer でファイルの正しい拡張子を見ることができるように、「登録されている拡張子は表示しない」のチェックが外されていることを確認してください。
Windows Explorer を開き、C:\inetpub\wwwroot
に移動します。右クリックをして「新しいテキストドキュメント」をクリックします。このファイルの名前を phpinfo.php
に変更していつもの関数呼び出しをコピーします。
次に、Web ブラウザを再度開き、サーバーのURLの末尾に /phpinfo.php
をつけてアクセスします:
最後に、symfony を問題なくインストールできるか確認するために、check_configuration.phpをダウンロードします。
これを phpinfo.php
と同じディレクトリ (C:\inetpub\wwwroot
) にコピーし必要であればこれを check_configuration.php
にリネームします。
最後に、Web ブラウザをもう一度開き、サーバーの URL の最後に /check_configuration.php
をつけます:
CLI から PHP を実行する
後で symfony のコマンドラインタスクを実行するためには、PHP.EXE がコマンドプロンプトからアクセス可能で正しく実行できることを確認する必要があります。
C:\inetpub\wwwroot
でコマンドプロンプトを開き次のコマンドを打ち込みます
PHP phpinfo.php
次のエラーメッセージが表示されます:
何もしなければ MSVCR71.DLL
がないために PHP.EXE
はハングしています。ですのでこの DLL ファイルを見つけて正しい場所にインストールしなければなりません。
この MSVCR71.DLL
は2003の時代にさかのぼる Microsoft Visual C++ ランタイムの古いバージョンです。これは .Net Framework 1.1 再頒布可能パッケージに含まれます。
.Net Framework 1.1 再頒布可能パッケージ、MSDNでダウンロードできます。
探しているファイルは次のディレクトリにインストールされます: C:\Windows\Microsoft.NET\Framework\v1.1.4322
MSVCR71.DLL
ファイルを次のディレクトリにコピーします:
- x64 システム:
C:\windows\syswow64
ディレクトリ - x86 システム:
C:\windows\system32
ディレクトリ
.Net Framework 1.1 はアンインストールできます。
これで PHP.EXE 実行ファイルをコマンドラインからエラーなしで実行できます。例です:
PHP phpinfo.php PHP check_configuration.php
後で、symfony コマンドのフロントエンドである symfony.bat
(サンドボックスディストリビューション) も期待どおりのレスポンスをするのか確認します。
symfony サンドボックスのインストールと使い方
次のパラグラフは「The Sandbox ページ」の 「symfony を始める」から抜粋したものです: 「symfony を経験する最速の方法は symfony のサンドボックスをインストールすることです。 サンドボックスはとってもインストールが簡単であらかじめ symfony プロジェクトがパッケージになっており、すでに理にかなったデフォルトで設定されています。これは Web のベストプラクティスを尊重する適切だがわずらわしいインストール作業をしなくても symfony を使って練習するためのすばらしい方法です。」
サンドボックスは SQLite をデータベースエンジンとして使うようあらかじめ設定されています。Windows では特別にインストールするものはありません: SQLite のサポートは SQLite の PDO エクステンションで直接実装されており PHP のインストール時点で一緒にインストールされます。PHP ランタイムが Microsoft Web PI を通してインストールされたときにすでにこれは完了しています。
SQLite エクステンションが php.ini
ファイルで正しくインストールされていることを確認します。php.ini
は C:\Program Files (x86)\PHP
ディレクトリのなかにあり、SQlite の PDO サポートを実装する DLL は C:\Program Files (x86)\PHP\ext\php_pdo_sqlite.dll
です。
ダウンロードし、ディレクトリを作成しすべてのファイルをコピーする
symfony のサンドボックスプロジェクトは「インストールと実行の準備ができており」、.zip
アーカイブ形式で配布されています。
アーカイブをダウンロードし、C:\Users\Administrator
ディレクトリのなかで読み書きできる「downloads」ディレクトリのような一時的な位置に展開します。
サンドボックスの最終的な設置場所として F:\dev\sfsandbox
のようなディレクトリを作ります:
すべてのファイルを選択する - Windows Explorer で Ctrl-A
- ダウンロードの位置(ソース)から、そしてこれらを F:\dev\sfsandbox
ディレクトリへコピーします。
2599アイテムが目的のディレクトリにコピーされるのが見えます:
テストを実行する
コマンドプロンプトを開き、F:\dev\sfsandbox
に移動し次のコマンドを実行します:
PHP symfony -V
これは次の文字列を返します:
symfony version 1.3.0 (F:\dev\sfsandbox\lib\symfony)
同じコマンドプロンプトから、次のコマンドを実行します:
SYMFONY.BAT -V
これも同じ結果を返します:
symfony version 1.3.0 (F:\dev\sfsandbox\lib\symfony)
Web アプリケーションの作成
ローカルサーバーで Web アプリケーションを作るには、IIS 7 マネージャを使います。これは IIS 関連のすべての活動のための GUI コントロールパネルです。この UI から発動されるすべてのアクションは実際には背後のコマンドラインインターフェイス経由で実行されます。
IIS マネージャコンソールはスタートメニューのプログラムの管理ツールのインターネット インフォメーション サービス (IIS) マネージャでアクセス可能です。
ポート80のインターフェイスを利用できないように「Default Web Site」を再設定する
symfony のサンドボックスがポート80 (HTTP) でのみ応答するようにすることを望みます。このためには、既存の「Default Web Site」のポートを8080に変更します。
Windows ファイアウォールが有効な場合、「Default Web Site」に到達できるようにポート8080用の例外を作らなければならないことがあることにご注意ください。この目的のために、Windows コントロールパネルに移動し、Windows ファイアウォールを選択し、「Windows ファイアウォールによるプログラムの許可」をクリックし、「ポートの追加」をクリックします。作成の後でチェックボックスにチェックして例外を有効にします。
サンドボックス用の新しい Web サイトを追加する
管理ツールから IIS マネージャを開きます。左のペインで、「Sites」のアイコンを選び右クリックします。ポップアップメニューから Add Web Site を選びます。サイトの名前としてたとえば「Symfony Sandbox」を、物理的なパスとして D:\dev\sfsandbox
を入力し、ほかのフィールドはそのままにします。ダイアルボックスを見ることにあります:
OK をクリックします。小さな x
が Web サイトのアイコンに現れる場合(ビュー/サイト機能のなか)、消すために右ペインの「Restart」をクリックするのをためらわないでください。
Web サイトが応答しているかチェックする
IIS マネージャから、右ペインの「Symfony Sandbox」のサイトを選択し、「Browse *.80 (http)」をクリックします。
明示的なエラーが表示される場合、これは期待される動作ではありません: HTTP Error 403.14 - Forbidden
。Web サーバーはこのディレクトリのコンテンツの一覧を表示しないように設定されています。
これはこのディレクトリの内容を表示しないように指定するデフォルトの Web サーバーのコンフィギュレーションに由来します。D:\dev\sfsandbox
に index.php
もしくは index.html
のようなデフォルトのファイルが存在しないので、サーバーは正しく "Forbidden" エラーメッセージを返したのです。こわがらないでください。
ブラウザの URL バーに http://localhost
の代わりに http://localhost/web
を入力します。デフォルトの Internet Explorer では、「Symfony Project Created」が表示されます:
ところで、トップに「Intranet settings are now turned off by default. Intranet settings are less secure than Internet settings. Click for options.」という黄色のバーが見えます。このメッセージにおどろかないでください。
これを恒久的に閉じるには、黄色のバーを右クリックし、適切なオプションを選びます。
このスクリーンはデフォルトの index.php
ページが D:\dev\sfsandbox\web\index.php
から正しくロードされ、正しく実行され、symfony のライブラリが正しく設定されたことを裏づけします。
symfony サンドボックスで遊び始める前に最後のタスクを実行する必要があります: URL 書き換えルールをインポートすることでフロントエンドページを設定します。これらのルールは .htaccess
ファイルとして実装され IIS マネージャで数クリックするだけでコントロールできます。
サンドボックス: Web フロントエンドコンフィギュレーション
実際の symfony スタッフを遊び始めるためにサンドボックスアプリケーションのフロントエンドを設定する必要があります。デフォルトでは、ローカルマシン (すなわち名前が localhost
もしくはアドレスが 127.0.0.1
) からリクエストされるときにフロントページが到達し正しく実行されます。
Windows Server 2008 でサンドボックスが十分に機能するか確認するために Web デバッグパネルの「configuration」、「logs」と「timers」を調べてみましょう。
インターネットもしくはリモート IP アドレスからサンドボックスアプリケーションをリクエストしたい気がしますが、サンドボックスはローカルマシンで symfony フレームワークを学ぶために設計されたツールです。ですので、最後のセクションでリモートアクセスに関する詳細な内容をカバーします。
新しい symfony プロジェクトの作成
実際の開発目的のために symfony プロジェクト環境を作る作業はサンドボックスのインストールのように直感的です。サンドボックスのインストールとデプロイメントと同じように、簡略化された手続きでインストールプロセス全体を見ることになります。
違いはこの「project」セクションでは、インターネットのどこからでも動くように Web アプリケーションのコンフィギュレーションに焦点を合わせることです。
サンドボックスのように、symfony のプロジェクトは SQLite をデータベースエンジンとして使うようあらかじめ設定されています。これはこの章の前のほうでインストールされ設定されました。
ダウンロードし、ディレクトリを作成しファイルをコピーする
symfony のそれぞれのバージョンは .zip ファイルでダウンロードでき最初からプロジェクトを作成するために使われます。
symfony 公式サイトからライブラリを含むアーカイブをダウンロードします。次に、含まれるディレクトリを "downloads" ディレクトリのような一時的な場所に展開します。
プロジェクトの最終的な場所のディレクトリツリーを作る必要があります。これはサンドボックスよりも少しややこしいです。
ディレクトリツリーのセットアップ
プロジェクトのディレクトリツリーを作りましょう。たとえば D:
などのボリュームルートから始めます。
D:
で \dev
ディレクトリを作り、そこで sfproject
という名前の別のディレクトリを作ります:
D: MD dev CD dev MD sfproject CD sfproject
次のディレクトリにいます: D:\dev\sfproject
そこから、lib
、vendor
と symfony
ディレクトリを順番に作ることでサブディレクトリツリーを作ります
MD lib CD lib MD vendor CD vendor MD symfony CD symfony
次のディレクトリにいます: D:\dev\sfproject\lib\vendor\symfony
ダウンロードした位置 (ソース) からすべてのファイル (Windows Explorer では CTRL-A
) を選び、Downloads から D:\dev\sfproject\lib\vendor\symfony
へコピーします。3819のアイテムが目的のディレクトリにコピーされる様子を見ることになります:
作成と初期化
コマンドプロンプトを開きます。D:\dev\sfproject
ディレクトリに移動し次のコマンドを実行します:
PHP lib\vendor\symfony\data\bin\symfony -V
これは次の文字列を返します:
symfony version 1.3.0 (D:\dev\sfproject\lib\vendor\symfony\lib)
プロジェクトを初期化するには、次の PHP コマンドラインを実行するだけです:
PHP lib\vendor\symfony\data\bin\symfony generate:project sfproject
これは chmod 777
コマンドを含むファイルオペレーションのリストを返します:
コマンドプロンプトのなかで、次のコマンドを実行することで symfony アプリケーションを作ります:
PHP lib\vendor\symfony\data\bin\symfony generate:app sfapp
繰り返しますが、このコマンドは chmod 777
コマンドを含むファイルオペレーションのリストを返します。
この点から、必要なときごとに php lib\vendor\symfony\data\bin\symfony
を打ち込むよりも、オリジナルからsymfony.bat
ファイルをコピーします:
copy lib\vendor\symfony\data\bin\symfony.bat
D:\dev\sfproject
で実行する便利なコマンドがあります。
D:\dev\sfproject
において、今や古典的なコマンドを実行します:
symfony -V
古典的な回答が得られます:
symfony version 1.3.0 (D:\dev\sfproject\lib\vendor\symfony\lib)
Web アプリケーションの作成
次の行では「Default Web Site」を再設定する以前のステップの「サンドボックス: Web アプリケーションの作成」を読んだことを前提とします。ですのでポート80のインターフェイスが存在しません。
プロジェクトの新しい Web サイトを追加する
管理ツールから IIS マネージャを開きます。左ペインで「Sites」 のアイコンを選び右クリックします。ポップアップメニューから「Add Web Site」を選びます。たとえばサイトの名前として「Symfony Project」を、物理パスとして D:\dev\sfproject
を入力しそのほかのフィールドはそのままにしておきます。次のダイアログボックスが表示されます:
OK をクリックします。小さな x
が Web サイトのアイコンに現れる場合 (ビュー/サイト機能)、これを消すために「Restart」をクリックするのをためらわないでください。
Web サイトが応答するかチェックする
IIS マネージャから、「Symfony Project」のサイトを選択し、右のペインで「Browse *.80 (http)」をクリックします。
サンドボックスを試したときと同じエラーメッセージが得られます:
HTTP Error 403.14 - Forbidden
Web サーバーはこのディレクトリのコンテンツを表示するように設定されていません。
ブラウザの URL バーで http://localhost/web
を入力すると「Symfony Project Created」 ページを見ることになります。サンドボックスの初期化の結果には同じページから少しの違いがあります: 画像が存在しません:
画像は symfony の sf
ディレクトリに設置されているにも関わらずこの時点では表示されません。sf
という名前の仮想ディレクトリを /web
に追加し、D:\dev\sfproject\lib\vendor\symfony\data\web\sf
を指し示すことで、これらの画像を /seb
ディレクトリにリンクするのは容易です。
期待どおりの通常の画像つきの「symfony の初期ページ」が表示されます:
そして最後に、symfony のアプリケーション全体が動いています。Web ブラウザから、Web アプリケーションの URL、すなわち http://localhost/web/sfapp_dev.php
を入力します:
ローカルモードで1つのテストを実行してみましょう: プロジェクトが十分な機能を持つか Web デバッグパネルの「configuration」、「logs」と「timers」を確認します。
インターネットに対応するアプリケーションのコンフィギュレーション
symfony の一般的なプロジェクトは http://localhost
もしくは http://127.0.0.1
に設置される localhost サーバーからサンドボックスのようにローカルで動いています。
インターネットからアプリケーションにアクセスできるようにします。
プロジェクトのデフォルトコンフィギュレーションはアプリケーションがリモート位置から実行されるのを防止しています。にもかかわらず、実際には index.php
と sfapp_dev.php
ファイルの両方にアクセスするのは OK です。Web ブラウザからプロジェクトを実行してみましょう。サーバーの外部の IP アドレス (たとえば 94.125.163.150
) と専用の仮想サーバーの FQDN (たとえば 12543hpv163150.ikoula.com
) を使うことで、サーバー内部から両方のアドレスを使うこともできます。これはこれらが 127.0.0.1
にマッピングされていないからです:
前に説明したように、リモート位置からの index.php
と sfapp_dev.php
へのアクセスは OK です。しかし、sfapp_dev.php
の実行は失敗します。これはデフォルトで許可されないからです。これは潜在的に悪意のあるユーザーが、プロジェクトに関する慎重に扱うべき情報を含む開発環境にアクセスするのを防止します。これを動かすために sfapp_dev.php
ファイルを編集できますが、強く非推奨です。
前に説明したように、リモート位置からの index.php
と sfapp_dev.php
へのアクセスは OK です。しかし、sfapp_dev.php
の実行は失敗します。これはデフォルトで許可されないからです。これは潜在的に悪意のあるユーザーが、プロジェクトに関する慎重に扱うべき情報を含む開発環境にアクセスするのを防止します。これを動かすために sfapp_dev.php
ファイルを編集できますが、強く非推奨です。
最後に、"hosts" ファイルを編集することで実際のドメインをシミュレートできます。
このファイルは Windows で DNS サービスをインストールする必要なしにローカルの FQDN 名前解決を実行します。DNS サーバーは Windows Server 2008 Standard、Enterprise と Datacenter エディションも含めて、Windows Server 2008 R2 のすべてのエディションで利用可能です。
Windows x64 OS では、"hosts" ファイルはデフォルトで C:\Windows\SysWOW64\Drivers\etc
に設置されています。
hosts
ファイルにはマシンが localhost
を IPv4 では 127.0.0.1
、IPv6 では ::1
として解決するようにあらかじめ記述されています。
sfwebapp.local
のようなフェイクの実際のドメイン名を追加して、ローカルで解決するようにしましょう。
これで symfony プロジェクトは Web サーバー内から実行される Web ブラウザセッションによって DNS なしで Web で動きます。
This work is licensed under the Creative Commons Attribution-Share Alike 3.0 Unported License license.