uzullaがブログ

uzullaがブログです。

Windows Server 2012 + IIS8 + PHP + Mysql + Web Deploy環境を構築する(後編)

前編(http://uzulla.hateblo.jp/entry/2013/08/16/010814)の続きです。
今回はWeb DeployをWindows Server 2012にデプロイします。

Web Deploy イズ なに?

まずWeb Deploy(以後WD)ですが、Microsoftが作った、ローカルのウェブコンテンツをサーバーにアップロードする機能です。日本語直訳のMS語では Web 配置 ツールなどと言われています。(一部英語サイトでも、Web Deploy Toolという表記あり)

一般的なウェブへのデプロイはFTPやらScpやらWebdavなんやらを使っていますが、MSがさらにそれをすすめたもの、という感じでしょうか。
MS的には昔からFTP以外でのデプロイの思想があり、なつかしのFrontpageも独自のアップロード機能が実装さえれていたことを覚えている人もいるかもしれません。

特に、昨今のウェブアプリではDBの利用が当然になっていますが、そのスキーマおよびデータのアップロード、ダウンロードをサポートしているのがいままでとの大きな違いだと思います。


また、ホスティング側が、ファイルアップロードの接続情報やDBの接続情報の一式を、 .PublishSettings という設定ファイルで渡すことができます(ただし、WDの接続パスワードは含まれない)。


まあ、Windows Server(以後WS)は当然FTPもサポートしてますし、あまり周辺で使っているのをみたことがありません、というか正直これ聞いたこともありませんでした。
ただ、MSの先端ウェブ開発環境であるWebMatrixにおいてはこれを利用することでシームレスなサイト運営をサポートする!という感じでしたので、先日のWeb Matrix体験時( http://uzulla.hateblo.jp/entry/2013/08/13/233458 )に、ぜひともこれは体感しておかないといけないと思ったわけですね。

早速Web Deployをインストールする

Web Platform InstallerでWDはインストールできる雰囲気があるんですが、これは入れてはいけません。
Web PIからインストールすると、IIS マネージャに「管理サービスの委任」というアイコンがでない。これはガチ罠です。わりと長時間ハマってどうしようもなかった。
参考:http://bartwullems.blogspot.jp/2012/06/iis-management-service-delegation-not.html


前回の記事にかきましたが、管理サービスというアイコンも当初出ていなくて、本当に迷いました。*1


ということで、
http://www.iis.net/downloads/microsoft/web-deploy
こちらのサイトからDLしましょう。
ただし、このサイトの上部にある、緑で大きいボタンの「Install This Extention」もクリックしてはいけません。これはWeb PI経由でのインストールになり、やはり動作しません。

このページの下の方にある、Download web deployの 「Japanese: WebPI / x86 / x64 」から、x86、x64どちらか自分の使っているWS似あわせてのリンクをクリックしましょう。私はx64でした。
また、インストール時にはComplete(全部)をインストールするオプションでやってください。


これをインストールすると、IISマネージャのサーバーの管理欄に「管理サービスの委任」というアイコンが出ます。
これでWDコンポーネントのインストールは完了で、次は設定です。

Web Deployの設定

ここの項目は、iis.netに記載されていたハウツー記事にそって進めます。
http://www.iis.net/learn/publish/using-web-deploy/configure-the-web-deployment-handler
なにかうまくいかなければ、こちらも確認してください。
ただ、いちいち足りてない所があるので、このハウツー記事だけでは多分できません。Mysqlの設定はそもそもそこにはのってませんし…。

管理サービスの追加

IISマネージャで、サーバーを選択して「管理サービス」を開きます。
この画面の「リモート接続を有効にする」をOnにし、右ペインから適用します。その後、開始を押してWMSVC(ウェブ管理サービス?)を起動しておきます。


(こちら必要なのか謎な操作ですが)
c:\inetpub\wwwroot のフォルダを右クリックでプロパティ>セキュリティから、「Local Service」にフルコントロール権限を与えます。

ユーザー追加

IISマネージャにもどり、「IISのマネージャ」をひらきます。ここで「ユーザーの追加」をおこない、ユーザー名とパスワードを適当に設定します(ローカルユーザーと同じでなくて良いはずです)。


左ペイン、サイト>Default Web sileをひらいて(ここは必要に応じて別のサイトでもOKだと思います)、「IISマネージャのアクセス許可」をひらきます。右ペインユーザーの許可を押し、ダイアログで「IISマネージャ」のラジオボタンに変更して、選択から先ほど追加したユーザーを選択し、OKします。

管理サービスの委任の設定

IISマネージャで、サーバを選択して、「管理サービスの委任」を開きます。
ここではWDでデプロイできるものがなにかを設定します。

3つ作る必要があります

コンテンツのあるアプリケーションの展開 を追加

規則の追加をおして、「コンテンツのあるアプリケーションの展開」をひらきます。

プロバイダー項目で、
・contentPath
・iisApp
・setAcl
を設定します。
他はデフォルトでOK。

「ユーザーを規則に追加」
については、名前に * (ワイルドカード)を設定します。

フォルダーをアプリケーションとしてマークを追加

規則の追加をおして、「フォルダーをアプリケーションとしてマーク」をひらきます。
「別のユーザとして実行」の所で、資格情報の指定を設定する必要があります。

ここには(多分)ローカルユーザーで指定する必要があるので、適当にWindowsのユーザーを追加*2して利用するか、(やってみてませんが)Administratorでも指定しておきます。
ほかはデフォルトでOKです。

「ユーザーを規則に追加」
については、名前に * (ワイルドカード)を設定します。

(ここの項目、かなり試行錯誤したので、もしかしたら操作がたりていない可能性もあります、特に上で追加した適当なユーザーの権限をc:\inetpub以下に当てましたが、これが必要だったのかちょっとわかっていません、最初からやり直して…ともおもいましたが…(バタリ))

データベースの展開 を追加

規則の追加をおして、「データベースの展開」を開きます。

プロバイダーにdbMysqlを追加します。

パスについては、設定不要かもしれませんが、わたしは「Server=127.0.0.1」を指定しました。
あとはOKです。

web deployをサイトで有効に

左ペインで、サイトをひらき、Default web site(等)を右クリック、
展開>Web 配置による発行の有効化 をえらび、以下をフィルして行きます。


基本的には、ユーザーをちゃんと指定されていれば、あとはあんまり意味ないというか、後述の設定ファイルにフィルされるだけの模様です。
(別に設定ファイルをつかわないで使うこともできるし、設定ファイルの一部だけWebMatrixで変更もできる)

発行アクセス許可を付与するユーザー

上で追加したIISユーザーを入れます

発行に仕様する SQL Server接続文字列を入力します

ここは空欄でOK

発行に使用するMysql接続文字列を入力します

入力欄右の[…]をひらいて、Mysqlラジオをオンにして、サーバーとデータベース(スキーマ名)、資格情報は資格情報を指定で、設定ボタンをおして設定します。

または、直接テキストで

Server=localhost;Database=DB名;User ID=ユーザー名;Password=パスワード

とも、入力ができます。

あとでWebMatrixで設定もできるので、空欄でもOKです。

発行サーバーに接続するためのURLを指定します

URLのホスト名だけ、必要に応じて修正する必要があります(デフォルトだと割り当てられたランダム文字列のホスト名なので)
IPを入れておけば良いでしょう。

発行ファイルの保存先を指定します

デフォルトだと、デスクトップになっていると思います。


以上もろもろ入力が完了したら、設定をおします。
設定が正常に終了すると、デスクトップに 「hoge_Default Web Site.PublishSettings」みたいなファイルができますので、これをWebMatrixに読み込ませることで、自動的に設定が可能になります。


もしかすると、Dbに接続ができない、というエラーがでるかもしれません。
というか、ここまでそのままやってきた人はMysqlの設定を一切やってないので、当然出ますね、後述のMysqlの設定をしてください。


設定してこの項目にもどってきて、もう一度設定しても出る場合があります。
もちろん実際パスワードなどが間違っていたりする可能性もありますし、Windows Firewallなどにブロックされている可能性がありますが*3
それはMysql Connector/Netが入っていない可能性があります。Web PIでインストールしてください。
ちなみに、ここはかなりハマりましたね、エラーメッセージがシンプルすぎて、FWでブロックされているのかな…とか右往左往しました。


で、WebDeployはMysqlのDBをつくることはやってくれないので、自前で別途やる必要があります。

Mysqlの設定

順序的に前後していますが、MysqlにDBと、ユーザーを作る必要があります。
ここは普通のMysqlの操作と同じなので特に細かくかきません、私はMysql Workbenchをインストールして、適当にDBをつくり、ユーザーを設定しました。WebMatrixで生成される、wordpress321みたいなランダムなDB名などと揃える必要はないようです(もちろんそろえてもいい)。


ユーザーの接続元アドレスについてですが、これはどうやらクライアントになるWebMatrixがProxy的動作をするので、このWDの動作しているサーバーのIPアドレスを許可すればOKのようです(つまり、127.0.0.1)。

以上でWeb Deploy側の設定は完了です、多分。

漏れがあったらこわいな〜〜!(すみません)


ただ、.PublishSettingsファイルが生成できれば、8割はOKのはずです。
生成された .PublishSettings ファイルをもって、クライアントになるWebMatrixに戻りましょう。

Web Matrixに.PublishSettings ファイルを読みこませる

Web Marixでリモートタブをひらき、メニューの設定を開きます。
新しいプロファイルを指定し、.PublishSettings をインポートします。インポート後、パスワードだけは手で入力します。


DB設定まで前段でやってあれば、DBふくめた全フィールドが全部の入力が完了しているはずなので、接続テストを行います。*4


多分、証明書エラーがでるでしょうが、まあこれはWS側で正規のSSL証明書をいれているわけがないので、許可しましょう。


「Connected SuccessFully」とでればOKです!あとはSaveして、デプロイしてみましょう!お疲れ様でした!
デプロイ完了すると、Webmatrix下部にURLが表示され、ブラウザで開くことがデキます。

あ、IISのデフォルトファイル(index.htmlやらDefault.htmlやらiisstart.htmlなど)がおいてあると、index.phpよりそっち優先されちゃうので、削除するか、サーバの設定で、「既定のドキュメント」でindex.phpを上位にしておきましょう。



残念なことに、もしエラーがでた場合にはなにかまちがっていますね、以下をどうぞ。

DBにつながらない

もろもろがちゃんと入力されているかどうかが一番気になりますが、どうにも正しいならば、「データベースの展開」設定で、dbMysqlを追加したか確認しましょう。
かなりハマりどころです。


まずはサーバ側の.PublishSettings生成の時に、ちゃんとエラーなくDB指定ができるかを確認したほうが良いですね。それでMysqlがないとか、DBがないとか、ユーザー名がちがうとかは回避できるはず。

aclで怒られる

「コンテンツのあるアプリケーションの展開」で、プロバイダにsetAclを追加したか確認しましょう。
これはちゃんとエラーででてくるので、すぐにわかりますね、

.Net Framework Versionでエラー

これはAclの設定がちゃんとしていればなおるみたいです…がよくわからない、気づいたら治っていた。

という感じで…

できました…つかれた…

どんハマりしたのが原因でしょうが、大体構築に5時間くらいかかりました。つらかった。
このエントリはハマった所をほぼ省いているので書いてしまえばそれなりのステップ数ですが、
IIS管理ツールがないと、アイコンがでてこない周り
・WebPIからWebDeployをいれると、アイコンが出てこない周り
Mysql Connectorがないよ周り
・WDでMysql設定とか解説しないよまわり
・ユーザーアカウント周り
・setAclまわり
WebMatrixのDB接続入力欄あたり
このあたりでかなりハマりました。


兎に角、海外のiis.netの投稿でにたような症状をさがしたり、
ハウツーサイトでMysqlについて足りていない部分を想像したり、
エラーメッセージの理由を念力でさがしたり 、まあつらかった。


PHP+IISまではウィザードばかりなので、本当に楽だったのですが、この一連は文章で説明されてもわかりづらい事が多く、アイコンがでてこないやつは、特に海外のサイトだったので日本語だとなんと書いてあるか想像するのもつらいし、それが自分が見てる画面にあるのかすら怪しくて悩んだり、途中あるスクリーンショットをみつけて、足りていないアイコンがある事を知り、そのアイコンの出し方を探したり、なかなか難儀しました。


まあ、本当にまあ大変でした。

で、Web Deployはどうだったの?

先日のWeb Matrix体験記( http://uzulla.hateblo.jp/entry/2013/08/13/233458 )ではFTPでアップロードしたのを、今回推奨されるWDでアップロードでき、試すことができました。MSの提案するトータル的なワークフローがここに!という感じです。

たしかにローカルのDBがそのままコピーされて、なおかつWordpressのURl設定などはよしなに変更してアップロードしてくれる事が確認できました。
どこにそういった書き換えの定義があるのかわかりませんので、トリッキーな感じですが、Wordpressの移設で面倒な所を意識させないのはすごいですね!


ただ…WebDeployで、勝手に目玉だとおもっていたDB連携についてはちょっとがっかりで、オール上書きのアップロード、もしくはダウンロードであり、別にマージとかはできませんでした。さすがにそこまで面倒みきれねーよ!というのは理解できるのですが、ううん。
まあphpMyadminいれて、ダンプを上げ下げするよりは圧倒的に楽でわかりやすい、初心者向けは間違いはないのですが、スキーマの差分などがどうこうできるわけでないなら、結局そこらへんの比較的高度なツールが早晩必要になりそうでは有ります。


となると、自分的にはFTPでもいいじゃん?という感じになってしまい…。ううん。


アップロード前にサーバーが適切なのかチェックしたり(PHPがはいっているか?とか)してくれるのはいいですかね…。まあこれにしてもすごい!というより、あっ初心者にはいいですね、という感じで、個人的には別に感有ります。


.netとか、PHPじゃないウェブアプリケーションのデプロイなら、また別の便利さがあるのかもしれません。っていうかあるっぽい。
また、WebDeploy自体にはかなり色々な権限があるみたいなので、プログラム自作して直接たたけばすごいイカスこともできるのかもしれませんね。Winでよくある個人的な不満にMysql Over SSHができないというのがあるのですが*5、そういうのもできる気もします。


後、初心者 初心者連呼するのにレベルの高低みたいな他意はないんですが、DBとかFTPとかそういうのに詳しくない人がワンストップに色々できるのは本当によくできてるなと思いますし、やっぱり初心者には向いています。
Wordpressをどうこうするだけなら、WebDeployはかなりイケてるものだとおもいますし、大体の要件はそんなものでしょうから、イージーかつ必要十分です、WDで収まらん奴らのほうが勝手にしやがれ、という感じです。

個人的にも、WPの中身をガリガリいじらない案件ならこの手軽さいいな、と思います。サーバーからDBバックアップもワンタッチですしね(お客さんにもおしえられそう)。

まとめ

まあ、大変だったわりには多少肩透かし感ありました。
Web Deployは別に自分がつかうために用意するもんじゃないですね、なんとなくわかってはいましたが。
ホスティング業者が提供する価値の一つですね。FTPなくなればシンプルになるかも*6しれませんし、斜め読みしたドキュメントを見る限り、しっかり組めば、オートメーションがはかどるんだと思います。


これを提供してくれているホスティング業者がどんどん増えれば、もっと身近になってきていいなとおもいますが、日本だと業者が(みたこと)無いので、Azureかなーっておもいます。
そろそろAzureつかってみるかな。


というところで、こちらからは以上です。


参考にしたURLメモ

本当につかえないものははいっていませんが、古くて使い物にならない(が、なんとなく理解の役にたった)物もあります。もし参考になれば幸いです。
http://bartwullems.blogspot.jp/2012/06/iis-management-service-delegation-not.html
http://blog.scnetstudio.com/post/2011/01/08/How-to-Configure-Windows-Server-2008-R2-to-support-Web-Deploy-%28for-Web-Matrix%29.aspx
http://blogs.iis.net/msdeploy/
http://blogs.msdn.com/b/osamum/archive/2011/02/08/webmatrix-iis-web.aspx
http://forums.iis.net/t/1159899.aspx/1
http://forums.iis.net/t/1171432.aspx/1/10?Missing+Management+Service+Delegation+icon+
http://forums.iis.net/t/1188531.aspx/1
http://forums.iis.net/t/1191930.aspx/1
http://forums.iis.net/t/1200367.aspx/1
http://technet.microsoft.com/en-us/library/dd569001%28v=ws.10%29.aspx
http://technet.microsoft.com/ja-jp/library/dd569017%28v=ws.10%29.aspx
http://www.iis.net/downloads/microsoft/web-deploy
http://www.iis.net/learn/install/installing-publishing-technologies/installing-and-configuring-web-deploy
http://www.iis.net/learn/publish/troubleshooting-web-deploy/web-deploy-error-codes
http://www.iis.net/learn/publish/using-web-deploy/configure-the-web-deployment-handler
http://www.iis.net/learn/publish/using-web-deploy/use-the-web-deployment-tool
http://www.iis.net/learn/web-hosting/joining-the-web-hosting-gallery/configure-site-for-web-deploy-publishing
http://www.microsoft.com/web/post/connecting-to-a-sql-server-or-mysql-database-in-webmatrix
http://www.microsoft.com/web/post/how-to-publish-a-web-application-using-webmatrix
https://support.gearhost.com/entries/24309308-Publish-via-Web-Deploy-in-WebMatrix
https://www.orcsweb.com/blog/gabe/deploy-webmatrix-2-site-to-webdeploy-enabled-iis8-site/

9割以上英語でしたね、日本語での、最近のWeb Deploy情報はほぼ無いのでは…?

追記

あれ、Azureってタダでつかえるの…?
「Webdeployためしたい!でもワイは無課金や!がんばろう!」とかいってた俺の頑張りは…?

*1: 参考サイト http://forums.iis.net/t/1159899.aspx/1 http://forums.iis.net/t/1171432.aspx/1/10

*2:原文だと、CreateAppUserなどというユーザー名

*3:Windows Firewallオフにしちゃえば解決しますね(ダメなやつだ)

*4:もちろんDB設定を.PublishSettingsにいれていないなら、設定します

*5:しかたないので、OpenVPNなどでVPNほってます。もちろん、SSHDいれればいいけど

*6:…エッ?