WebApp、OSがWindowsとLinuxで設定回りに差があるうえに
割と纏まったやりたい設定が見つからない…
そんなことがあるので纏めてみました。
なお、Windows版はこちら
※一部Windows版と項目をかぶらせています
想定環境
作成は以下で行きます
・公開はコード(Dockerコンテナは使用しない)
・ランタイムスタックはPHP 7.3
・OSはLinux
・アップロードはFTPで実施
・URLリダイレクト有り
・Basic認証有り
・カスタムドメイン有り
・DNSはAzureDNSを使用
・証明書はなし
・WAFはなし
・表示するサイト自体はHaloWorldが表示される程度の簡単なhtml
LinuxのWebApp
まずコンテナを作りますが、コンテナを作るにあたっては当サイト内でも記事がありますので割愛
一応設定は以下にしてます
プロジェクトの詳細
リソースグループ :somane-app
インスタンスの詳細
名前 :somane-ewb
公開 :コード
ランタイムスタック :PHP 7.3
オペレーティングシステム :Linux
地域 :Japan East
サイズ :Standard S1
後以下も作っときます
StorageAccount :somanestr
コンテンツのアップロード
Windows版の記事と同じ内容となってます
ほかの手段もありますが今回はFTP
1.CloudShell起動
シェル用のストレージディスクを指定して作成する場合は最初からちゃんと指定して間違えずに作成
今回は別件で作成済みなのでマウントされた状態です
2.FTPユーザ作成
以下実行
az webapp deployment user set --user-name shftproot --password ********
3.FTPユーザ名確認
実行したらWebAppの FTP/デプロイユーザ名 のところに今入れたユーザが入ってます
下のFTPホスト名とFTPSホスト名も表示
4.FTP接続
FTPソフト開いて以下入れます
今回はWinSCPを使用
ファイルプロトコル :FTP
暗号化 :暗黙のSSL/TLSの暗号
ホスト名 :FTPSホスト名のFQDN部分
ユーザ名 :ポータルに表示されている FTP/デプロイユーザー名
パスワード :CloudShellで入れたパスワード
5.アップロード
コンテンツをアップロードします
ファイルの格納先は /site/wwwroot になります
6.とりあえずは index.html として HaloWorld!! のファイルを入れたのでそれが見えてます
カスタムドメインの登録
Windows版の記事と同じ内容となってます
ここら辺はまだポータルだけからできますのでわかりやすいんですが一応
1.まずAzureDNSを作ります
2.デプロイができたら取得しておいたドメインでグローバルの名前解決ができるように設定
これに関してはサービスで異なると思うので割愛
3.WebAppでカスタムドメイン名を選択して「カスタムドメインの追加」
4.カスタムドメイン名にDNSに紐づけたドメイン名を入力
なおこれはwww無しになります
5.検証を押すとドメイン所有権が赤!になってると思うので表示されているTXTレコードとAレコードををDNS側に入力
6.AzureDNSだとこんな感じ
7.カスタムドメインでもう一度検証を押すとFQDNとDNS、両方が読み取れていれば緑チェックになるのでカスタムドメインを追加
8.カスタムドメインとして追加されます
今回はSSL証明書は取得しないので赤!のまま
9.なおwww.付きが必要な場合は同じようにwww付きでドメインを登録します
10.同じようにDNS追加要求が出るので同じように追加してwww付きのURLも登録
11.追加されました
SSHの接続
Basic認証やURLリダイレクトなど、FTPでアップロードしてもいいですが
SSHでの接続が可能なのでSSH接続して操作していきます。
なお接続はブラウザーでのSSHセッションではなく、SSHクライアントを使用して接続します。
ブラウザだとコピペできないため、確認ならともかく操作はミスも出かねないですし辛い。
●必要なもの
接続するのに以下が必要です
・AzurePowerShell
●接続 PowerShell を開き、以下を実行
az login
az webapp create-remote-connection --subscription <subscription-id> --resource-group <resource-group-name> -n <app-name>
ポート等接続に必要な情報が表示されますのでPowerShellはそのまま閉じないでおきます
SSHクライアントを起動して
IP:127.0.0.1
ポート:表示されたもの
ユーザとパスワードも表示されたものを入力して接続
以下、接続されます
OSはDebianです(2020年10月現在)
コンテンツの格納先は /home/site/wwwroot 配下になります
Basic認証の設定
Debianなので普通にApacheのBasic認証が行えます。
機能も有効化されています
なので単純にBasic認証をかけたいフォルダに.htaccessを置いてhtpasswdコマンドを実行するだけでBasic認証は行えます。
普通のApacheと変わりませんが一応手順書いておきます
SSHは前の手番で接続したものを使用します
1.Basic認証を行いたいフォルダを作成し、vimで以下作成
# vim /home/site/wwwroot/test/.htaccess
<files ~="" "^\.(htaccess|htpasswd)$"="">
Require all denied
</files>
AuthType basic
AuthName "private area"
AuthUserFile /home/site/wwwroot/test/.htpasswd
Require valid-user
2.以下でユーザとパスワードを設定
# htpasswd -b -c -m /home/site/wwwroot/test/.htpasswd htmroot 123456
3.test配下へBasic認証がかかります
URLリダイレクトの設定
URLリダイレクトを行うとき、大体はmod_rewriteモジュールを有効にしてるかと思います。
WebAppsのLinuxもmod_rewriteは有効化されているのでそちらを使用。
なお、/etc/apache2/apache2.confファイルは再起動すると
WebAppsでの初期設定に戻されるため、VirtualHostでの設定はしてません。
Debianでの.htaccessを使用したURLリダイレクトの基本設定はされているため
一応は /home/site/wwwroot/.htaccessに必要な定義を記載すればいいだけとなります。
なおhttp→https変換は以下の感じ。
wwwなし→wwwあり変換も混ぜてます
/home/site/wwwroot/.htaccess に以下追加
RewriteBase /home/site/wwwroot
RewriteEngine on
続けて以下を追加
RewriteCond %{HTTPS} off
RewriteCond %{HTTP_HOST} !www\. [NC]
RewriteRule ^(.*)$ https://www.%{HTTP_HOST}/$1 [R=301,L]
http→httpsの変換が行えました。
www有りのパスの方は出来てませんが…
.htaccessでは[L]が無視されるためにwww有りのパスの方のリダイレクトが
できていない状態になっていますので、他の手段については追々調べてみるつもりです。
データディスクの追加
AppServiceですが、コンテンツ用に使用できる容量が基本的にAppServiceのプランに依存しています。
動的コンテンツのデータは外部から呼び出すため問題はないはずですが
静的コンテンツで大量のデータを扱う場合、AzureFilesをマッピングして使用することが可能です。
ルートフォルダにはマウントできませんので、マウント先は配下フォルダとなります
まずAzureStorageを作ります。
今回は最初に作ったStorageAccountのsomanestrを使用
ファイル共有を選択
ファイル共有をディスクサイズを指定して作成
作成されたらAppServiceに移動して構成
パスのマッピングから新しいAzureStorageマウント
以下で指定します
名前:test-disk
構成オプション:詳細設定
ストレージアカウント:somanestr
ストレージの種類:Azure Files
共有名:somane-disk
アクセスキー:【ストレージアカウントのアクセスキー】
マウントパス:/home/site/wwwroot/test-disk
追加されたら保存してマウント
なお、追加に伴いAppServiceが再起動します
SSHで接続してマウントされていることが確認できます
なお、マウントなのでFTPの方では見れませんので
ファイルの操作はAzure Storage Explorerから行うことになります