概要
Azure WebAppsにLaravel9系アプリをデプロイする。
自分用のメモ書きなので責任はとれません。
前提
Azure WebAppsの発行モデルはコード。
php8.1系
webサーバはnginx
デプロイフォルダは/home/site/wwwroot/webapp/
とする。
アプリ側で対応すること
nginxの設定ファイルを更新
デフォルトではドキュメントルートが以下
/home/site/wwwroot/
Laravelで設定すべきドキュメントルートは以下であり、デフォルト設定では動作しない。
<project-root>/public
WebAppsはコンテナで動作しているため、CloudShellで設定ファイルを変更しても永続化されない。
そのため、スタートアップスクリプトであらかじめ編集しておいた設定ファイルを置き換える。
cp /home/site/wwwroot/webapp/server_resource/nginx/default /etc/nginx/site-available/default
設定ファイル内容は以下とし、<project-root>/server_resource/nginx
配下に保存しておく。
内容は、WebAppsのコンテナ起動時のnginxの設定ファイルとLaravelのドキュメントの設定ファイルを参考にした。
参考:Laravel 9.x デプロイ - サーバ設定
server {
#proxy_cache cache;
#proxy_cache_valid 200 1s;
listen 8080;
listen [::]:8080;
root /home/site/wwwroot/webapp/public;
add_header X-Frame-Options "SAMEORIGIN";
add_header X-Content-Type-Options "nosniff";
index index.php index.html index.htm;
server_name example.com www.example.com;
port_in_redirect off;
index index.php;
charset utf-8;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location = /favicon.ico { access_log off; log_not_found off; }
location = /robots.txt { access_log off; log_not_found off; }
error_page 404 /index.php;
# Disable .git directory
location ~ /\.git {
deny all;
access_log off;
log_not_found off;
}
location ~ /\.(?!well-known).* {
deny all;
}
# Add locations of phpmyadmin here.
location ~ [^/]\.php(/|$) {
fastcgi_split_path_info ^(.+?\.php)(|/.*)$;
fastcgi_pass 127.0.0.1:9000;
include fastcgi_params;
fastcgi_param HTTP_PROXY "";
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_param QUERY_STRING $query_string;
fastcgi_intercept_errors on;
fastcgi_connect_timeout 300;
fastcgi_send_timeout 3600;
fastcgi_read_timeout 3600;
fastcgi_buffer_size 128k;
fastcgi_buffers 4 256k;
fastcgi_busy_buffers_size 256k;
fastcgi_temp_file_write_size 256k;
}
}
コンテナ起動時用のスクリプトを作成する
先述のnginx設定ファイルの置き換えの他、実行すべきコマンドがあるのでスクリプトにする
今回は、<project-root>/server_resource/startup.sh
とする。
#!/bin/bash
# デプロイフォルダに移動
cd /home/site/wwwroot/webapp
# オートロード再実行
php composer.phar dump-autoload
# nginx設定ファイルを置き換え
cp /home/site/wwwroot/webapp/server_resource/nginx/default /etc/nginx/sites-available/default
# nginxの設定ファイル再読み込み
service nginx reload
AppServiceProvider.phpに追記
★要検証
初期設定だとpublic配下のリソースがhttpでリクエストされエラーとなる。
AppServiceProvider.phpのboot()に以下追記する。
if (App::environment(['production'])) {
URL::forceScheme('https');
}
WebApps側で設定すること
ftpsの接続情報を取得
デプロイセンター→FTPSの資格情報 で取得可能。
アプリケーションスコープとユーザスコープの差異は理解していない。
スタートアップコマンド設定
以下を設定する
/home/site/wwwroot/server_resource/startup.sh
デプロイ
WinsSCPやIDEの機能でFTPSを利用してアプリをデプロイする。
npmやcomposerのパッケージはすべて導入しておく。
アセットのビルドもしておく。
TODO: storage配下の扱い
ftpsで接続が切断される
大量のデータを送信したからなのか、切断されるのでazure cliを利用する
# 認証
az login
# デプロイ
az webapp deploy --resource-group <group-name> --name <app-name> --src-path <zip-package-path>
あとがき
残
Application Insightでログを収集できるようにアプリの改修。