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

使用GitHub Actions部署Node.js到Azure遇资源未找到及端口探测失败问题

Node.js应用部署Azure后启动失败(端口探测超时)的排查与修复

问题描述

通过GitHub Actions将Node.js应用部署至Azure平台,部署流程显示成功,但访问应用URL时出现“application error”提示;点击“diagnostic resources.”链接后显示“Resource Not Found”错误;日志流中出现以下关键错误:

Container mongez-api__04d6 didn't respond to HTTP pings on port: 8080, failing site start. See container logs for debugging

现有配置

package.json scripts:

"scripts": {
  "build": "rimraf build && node esbuild.config.mjs",
  "start": "node build/index.cjs"
},

GitHub Actions工作流:

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

on:
  push:
    branches:
      - main
  workflow_dispatch:

jobs:
  build:
    runs-on: ubuntu-latest

    steps:
      - uses: actions/checkout@v4

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

      - name: npm install, build, and test
        run: |
          npm install
          npm run build --if-present
          npm run test --if-present

      - name: Zip artifact for deployment
        run: zip release.zip ./* -r

      - name: Upload artifact for deployment job
        uses: actions/upload-artifact@v4
        with:
          name: node-app
          path: release.zip

  deploy:
    runs-on: ubuntu-latest
    needs: build
    environment:
      name: 'dev'
      url: ${{ steps.deploy-to-webapp.outputs.webapp-url }}
    
    steps:
      - name: Download artifact from build job
        uses: actions/download-artifact@v4
        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@v3
        with:
          app-name: 'mongez-api'
          slot-name: 'dev'
          package: .
          publish-profile: ${{ secrets.AZUREAPPSERVICE_PUBLISHPROFILE_2AC3E6F38101424C8DEE01C88E4C81E8 }}

核心问题分析

Azure Web App会向容器的指定端口发送HTTP探测请求,若应用未在该端口监听、启动延迟超过阈值,或部署包存在问题,都会触发探测失败导致站点无法启动。默认探测端口为8080,需从端口绑定、部署完整性、启动配置三方面排查。

修复步骤

1. 确保应用监听正确端口

检查Node.js应用代码,确认服务器实例(如Express、Koa)监听的端口为process.env.PORT || 8080——Azure会自动注入PORT环境变量,硬编码其他端口会导致探测失败。

示例修正(Express为例):

const port = process.env.PORT || 8080;
app.listen(port, () => {
  console.log(`Server running on port ${port}`);
});

2. 优化部署包与依赖安装

当前打包命令会将node_modules一起压缩,跨环境的依赖可能引发兼容性问题。推荐两种优化方式:

方式一:部署阶段安装生产依赖

修改GitHub Actions的deploy步骤,在解压后重新安装生产依赖:

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

- name: Install production dependencies
  run: npm ci --only=production

- name: 'Deploy to Azure Web App'
  id: deploy-to-webapp
  uses: azure/webapps-deploy@v3
  with:
    app-name: 'mongez-api'
    slot-name: 'dev'
    package: .
    publish-profile: ${{ secrets.AZUREAPPSERVICE_PUBLISHPROFILE_2AC3E6F38101424C8DEE01C88E4C81E8 }}

方式二:只打包必要文件

修改build阶段的zip命令,排除node_modules,仅打包核心文件:

zip release.zip package.json package-lock.json build/ -r

3. 手动配置Azure启动命令(可选)

若Azure未自动识别start脚本,可在Azure门户手动设置:
进入Web App → 配置 → 常规设置,将启动命令设置为:

npm start

4. 调整启动探测超时时间

若应用启动较慢,可延长探测超时:
进入Web App → 配置 → 容器设置,修改启动探测的超时时间(如从20秒调整为60秒),给应用足够的启动缓冲。

5. 查看容器日志定位细节

通过Azure门户的Web App → 日志 → 日志流,或运行以下Azure CLI命令查看容器启动日志,排查代码错误、依赖缺失等问题:

az webapp log tail --name mongez-api --resource-group <你的资源组名称>

内容的提问来源于stack exchange,提问作者Ahmed Abdelrahman

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 22:53:10