LoginSignup
0
0

More than 1 year has passed since last update.

Azure WebAppsにLaravel9のアプリをデプロイする

Last updated at Posted at 2023-01-14

概要

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の資格情報 で取得可能。
アプリケーションスコープとユーザスコープの差異は理解していない。
image.png

スタートアップコマンド設定

以下を設定する

/home/site/wwwroot/server_resource/startup.sh

image.png

デプロイ

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でログを収集できるようにアプリの改修。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0