我尝试在运行简单 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 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"
},
我设置启动命令如下所示。
Azure 输出: