AzureでのPHPアプリケーション構築メモ


# 前置き
* 2015年10月8日現在の情報を元に作成中
* PHPアプリケーション(Composer + Slim)であること
* WindowsServerの知識は皆無
* WebアプリまたはVirutalMachineを利用すること
* データの保存は必要ではないこと
* メール送信(SMTP)が必要であること
* Azureプレビューポータルは迷子になるので使わない
* アプリケーション名はhoge-appとするので適宜読み替えること


# Webアプリの場合
IISで稼働している。PHPも使えるので.htaccessで書いているURLRewriteと同等の設定をweb.configで書く必要がある。


## プラン
Free、Sharedは基本的に開発用プラン。
CPU制限がFreeの場合は(60分/日)、Sharedの場合は(240 CPU 分/日)となっているのでアクセスの多いサイトは厳しい。

実用できる最低プランとしてはBasic B1になる。

* Basic B1: 6,732円
* SSL: 918円


## SMTP
メール送信にはsendGridを使えば良い。1ヶ月あたり25,000通まで無料。

[SendGrid 電子メール サービスの使用方法 (.NET) | Microsoft Azure](https://azure.microsoft.com/ja-jp/documentation/articles/sendgrid-dotnet-how-to-send-email/)


## DB
今回は利用なし。

## ログ
ファイルシステムに吐き出せる。VisualStudio経由で接続して参照することは確認出来たが、その他の方法が不明。


## デプロイ
GitでPushすればよい。BitbucketやVisualStudioOnlineと連携することも可能。
VisualStudioから発行もできるみたいだけどソース管理の記録に残らないデプロイは避けたい。


### ローカルリポジトリでの運用(Git)
ローカルからpushを行う場合、https接続でID/パスワード認証が入る。


### デプロイ時のコマンドについて
デプロイ時に実行されるコマンドをリポジトリ内に入れておく必要がある。
今回の場合、Composerを使っているのでデプロイ時にインストールを行う必要がある。

デプロイ用のスクリプトはWinsows Azure SDKを入れてコマンドを叩けばテンプレのスクリプトが作成できるのでそれにComposerのコマンドを追記すれば良い。

* [Windows Azure WebサイトでFuelPHPアプリを動かす | hrendoh's memohrendoh's memo](http://blog.hrendoh.com/deploy-fuelphp-app-on-windows-azure/)


## 構成
### 仮想アプリケーションとディレクトリ
デフォルトだと直下がドキュメントルートになるので変更。

	site\wwwroot => site\wwwroot\public

### ログの出力
稼働しているアプリケーションのファイルシステムに出力できる。
FTP共有からアクセスできる？要調査。

その他、テーブルストレージやBLOBストレージにも出力できるとのこと。


## ドメイン
Sharedプラン以上で使用可能。

## SSL
Sharedプラン以上で使用可能。

## web.config
mod rewirteを使っているが、IISで動いているために.htaccessが使えないのでweb.configを作る必要がある。



# VirtualMachine(Linux)の場合
CentOS(OpenLogic)が使えるのでセットアップさえすれば稼働できる。

## プラン
最低プラン(Basic A0)だとネットワークが不安定なのかyum install時にコケることがあった。
A0は共有コアだし開発用のプランという位置づけで制限が厳しいのかもしれない。
詳細は改めて調査したい。

A1以降は費用が跳ね上がる。

* Basic A0: 1,326円
* Basic A1: 4,182円


料金詳細は以下を確認。


* [料金 - Virtual Machines (VMs) | Microsoft Azure](https://azure.microsoft.com/ja-jp/pricing/details/virtual-machines/#Linux)


## OS
OpenLogicが提供するCentOSが使える。商用サポートしてくれる。
OpenLogic提供のリポジトリは対応が遅れることもあるらしい。

その他、WindowsServerやUbuntu、CoreOSなども提供。


## ssh鍵作成
VM作成時にSSHで接続する場合の公開鍵をアップロードできる。

	openssl req -x509 -nodes -newkey rsa:2048 -keyout azure_private.key -out azure_cert.pem
  	chmod 600 azure_private.key
  	openssl  x509 -outform der -in azure_cert.pem -out azure_cert.cer


* [SSH を使用した Azure の Linux 仮想マシンへの接続](https://azure.microsoft.com/ja-jp/documentation/articles/virtual-machines-linux-use-ssh-key/)
* [Windows AzureでCentOS | Selfkleptomaniac](http://selfkleptomaniac.org/archives/2667)


### sshでの接続
特別なことはなく作った鍵を使って接続すれば良い。

	ssh -i azure_private.key -p 22 azureuser@hoge-app.cloudapp.net


## 可用性セットと負荷分散エンドポイント
同じような構成の仮想マシンを同一の可用性セットに割り当てて、それらを負荷分散や冗長性の確保に利用できる？

[仮想マシンの可用性セットを構成する方法](https://azure.microsoft.com/ja-jp/documentation/articles/virtual-machines-how-to-configure-availability/)

とりあえず今回は必要なさそうなので無効で。余裕があれば調査してみたい。


## VMエージェント
vmware toolsみたいなもの？Linuxイメージを利用する場合は無効に出来ないとのこと。


## selinux
有効になっている。


## IPアドレス
イマイチ整理できてないので要調査。

### インスタンスレベル パブリック IP
各VMに対して割り当てられるIPアドレス。

### 負荷分散した IP アドレス (VIP)
VMまたはクラウドサービスに対して複数のIPアドレスを割り当てられる。

### 予約済み IP アドレス
通常はVMを崩した際にIPアドレスがリリースされるが、サブスクリプション単位で確保しておいてVMに対して割り当てることができる？


* [料金 - Virtual Machine の IP アドレス オプション | Microsoft Azure](https://azure.microsoft.com/ja-jp/pricing/details/ip-addresses/)



## VM作成手順メモ

### 仮想マシン作成
* ギャラリーからCentOSベースOpenLogicを選択

### 仮想マシンの構成
* マシン名:hoge-app
* 階層:Basic
* サイズ:A0
* 新しいユーザ名:azureuser
* SSHキーのアップロード:チェック
* 証明書:ssh鍵作成の項目で作成したpemファイル
* パスワードの指定:なし
* クラウドサービス:なし
* クラウドサービスDNS名:hoge-app.cloudapp.net
* 地域:日本(西)
* ストレージアカウント:自動的に生成されたストレージアカウント
* 可用性セット:なし
* エンドポイント:SSH, HTTP, HTTPS

### VMエージェント
* VMエージェントのインストール:チェック

### 接続
作成が完了したらSSHでの接続を確認し、SELinuxを無効にする。

### プロビジョニング
chefが用意してあるのでそれで。


# VirtualMachine(Windows)の場合
一応こちらで動かす場合もメモしておきたい。
ポート制限とWindowsUpdateくらいで良いらしいが要調査。


# その他参考記事
[新時代到来か！？Windows AzureでCentOSを使った時の勘所 - Qiita](http://qiita.com/kuni-nakaji/items/6b52d597a8570390de9a)
[Linux仮想マシンをWindows Azure上で動かそう！ (2/3)：CodeZine（コードジン）](http://codezine.jp/article/detail/7566?p=2)