azureにweb appを作成する

already existsって、そんなアホな。。phpはversionは指定するそうです。
そりゃそうだよね。

t@Azure:~$ az webapp create --resource-group myResourceGroup --plan myAppServicePlan --name analytics --runtime "PHP|7.0" --deployment-local-git
Website with given name analytics already exists.
t@Azure:~$ az webapp create --resource-group myResourceGroup --plan myAppServicePlan --name hpscript --runtime "PHP|7.0" --deployment-local-git

json
host nameができてます。しかも、これSSLですね。あ、これは凄い!
json読むと、webrootがファイルディレクトのパスっぽいです。

Local git is configured with url of ‘https://hoge.scm.azurewebsites.net/hpscript.git’
{
“additionalProperties”: {},
“availabilityState”: “Normal”,
“clientAffinityEnabled”: true,
“clientCertEnabled”: false,
“cloningInfo”: null,
“containerSize”: 0,
“dailyMemoryTimeQuota”: 0,
“defaultHostName”: “hpscript.azurewebsites.net”,
“deploymentLocalGitUrl”: “https://hoge.scm.azurewebsites.net/hpscript.git”,
“enabled”: true,
“enabledHostNames”: [
“hpscript.azurewebsites.net”,
“hpscript.scm.azurewebsites.net”
],
“ftpPublishingUrl”: “ftp://waws-prod-am2-187.ftp.azurewebsites.windows.net/site/wwwroot”,
“hostNameSslStates”: [
{
“additionalProperties”: {
“ipBasedSslResult”: null,
“ipBasedSslState”: “NotConfigured”,
“toUpdateIpBasedSsl”: null
},
“hostType”: “Standard”,
“name”: “hpscript.azurewebsites.net”,
“sslState”: “Disabled”,
“thumbprint”: null,
“toUpdate”: null,
“virtualIp”: null
},
{
“additionalProperties”: {
“ipBasedSslResult”: null,
“ipBasedSslState”: “NotConfigured”,
“toUpdateIpBasedSsl”: null
},
“hostType”: “Repository”,
“name”: “hpscript.scm.azurewebsites.net”,
“sslState”: “Disabled”,
“thumbprint”: null,
“toUpdate”: null,
“virtualIp”: null
}
],
“hostNames”: [
“hpscript.azurewebsites.net”
],
“hostNamesDisabled”: false,
“hostingEnvironmentProfile”: null,
“httpsOnly”: false,
“id”: “/subscriptions/hogehoge/resourceGroups/myResourceGroup/providers/Microsoft.Web/sites/hpscript”,
“identity”: null,
“isDefaultContainer”: null,
“kind”: “app”,
“lastModifiedTimeUtc”: “2018-04-20T13:04:30.993333”,
“location”: “West Europe”,
“maxNumberOfWorkers”: null,
“name”: “hpscript”,
“outboundIpAddresses”: “hoge”,
“possibleOutboundIpAddresses”: “hoge”,
“repositorySiteName”: “hpscript”,
“reserved”: false,
“resourceGroup”: “myResourceGroup”,
“scmSiteAlsoStopped”: false,
“serverFarmId”: “/subscriptions/hogehogehoge/resourceGroups/myResourceGroup/providers/Microsoft.Web/serverfarms/myAppServicePlan”,
“siteConfig”: null,
“slotSwapStatus”: null,
“snapshotInfo”: null,
“state”: “Running”,
“suspendedTill”: null,
“tags”: null,
“targetSwapSlot”: null,
“trafficManagerHostNames”: null,
“type”: “Microsoft.Web/sites”,
“usageState”: “Normal”
}

azure tutrial

まずvagrant

git clone https://github.com/Azure-Samples/php-docs-hello-world
cd php-docs-hello-world
echo "Hello World!";

Azure Cloud Shellを起動

user nameをset

az webapp deployment user set --user-name  --password 

なに!?

{
  "additionalProperties": {},
  "id": null,
  "kind": null,
  "name": "web",
  "publishingPassword": null,
  "publishingPasswordHash": null,
  "publishingPasswordHashSalt": null,
  "publishingUserName": "hoge",
  "type": "Microsoft.Web/publishingUsers/web",
  "userName": null
}

freeレベル
なんでchinaないんだ?なぞだ。

t@Azure:~$ az appservice list-locations --sku FREE
[
  {
    "name": "Central US"
  },
  {
    "name": "North Europe"
  },
  {
    "name": "West Europe"
  },
  {
    "name": "Southeast Asia"
  },
  {
    "name": "East Asia"
  },
  {
    "name": "West US"
  },
  {
    "name": "East US"
  },
  {
    "name": "Japan West"
  },
  {
    "name": "Japan East"
  },
  {
    "name": "East US 2"
  },
  {
    "name": "North Central US"
  },
  {
    "name": "South Central US"
  },
  {
    "name": "Brazil South"
  },
  {
    "name": "Australia East"
  },
  {
    "name": "Australia Southeast"
  },
  {
    "name": "Central India"
  },
  {
    "name": "West India"
  },
  {
    "name": "South India"
  },
  {
    "name": "Canada Central"
  },
  {
    "name": "Canada East"
  },
  {
    "name": "West Central US"
  },
  {
    "name": "West US 2"
  },
  {
    "name": "UK West"
  },
  {
    "name": "UK South"
  },
  {
    "name": "Korea South"
  },
  {
    "name": "Korea Central"
  },
  {
    "name": "France South"
  },
  {
    "name": "France Central"
  }
]

リソースグループを作成
az group create –name myResourceGroup –location “West Europe”
appservice planを作成
az appservice plan create –name myAppServicePlan –resource-group myResourceGroup –sku FREE

