使用 PM2 在 Azure 应用服务 Linux 上运行的 Node.js 和 Express 应用程序仅在端口 8080 上运行

问题描述 投票:0回答:1

我尝试在运行简单 Node.js/Express 应用程序的 Azure 应用服务 Linux 上使用 PM2。 PM2的配置文件是这样的:

module.exports = {
  apps: [
    {
      name: "myapi",
      script: "./src/index.js",
      env: {
        NODE_ENV: "development",
        PORT: 3000,
      },
      env_test: {
        NODE_ENV: "test",
        PORT: 8081,
      },
      env_production: {
        NODE_ENV: "production",
        PORT: 8080,
      }
    }
  ]
};

启动命令就像

pm2-runtime start ecosystem.config.js --env test

部署良好。但我只能使用 PORT = 8080。如果我使用端口 8081,我会收到 504 网关超时错误。

可能是什么问题?

azure-web-app-service pm2
1个回答
0
投票

默认情况下,Azure Web Apps 仅允许端口

80
(HTTP) 和
443
(HTTPS) 上的外部访问。在 Azure Linux Web 应用上,容器通常在
port 8080
上内部运行。

无法在 Azure Web 应用程序中公开多个端口以供外部访问。

我使用 PM2 创建了一个示例 Node.js Express 应用程序并将其部署到 Azure 应用服务 (Linux)。

应用程序应配置为侦听

process.env.PORT
指定的端口,以与 Azure 的端口路由兼容。

以下是nodejs应用程序的完整代码。

ecosystem.config.js:

module.exports = {
    apps: [
      {
        name: "myapi",
        script: "./src/index.js",
        env: {
          NODE_ENV: "development",
          PORT: 3000, 
        },
        env_test: {
          NODE_ENV: "test",
          PORT: process.env.PORT || 8080, 
        },
        env_production: {
          NODE_ENV: "production",
          PORT: process.env.PORT || 8080, 
        }
      }
    ]
  }; 

index.js:

const express = require('express');
const app = express();
app.get('/', (req, res) => {
  res.send('Hello World!');
});
const port = process.env.PORT || 8080;
app.listen(port, () => {
  console.log(`Server is running on port ${port}`);
});

我在 package.json 中使用了以下启动脚本:

"scripts": {
"start": "pm2-runtime start ecosystem.config.js"
},

我设置启动命令如下所示。

enter image description here

enter image description here

Azure 输出

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.