しばやん雑記

Azure とメイドさんが大好きなフリーランスのプログラマーのブログ

App Service on Linux 向けに独自の Runtime Stack を作成する

前に書いた /home のマウントがカスタムイメージの時だけ狂うバグが修正されたようです。ちゃんとコンテナ内の /home がファイルサーバー上の正しいパスにマウントされるようになりました。

バグでカスタムランタイムが作りにくいと書いてましたが、Built-in と同じように作れるようになりました。

早速 Built-in の PHP 7 と同じように扱える nginx + php7 な Runtime Stack を作成しました。ビルドに必要なファイルは全て GitHub で公開しています。

これまでブログに書いてきたように nginx と php-fpm を supervisor で実行する形です。

Docker Hub に shibayan/appsvc-php7-nginx という名前でイメージを公開しているので、App Service on Linux の設定から指定すると使えます。

f:id:shiba-yan:20170116005902p:plain

このイメージで新しく Web App on Linux を作成すると、デフォルトで作成されている hostingstart.html が表示されています。作成したイメージから /home がちゃんと見えていることが分かります。

f:id:shiba-yan:20170116011250p:plain

とりあえず phpinfo を表示してみます。Web App に LocalGit を追加して index.php を追加します。

f:id:shiba-yan:20170116011639p:plain

デプロイ完了後、リロードすると phpinfo が表示されるようになります。Server API が FPM/FastCGI なので、Apache が使われている Built-in のイメージとは異なっていることが分かります。

f:id:shiba-yan:20170116011713p:plain

/home/site/wwwroot にあるコンテンツを共有するので、これまでの Web App と全く同じように Git を使ったデプロイを使いつつ、独自の Runtime Stack を用意して実行することが出来るようになりました。

環境の構築は Docker Image を使うのがかなり楽なので、必要な PHP の extensions などがあればデフォルトのイメージをベースにすると、カスタマイズが簡単に出来ます。

Built-in イメージを使って拡張する

App Service on Linux で使われているイメージは Docker Hub で公開されています。

https://hub.docker.com/u/appsvc/

PHP 7 のイメージに対してカスタマイズしたい場合には、FROM に指定してビルドすれば問題ないです。

FROM appsvc/php-7.0

# 何かする

イメージを作成してしまえば、Docker Hub などに公開すれば App Service で使えるようになります。

Runtime Stack の作り方

完全に真っ新な状態から独自の Runtime Stack を作成する場合、基本的には wwwroot をドキュメントルートとして扱うように Dockerfile を書くだけです。nginx の場合は以下のように書いています。

RUN rm -rf /var/www/html \
    && ln -s /home/site/wwwroot /var/www/html

EXPOSE 80

nginx の設定で /var/www/html をドキュメントルートにして、実体は共有されている wwwroot のシンボリックリンクとしています。ポートはデフォルトでは 80 になっているので、EXPOSE しておきます。

ログは /home/LogFiles 以下に書き出すようにすれば永続化されます。割とシンプルに実装できます。

Windows の場合は Site Extensions を使って無理やりランタイムをインストールしていましたが、Docker を使う方が筋が良いですね。Windows Server Containers 対応を待ってます。