You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Azure Node.js Web App基于GitHub CI/CD部署过慢问题求助

加速Next.js应用部署至Azure Web App Service的方案

当前我的Next.js应用通过GitHub Actions CI/CD流水线部署到Azure Web App Service总耗时30分钟,其中构建阶段仅3分20秒,但部署阶段耗时高达26分37秒。此前直接用PM2部署到VM时速度极快,现寻求优化Azure部署速度的可行方案。

当前流水线配置如下:

name: Build and deploy Node.js app to Azure Web App - name

on:
  push:
    branches:
      - staging
  workflow_dispatch:

jobs:
  build:
    runs-on: ubuntu-latest

    env:
      NEXT_PUBLIC_HOST: ${{ secrets.NEXT_PUBLIC_HOST }}
      NEXT_PUBLIC_REDIRECT_URL: ${{ secrets.NEXT_PUBLIC_REDIRECT_URL }}

    steps:
      - uses: actions/checkout@v4

      - name: Set up Node.js version
        uses: actions/setup-node@v3
        with:
          node-version: '20.x'

      - name: npm install, build, and test
        run: |
          npm install
          npm run build
      - name: Zip artifact for deployment
        run: zip -r release.zip .next/ * -x "*.git*"
            
      - name: Upload artifact for deployment job
        uses: actions/upload-artifact@v3
        with:
          name: node-app
          path: release.zip

  deploy:
    runs-on: ubuntu-latest
    needs: build
    environment:
      name: 'Production'
      url: ${{ steps.deploy-to-webapp.outputs.webapp-url }}

    steps:
      - name: Download artifact from build job
        uses: actions/download-artifact@v3
        with:
          name: node-app

      - name: Unzip artifact for deployment
        run: unzip release.zip

      - name: 'Deploy to Azure Web App'
        id: deploy-to-webapp
        uses: azure/webapps-deploy@v2
        with:
          app-name: 'nextstaging'
          slot-name: 'Production'
          publish-profile: ${{ secrets.AZUREAPPSERVICE_PUBLISHPROFILE_F1C1 }}
          package: .

可行优化方案

1. 缩小部署包体积

  • 修改打包命令,只包含Next.js部署必需的文件(.next/、package.json、package-lock.json、next.config.js等),排除无需部署的文件(如node_modules、日志、临时文件):
    zip -r release.zip .next/ package.json package-lock.json next.config.js
    
  • node_modules无需提前打包,Azure Web App可自动安装依赖(需确保应用设置配置正确),能大幅降低包体积。

2. 启用WEBSITE_RUN_FROM_PACKAGE

在Azure门户的应用设置中添加WEBSITE_RUN_FROM_PACKAGE=1,让Azure直接从压缩包运行应用,跳过解压步骤,大幅缩短部署时间。

3. 优化GitHub Actions部署步骤

  • 移除手动解压步骤,直接将压缩包传递给azure/webapps-deploy,减少本地操作耗时:
    - name: 'Deploy to Azure Web App'
      id: deploy-to-webapp
      uses: azure/webapps-deploy@v2
      with:
        app-name: 'nextstaging'
        slot-name: 'Production'
        publish-profile: ${{ secrets.AZUREAPPSERVICE_PUBLISHPROFILE_F1C1 }}
        package: release.zip
    

4. 使用部署槽位预热+交换

  • 先部署到staging槽位,完成预热后再交换到Production槽位,交换操作几乎瞬时完成,避免直接部署到生产槽的长时间等待:
    - name: 'Deploy to staging slot'
      id: deploy-to-staging
      uses: azure/webapps-deploy@v2
      with:
        app-name: 'nextstaging'
        slot-name: 'staging'
        publish-profile: ${{ secrets.AZUREAPPSERVICE_PUBLISHPROFILE_F1C1 }}
        package: release.zip
    
    - name: 'Swap to Production slot'
      uses: azure/webapps-deploy@v2
      with:
        app-name: 'nextstaging'
        slot-name: 'Production'
        publish-profile: ${{ secrets.AZUREAPPSERVICE_PUBLISHPROFILE_F1C1 }}
        action: swap
    

5. 升级Azure Web App服务计划

若当前使用免费层(如F1)或基础层,资源限制会导致部署速度缓慢。升级到标准层(如S1)及以上,获得更多CPU、内存资源,能显著提升部署和启动效率。

6. 缓存依赖(辅助优化)

在构建阶段添加node_modules缓存,减少npm install耗时(虽构建阶段已较快,但可进一步优化整体流水线):

- name: Cache node modules
  uses: actions/cache@v3
  with:
    path: ~/.npm
    key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }}
    restore-keys: |
      ${{ runner.os }}-node-

内容的提问来源于stack exchange,提问作者Sidharth kaushik

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 15:47:34