Azure App Service で反応する

9009 ワード

概要



この記事では、Azure App Service にデプロイされた React アプリの実験について共有したいと思います. 1) node_modules を含むルート フォルダー、2) スタートアップ コマンドを含むビルド フォルダーの 2 つのパターンが正しく機能します.起動コマンドは、Azure App Service にデプロイされている zip フォルダー構造に応じて慎重に選択する必要があります.

コードサンプル
  • azuredeploy.json
  • react-pipeline.yml
  • frontend

  • React on App Service デプロイ実験



    目次


  • Successful configuration

  • Experiments
  • Responses
  • Run from files or ZIP package
  • Deployed folder inside App Service
  • Results: Root folder
  • Results: Build folder


  • これは、起動コマンド root と appsettings build をセットアップします.この背後にある理由については、この記事の後半で説明します.

    .
    ├── README.md
    ├── package-lock.json
    ├── package.json
    ├── public
    │   ├── favicon.ico
    │   ├── index.html
    │   ├── logo192.png
    │   ├── logo512.png
    │   ├── manifest.json
    │   └── robots.txt
    ├── src
    │   ├── App.css
    │   ├── App.test.tsx
    │   ├── App.tsx
    │   ├── index.css
    │   ├── index.tsx
    │   ├── logo.svg
    │   ├── react-app-env.d.ts
    │   ├── reportWebVitals.ts
    │   └── setupTests.ts
    └── tsconfig.json
    


    構成の成功

    The contents below show how you configure React and Azure App Service to make it work correctly.

    アップロードしたフォルダ

    npm run build is React root folder. npm install -g serve && serve -s . is generated with "WEBSITE_RUN_FROM_PACKAGE":"1" for React app.

    root

    .
    ├── node_modules
    ├── README.md
    ├── package-lock.json
    ├── package.json
    ├── public
    │   ├── favicon.ico
    │   ├── index.html
    │   ├── logo192.png
    │   ├── logo512.png
    │   ├── manifest.json
    │   └── robots.txt
    ├── src
    │   ├── App.css
    │   ├── App.test.tsx
    │   ├── App.tsx
    │   ├── index.css
    │   ├── index.tsx
    │   ├── logo.svg
    │   ├── react-app-env.d.ts
    │   ├── reportWebVitals.ts
    │   └── setupTests.ts
    └── tsconfig.json
    

    root + node_modules

    upload.zip
    ├── asset-manifest.json
    ├── favicon.ico
    ├── index.html
    ├── logo192.png
    ├── logo512.png
    ├── manifest.json
    ├── robots.txt
    └── static
        ├── css
        │   ├── main.073c9b0a.css
        │   └── main.073c9b0a.css.map
        ├── js
        │   ├── 787.9750ae9a.chunk.js
        │   ├── 787.9750ae9a.chunk.js.map
        │   ├── main.e0162b9f.js
        │   ├── main.e0162b9f.js.LICENSE.txt
        │   └── main.e0162b9f.js.map
        └── media
            └── logo.6ce24c58023cc2f8fd88fe9d219db6c6.svg
    

    build

    {
      "type": "Microsoft.Web/sites",
      "kind": "app",
      "properties": {
        "siteConfig": {
          "linuxFxVersion": "NODE|16-lts",
          "appCommandLine": "npm install -g serve && serve -s ."
        }
      }
    },
    {
      "type": "Microsoft.Web/sites/config",
      "properties": {
        "WEBSITE_RUN_FROM_PACKAGE":"1"
      }
    }
    


    ノード開発者の皆さん! (hostingstart.html)



    404



    成功

    You can see the sample

    ARM テンプレートのサンプル 起動コマンドと WEBSITE_RUN_FROM_PACKAGE

    In this chapter, I am trying describe what trials I did and what were those results.

    反応

    Application Error



    WEBSITE_RUN_FROM_PACKAGE=1



    実験

    When you set appsettings WEBSITE_RUN_FROM_PACKAGE=1 , the uploaded zip file and packagename.txt are generated. When you update the deployment source, zip files are added but packagename.txt is updated so it points to the newest zip file.

    home
    └── Data
        └── SitePackages
            ├── 20220110085830.zip
            ├── 20220110094211.zip
            ├── 20220110100120.zip
            ├── 20220110100833.zip
            └── packagename.txt
    

    packagename.txt

    20220110100833.zip
    


    Azure App Service の起動コマンドとして npm install を設定すると、node_module のないルート フォルダーが機能することを期待していました.しかし、うまくいきませんでした. npm installnpm install && npm start を試しましたが、どちらも機能しませんでした.唯一の方法は、node_modules フォルダーと共にデ​​プロイすることです.通常、node_modules フォルダーは大きいため、デプロイとしてアップロードしたくありません.したがって、ルート フォルダーを展開することは、ワークフローとしての実際のオプションではありません.

    実験: ルート フォルダー

    Red mark means newly added after deployment. Deployment is done through Azure CLI.

    Azure CLI Powershell command example

    az webapp config appsettings set --resource-group {Resource Group name} --name {App Service name} --settings WEBSITE_RUN_FROM_PACKAGE="1"
    az webapp deployment source config-zip --resource-group {Resource Group name} --name {App Service name} --src .\upload.zip
    

    WEBSITE_RUN_FROM_PACKAGE=0



    この実験では、upload.zip フォルダーを作成し、CLI コマンドで Azure App Service にデプロイします. upload.zip には、upload.zip レベルの直下に index.html が含まれます.したがって、serve -s . は正しく機能します. serve -s build のようには機能しません.また、スタックオーバーフロー から、 pm2 serve /home/site/wwwroot --no-daemon --spa はスタートアップコマンドでも機能します.

    起動コマンドを設定しないと、「Hey, Node Developers!」と表示されます. /opt/startup/hostingstart.html を指しているためです.

    opt
    ├── startup
    │   └── hostingstart.html
    home
    └── site
        └── wwwroot
            └── hostingstart.html