[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 がパッケージで、その中は下記のようになっています。

image

これから、zip ファイルに含まれる各項目について紹介してまいります。


■ アプリケーション フォルダー の構成

アプリケーション フォルダーは OSS アプリケーションのフォルダーそのものになります。WordPress 3.1 英語版の場合、下記の図のように「wordpress」フォルダーに WordPress 3.1 英語版のファイルをそのまま格納します。

image


■ 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 アプリケーションのパッケージング作業は完了です。続いては、パッケージのテスト作業をご紹介します。

武田正樹