{
  "additionalProperties": {},
  "adminSiteName": null,
  "appServicePlanName": "myAppServicePlan",
  "geoRegion": "West Europe",
  "hostingEnvironmentProfile": null,
  "id": "/subscriptions/hoge/resourceGroups/myResourceGroup/providers/Microsoft.Web/serverfarms/myAppServicePlan",
  "isSpot": false,
  "kind": "app",
  "location": "West Europe",
  "maximumNumberOfWorkers": 1,
  "name": "myAppServicePlan",
  "numberOfSites": 0,
  "perSiteScaling": false,
  "provisioningState": "Succeeded",
  "reserved": false,
  "resourceGroup": "myResourceGroup",
  "sku": {
    "additionalProperties": {},
    "capabilities": null,
    "capacity": 0,
    "family": "F",
    "locations": null,
    "name": "F1",
    "size": "F1",
    "skuCapacity": null,
    "tier": "Free"
  },
  "spotExpirationTime": null,
  "status": "Ready",
  "subscription": "ほげ",
  "tags": null,
  "targetWorkerCount": 0,
  "targetWorkerSizeId": 0,
  "type": "Microsoft.Web/serverfarms",
  "workerTierName": null
}

リソース グループ:Web アプリ、データベース、ストレージ アカウントなどの Azure リソースのデプロイと管理に使用する論理コンテナー
デプロイ:主にネットワークを通じて提供されるWebアプリケーションなどのシステム開発工程において、システムを利用可能な状態にする
(1)myresourcegroupをWest Europeに作成
(2)Azure App Service プランの作成 myAppServicePlanというプラン名

app service:
“.NET、.NET Core、Java、Ruby、Node.js、PHP、Python を使用して、強力な Web アプリ、モバイル アプリ、API アプリをすばやく構築できます。Azure App Service を既存のフレームワークに統合して、継続的インテグレーション、ライブサイト デバッグ、および業界最高レベルの Microsoft Visual Studio IDE などの最先端の機能を活用することで、比類ない開発者生産性を実現できます。また、Azure Marketplace から、事前構築済みのアプリ、API、コネクタのエコシステムも活用できます。Visual Studio Team Services、Bitbucket、Docker Hub、および GitHub と統合された CI/CD 機能を使用することで、更新プログラムを簡単にデプロイできます。”
“Azure Web Apps を使用すると、インフラストラクチャを管理することなく、お好きなプログラミング言語で Web アプリケーションを構築してホストすることができます。”

OSがどうなっているかブラックボックスでよくわからんな。
要するに.NET、.NET Core、Java、Ruby、Node.js、PHP、Pythonやそれにつくライブラリーは既にインストールされているってこと?
まずOSのファイル構成が見たいです。

Microsoft windows server 2016 datacenter

azureでMS windows serverに接続します。
Processorはxeonですね。

これから、どうしたら使えるんでしょう?
接続はわかりましたが、サーバーとしての使い方がわかりません。

全然よくわかってませんが、とりあえずIISをインストールするみたいですね。

IISを入れます。

と思ったら、memoryが少なすぎて入れられない、と警告が。
これではお話にならない、というか何もできないので、VMは一旦削除します。

あああああ、デプロイに30分かかったとおもったら、VM削除にも時間がかかりすぎる。勘弁してくれ。

あ、centos-basedも行けますね。
ただ、これだとawsでもやれるので、やはりMS severですか。

iisが入ったので、port80を開けます。

あれ、SSH:80で接続できんぞ。。。

あ、ipでiisが表示されるから、OKなのか。

メニュー多すぎてよくわからん。。。。

SSDとHDD

SSD(ソリッド・ステート・ドライブ)は高速・無音のストレージ
-> UBSメモリーと同じように、内臓しているメモリーチップにデータの読み書きを行う
HDD(hard disc drive)
-> パソコンのデータを保存、内臓ストレージ、補助記憶を担当

azureで最安のプランを選びます

IOPSは,ディスクが1秒当たりに処理できるI/Oアクセスの数

ちなみにさくらVPSのローカルが30GBなので、かなり容量が小さいイメージです。

デプロイが終わりました。

Bounce rateとExite rateを表示

$date1 = date("Y-m-d H:i:s", strtotime("- 2 day"));
// $date2 = date("Y-m-d H:i:s", strtotime("- 1 day"));
$date2 = date("Y-m-d H:i:s");
echo $date1 ." ~ ".$date2 ."<br>";

$mng = new MongoDB\Driver\Manager("mongodb://localhost:27017");
$filter =  [
	'date' => [ '$gte' => $date1, '$lte' => $date2]
];
$options = [
  'projection' => ['_id' => 0],
  'sort' => ['_id' => -1],
];
$query = new MongoDB\Driver\Query($filter, $options);
$cursor = $mng->executeQuery('app.na007', $query);

foreach ($cursor as $document) {
  // var_dump($document);
  $pv[] = $document->date;
  $cookie[] = $document->cookie;
  $session[] = $document->session;
  if(!is_null($document->referrer)){
  $referrer = $document->referrer;
  }
}
// var_dump($session);
$uu = array_unique($cookie);
$session = array_unique($session);
$bounce = (count($pv) - count($referrer))/ count($pv) * 100;
$exit = (count($pv) - count($session))/ count($pv) * 100;
echo "<br>Users :".count($uu)."<br>";
echo "Pageviews :".count($pv)."<br>";
echo "Bounce rate :" .sprintf('%.2f',$bounce)."%<br>";
echo "Exit rate:" .sprintf('%.2f',$exit)."%<br>";

直帰率、離脱率のところまで一通りできたので、これをAzureに載せたい。