[MEMO] OSS アプリを Web Application Gallery に登録する (2-1) OSS アプリのパッケージング
前回は Web Application Gallery の概要についてご紹介しました。今回は Web Application Gallery への登録手順 3つのうち、最初の「OSS アプリのパッケージング」方法を WordPress 3.1 英語版のパッケージを例にご紹介申し上げます。
なお、パッケージングについての詳しい解説は下記URL に記載しています。
<Package an Application for the Windows Web Application Gallery: 英語>
https://learn.iis.net/page.aspx/578/package-an-application-for-the-windows-web-application-gallery/
■ パッケージング概要
パッケージは zip ファイル形式で、その中に下記のものが含まれます。
- アプリケーション フォルダー:OSS アプリケーションのフォルダー
- manifest.xml: インストールの指示内容を記載
- parameters.xml: インストール時にユーザーに入力させるパラメーターを記載
- install.sql : データベースユーザーのアクセス権設定に関するSQL のスクリプト。定型
WordPress 3.1 英語版のパッケージの場合 wordpress-3.1-IIS.zip がパッケージで、その中は下記のようになっています。
これから、zip ファイルに含まれる各項目について紹介してまいります。
■ アプリケーション フォルダー の構成
アプリケーション フォルダーは OSS アプリケーションのフォルダーそのものになります。WordPress 3.1 英語版の場合、下記の図のように「wordpress」フォルダーに WordPress 3.1 英語版のファイルをそのまま格納します。
■ manifest.xml の作成
manifest.xml はインストールの指示内容を記載します。具体的には、Web サイト、アクセス権、データベーススクリプト、ファイルコピーの4つについて設定が可能です。以下のWordPress 3.1 英語版の manifest.xml をもとに説明します。
<MSDeploy.iisApp> <iisApp path="wordpress"/> <dbmysql path="install.sql" /> <setAcl path="wordpress/wp-content" setAclUser="anonymousAuthenticationUser" setAclAccess="Modify" /> <alias from="wordpress/wp-config-sample.php" to="wordpress/wp-config.php" /> </MSDeploy.iisApp> |
図 WordPress 3.1 英語版の manifest.xml
Web サイトの設定
Web サイトの設定には、<iisApp> タグを使用します。
- pathの値は、アプリケーションフォルダー名をそのまま入れてください。
アクセス権の設定
アクセス権の設定には、<setAcl> タグを使用します。
- path の値は、フォルダー、ファイル名どちらでも結構ですが、アプリケーションフォルダー名から記述してください。
- setAclUser の値は anonymousAuthenticationUser を指定してください。
- アクセス権を setAclAccess で設定しますが、下記を参考にして指定してください。
Linux | Windows |
0 | なし |
1 | Execute |
2 | Write |
3 | Write,Execute |
4 | Read |
5 | ReadAndExecute |
6 | Read,Write |
7 | Modify |
データベーススクリプトの設定
インストール時にデータベースが作成されますが、その後のデータベーススクリプトを実行したい場合に使用します。MySQL をデータベースとして使用する場合、<dbmysql path="install.sql" /> の記載のみで結構ですが、他にスクリプトを追加したい場合は、<dbmysql path="install2.sql" /> のようにmanifest.xml に追加してください。
* SQL Server の場合は <dbfullsql> タグを使用します。
ファイルコピーの設定
Config のサンプルファイルをコピーして使用する場合等、ファイルをコピーする場合には、<alias> タグを使用します。from と to にファイル名を入力します。ファイル名はアプリケーションフォルダー名から記述してください。
■ parameters.xml の作成 (UTF-8 で保存してください)
parameters.xml はインストール時にユーザーに入力させるパラメーターを記載します。パラメーターはいくつも設定可能ですが、Web サイト、アクセス権、データベースは必ず設定します。以下のWordPress 3.1 英語版の parameters.xml をもとに説明します。
<parameters> <!—- Web サイトのパラメーター --> <parameter name="AppPath" defaultValue="Default Web Site/wordpress" tags="iisapp"> <parameterEntry type="ProviderPath" scope="iisapp" match="wordpress" /> </parameter> <!—- アクセス権のパラメーター --> <parameter name="SetAclParameter1" defaultValue="{AppPath}/wp-content" tags="Hidden"> <parameterEntry type="ProviderPath" scope="setAcl" match="wordpress/wp-content$" /> </parameter> <!—- アクセス権データベース作成用のパラメーター –-> <parameter name="DbServer" defaultValue="l27.0.0.1" tags="MySQL,dbServer" /> <parameter name="DbName" defaultValue="wordpress" tags="MySQL,dbName"> <parameterValidation type="RegularExpression" validationString="^\w{1,16}$" /> <parameterEntry type="TextFile" scope="install.sql" match="PlaceholderForDbName" /> </parameter> <parameter name="DbUsername" defaultValue="wordpressuser" tags="MySQL,DbUsername"> <parameterValidation type="RegularExpression" validationString="^\w{1,16}$" /> <parameterEntry type="TextFile" scope="install.sql" match="PlaceholderForDbUsername" /> </parameter> <parameter name="DbPassword" tags="New,Password,MySQL,DbUserPassword"> <parameterEntry type="TextFile" scope="install.sql" match="PlaceholderForDbPassword" /> </parameter> <parameter name="DbAdminUsername" defaultValue="root" tags="MySQL,DbAdminUsername" /> <parameter name="DbAdminPassword" tags="Password,MySQL,DbAdminPassword" /> <parameter name="Connection String" defaultValue="Server={DbServer};Database={DbName};uid={DbAdminUsername};Pwd={DbAdminPassword};" tags="Hidden,MySQLConnectionString,Validate,MySQL"> <parameterEntry type="ProviderPath" scope="dbmysql" match="install.sql" /> </parameter> <!—- WebMatrix の発行用のパラメーター –-> <parameter name="Automatic Database Server PHP File" defaultValue="define('DB_HOST', '{DbServer}');" tags="Hidden, MySQL"> <parameterEntry type="TextFile" scope="wp-config.php$" match="define\('DB_HOST', '[^']*'\);" /> </parameter> <parameter name="Automatic Database Name PHP File" defaultValue="define('DB_NAME', '{DbName}');" tags="Hidden, MySQL"> <parameterEntry type="TextFile" scope="wp-config.php$" match="define\('DB_NAME', '[^']*'\);" /> </parameter> <parameter name="Automatic Database Username PHP File" defaultValue="define('DB_USER', '{DbUsername}');" tags="Hidden,MySQL"> <parameterEntry type="TextFile" scope="wp-config.php$" match="define\('DB_USER', '[^']*'\);" /> </parameter> <parameter name="Automatic Database Password PHP File" defaultValue="define('DB_PASSWORD', '{DbPassword}');" tags="Hidden, MySQL"> <parameterEntry type="TextFile" scope="wp-config.php$" match="define\('DB_PASSWORD', '[^']*'\);" /> </parameter> <!—- OSS アプリケーション独自のパラメーター ––> <parameter name="Key1" friendlyName="Unique Key for Passwords" description="Unique phrase used to strengthen your password." defaultValue="put your unique phrase here" tags="NoStore"> <parameterValidation type="RegularExpression" validationString="^[^'\\]+$" /> <parameterEntry type="TextFile" match="(?<='AUTH_KEY',[ ]+')put your unique phrase here" scope="wordpress\\wp-config.php" /> </parameter> <parameter name="Key2" friendlyName="Unique Key for Secure Passwords" description="Different unique phrase used to strengthen SSL passwords." defaultValue="put your unique phrase here" tags="NoStore"> <parameterValidation type="RegularExpression" validationString="^[^'\\]+$" /> <parameterEntry type="TextFile" scope="wordpress\\wp-config.php" match="(?<=SECURE_AUTH_KEY',[ ]+')put your unique phrase here" /> </parameter> <parameter name="Key3" friendlyName="Unique Key for Authentication" description="Different unique phrase used to strengthen authentication." defaultValue="put your unique phrase here" tags="NoStore"> <parameterValidation type="RegularExpression" validationString="^[^'\\]+$" /> <parameterEntry type="TextFile" scope="wordpress\\wp-config.php" match="(?<=LOGGED_IN_KEY',[ ]+')put your unique phrase here" /> </parameter> <parameter name="Key4" friendlyName="Second Unique Key for Authentication" description="Another unique phrase used to strengthen authentication." defaultValue="put your unique phrase here" tags="NoStore"> <parameterValidation type="RegularExpression" validationString="^[^'\\]+$" /> <parameterEntry type="TextFile" scope="wordpress\\wp-config.php" match="(?<=NONCE_KEY',[ ]+')put your unique phrase here" /> </parameter> </parameters> |
図 WordPress 3.1 英語版の parameters.xml(コメント欄は削除、<parameter> タグは一部移動)
Web サイトのパラメーター
Web Platform Installer でインストールする際に Web サイトを変更する事ができるため、Web サイトのパラメーターの記述は必須となります。
Web サイトのパラメーターは、下記のように記述します。(1) の値は、manifest.xml の欄で説明した <iisApp> タグの path の値を記述してください。WordPress 3.1 英語版では、「wordpress」となります。なお、<parameterEntry> タグの match の値は正規表現で記述可能です。
<parameter name="AppPath" defaultValue="Default Web Site/ (1) " tags="iisapp"> <parameterEntry type="ProviderPath" scope="iisapp" match=" (1) " /> </parameter> |
アクセス権のパラメーター
Web サイトの値を変更するとアクセス権の対象となるフォルダーも変更となるため、アクセス権のパラメーターの記述は必須となります。
アクセス権のパラメーターは下記のように記述します。(2) の値は、manifest.xml の欄で説明した <setAcl> タグの path の値ですが、Web サイトのところは {AppPath} と記述してください。WordPress 3.1 英語版では、「{AppPath}/wp-content」となります。(3) の値は、manifest.xml の欄で説明した <setAcl> タグの path の値をそのまま記述してください。WordPress 3.1 英語版では、「wordpress/wp-content」となります。
なお、<parameter> タグの tags=”Hidden” とする事で、このパラメーターをユーザーが直接入力できないようにする事ができます。、<parameterEntry> タグの match の値にある「$」は正規表現の「文字列の終端」を意味します。
<parameter name="SetAclParameter1" defaultValue=" (2) " tags="Hidden"> <parameterEntry type="ProviderPath" scope="setAcl" match=" (3) $" /> </parameter> |
データベースの作成用パラメータ
Web Platform Installer でインストールする際に OSS アプリケーション用のデータベースを作成しますので、下記のパラメーターの記述は必須となります。WordPress 3.1 英語版をベースとした場合の変更箇所は下記になります。
- <parameter> タグ 「DbName」と「DbUsername」の defaultValue の値は必須で変更してください。
- <parameter> タグ内に <parameterValidation> タグを記載すると入力規則が有効になります。必要に応じて追加、削除してください。
<parameter name="DbServer" defaultValue="l27.0.0.1" tags="MySQL,dbServer" /> <parameter name="DbName" defaultValue="wordpress" tags="MySQL,dbName"> <parameterValidation type="RegularExpression" validationString="^\w{1,16}$" /> <parameterEntry type="TextFile" scope="install.sql" match="PlaceholderForDbName" /> </parameter> <parameter name="DbUsername" defaultValue="wordpressuser" tags="MySQL,DbUsername"> <parameterValidation type="RegularExpression" validationString="^\w{1,16}$" /> <parameterEntry type="TextFile" scope="install.sql" match="PlaceholderForDbUsername" /> </parameter> <parameter name="DbPassword" tags="New,Password,MySQL,DbUserPassword"> <parameterEntry type="TextFile" scope="install.sql" match="PlaceholderForDbPassword" /> </parameter> <parameter name="DbAdminUsername" defaultValue="root" tags="MySQL,DbAdminUsername" /> <parameter name="DbAdminPassword" tags="Password,MySQL,DbAdminPassword" /> <parameter name="Connection String" defaultValue="Server={DbServer};Database={DbName};uid={DbAdminUsername};Pwd={DbAdminPassword};" tags="Hidden,MySQLConnectionString,Validate,MySQL"> <parameterEntry type="ProviderPath" scope="dbmysql" match="install.sql" /> </parameter> |
WebMatrix の発行用のパラメータ
WebMaMatrix で発行する時に必要となるパラメーターの記述です。こちらも必須のパラメーターになります。OSS アプリのインストール時にデータベースが作成される時に使用したパラメータの値をコンフィグファイル(例:wp-config.php)に書き込むために必要なパラメーターになります。
WordPress 3.1 英語版をベースとした場合の変更箇所は下線をひいています。
- 各 <parameter> タグの defaultValue の値はコンフィグファイルに書き込まれる値にしてください。{}の中には先程説明したデータベース作成用のパラメータの名前を入力してください。defaultValue には 例えば{DbServer} だけでなく、その値が含まれる行全体を記述してください。
- <parameterEntry> タグ内の scope の値はコンフィグファイルの名前にしてください。正規表現で記述可能です。
- <parameterEntry> タグ内の match の値は defaultValue の値を正規表現で記述してください。
<parameter name="Automatic Database Server PHP File" defaultValue="define('DB_HOST', '{DbServer}'); " tags="Hidden, MySQL"> <parameterEntry type="TextFile" scope="wp-config.php$" match="define\('DB_HOST', '[^']*'\); " /> </parameter> <parameter name="Automatic Database Name PHP File" defaultValue="define('DB_NAME', '{DbName}'); " tags="Hidden, MySQL"> <parameterEntry type="TextFile" scope="wp-config.php$" match="define\('DB_NAME', '[^']*'\); " /> </parameter> <parameter name="Automatic Database Username PHP File" defaultValue="define('DB_USER', '{DbUsername}'); " tags="Hidden,MySQL"> <parameterEntry type="TextFile" scope="wp-config.php$" match="define\('DB_USER', '[^']*'\); " /> </parameter> <parameter name="Automatic Database Password PHP File" defaultValue="define('DB_PASSWORD', '{DbPassword}'); " tags="Hidden, MySQL"> <parameterEntry type="TextFile" scope="wp-config.php$" match="define\('DB_PASSWORD', '[^']*'\); " /> </parameter> |
WordPress 3.1 英語版の場合、上述のように記載する事で Web Platform Installer でのインストール時、および WebMatrix の発行コマンドを使用時にwp-config.php の下記の値が自動的に更新されます。
/** MySQL hostname */ define('DB_HOST', 'localhost'); define('DB_NAME', 'database_name_here'); /** MySQL database username */ define('DB_USER', 'username_here'); /** MySQL database password */ define('DB_PASSWORD', 'password_here'); |
図 WordPress 3.1 英語版の wp-config.php(一部抜粋)
OSS アプリケーション独自のパラメータ
OSS アプリのインストール時に、アプリ独自のパラメーター値をコンフィグファイルへの書き込む必要がある場合には、OSS アプリケーション独自のパラメータを記述する事ができます。記述方法は先程の WebMatrix 発行用のパラメーターとほぼ同じですが、ユーザーが入力する必要のあるパラメーターのため、<parameter> タグの tags の値が NoStore である事と、<parameterValidation> を利用可能である点が異なります。
WordPress 3.1 英語版の場合は下記のようになります。
<parameter name="Key1" friendlyName="Unique Key for Passwords" description="Unique phrase used to strengthen your password." defaultValue="put your unique phrase here" tags="NoStore"> <parameterValidation type="RegularExpression" validationString="^[^'\\]+$" /> <parameterEntry type="TextFile" match="(?<='AUTH_KEY',[ ]+')put your unique phrase here" scope="wordpress\\wp-config.php" /> </parameter> <parameter name="Key2" friendlyName="Unique Key for Secure Passwords" description="Different unique phrase used to strengthen SSL passwords." defaultValue="put your unique phrase here" tags="NoStore"> <parameterValidation type="RegularExpression" validationString="^[^'\\]+$" /> <parameterEntry type="TextFile" scope="wordpress\\wp-config.php" match="(?<=SECURE_AUTH_KEY',[ ]+')put your unique phrase here" /> </parameter> <parameter name="Key3" friendlyName="Unique Key for Authentication" description="Different unique phrase used to strengthen authentication." defaultValue="put your unique phrase here" tags="NoStore"> <parameterValidation type="RegularExpression" validationString="^[^'\\]+$" /> <parameterEntry type="TextFile" scope="wordpress\\wp-config.php" match="(?<=LOGGED_IN_KEY',[ ]+')put your unique phrase here" /> </parameter> <parameter name="Key4" friendlyName="Second Unique Key for Authentication" description="Another unique phrase used to strengthen authentication." defaultValue="put your unique phrase here" tags="NoStore"> <parameterValidation type="RegularExpression" validationString="^[^'\\]+$" /> <parameterEntry type="TextFile" scope="wordpress\\wp-config.php" match="(?<=NONCE_KEY',[ ]+')put your unique phrase here" /> </parameter> |
WordPress 3.1 英語版の場合、上述のように記載する事で Web Platform Installer でのインストール時に wp-config.php の下記の値が自動的に更新されます。
define('AUTH_KEY', 'put your unique phrase here'); define('SECURE_AUTH_KEY', 'put your unique phrase here'); define('LOGGED_IN_KEY', 'put your unique phrase here'); define('NONCE_KEY', 'put your unique phrase here'); |
図 WordPress 3.1 英語版の wp-config.php(一部抜粋)
■ install.sql の作成
install.sql は、OSS アプリケーションのインストール時に作成されるデータベースのアクセス権設定に関するSQL のスクリプトを記述します。こちらは定型ですので下記をコピー&ペーストしてください。
USE PlaceholderForDbName; DROP PROCEDURE IF EXISTS add_user ; CREATE PROCEDURE add_user() BEGIN DECLARE EXIT HANDLER FOR 1044 BEGIN END; GRANT ALL PRIVILEGES ON PlaceholderForDbName.* to 'PlaceholderForDbUsername'@'localhost' IDENTIFIED BY 'PlaceholderForDbPassword'; FLUSH PRIVILEGES; END ; CALL add_user() ; DROP PROCEDURE IF EXISTS add_user ; |
以上で、OSS アプリケーションのパッケージング作業は完了です。続いては、パッケージのテスト作業をご紹介します。
武田正樹