AppService周りをまとめてみる(Linux版)

Pocket

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起動

シェル用のストレージディスクを指定して作成する場合は最初からちゃんと指定して間違えずに作成

今回は別件で作成済みなのでマウントされた状態です

001

2.FTPユーザ作成

以下実行

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

002

3.FTPユーザ名確認

実行したらWebAppの FTP/デプロイユーザ名 のところに今入れたユーザが入ってます

下のFTPホスト名とFTPSホスト名も表示

003

4.FTP接続

FTPソフト開いて以下入れます

今回はWinSCPを使用

ファイルプロトコル    :FTP

暗号化          :暗黙のSSL/TLSの暗号

ホスト名         :FTPSホスト名のFQDN部分

ユーザ名         :ポータルに表示されている FTP/デプロイユーザー名

パスワード        :CloudShellで入れたパスワード

004

5.アップロード

コンテンツをアップロードします

ファイルの格納先は /site/wwwroot になります

006

6.とりあえずは index.html として HaloWorld!! のファイルを入れたのでそれが見えてます

006

カスタムドメインの登録

Windows版の記事と同じ内容となってます

ここら辺はまだポータルだけからできますのでわかりやすいんですが一応

1.まずAzureDNSを作ります

008

2.デプロイができたら取得しておいたドメインでグローバルの名前解決ができるように設定

これに関してはサービスで異なると思うので割愛

009

3.WebAppでカスタムドメイン名を選択して「カスタムドメインの追加」

010

4.カスタムドメイン名にDNSに紐づけたドメイン名を入力

なおこれはwww無しになります

011

5.検証を押すとドメイン所有権が赤!になってると思うので表示されているTXTレコードとAレコードををDNS側に入力

012

6.AzureDNSだとこんな感じ

13

7.カスタムドメインでもう一度検証を押すとFQDNとDNS、両方が読み取れていれば緑チェックになるのでカスタムドメインを追加

14

8.カスタムドメインとして追加されます

今回はSSL証明書は取得しないので赤!のまま

15

9.なおwww.付きが必要な場合は同じようにwww付きでドメインを登録します

016

10.同じようにDNS追加要求が出るので同じように追加してwww付きのURLも登録

017

11.追加されました

018

SSHの接続

Basic認証やURLリダイレクトなど、FTPでアップロードしてもいいですが

SSHでの接続が可能なのでSSH接続して操作していきます。

なお接続はブラウザーでのSSHセッションではなく、SSHクライアントを使用して接続します。

ブラウザだとコピペできないため、確認ならともかく操作はミスも出かねないですし辛い。

●必要なもの

接続するのに以下が必要です

・AzurePowerShell

AzureCLI

●接続 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から行うことになります

[画像]

Pocket

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です