首页 > 解决方案 > 将简单的 Express 应用部署到 Azure 应用服务

问题描述

我有一个非常简单的 Node/Express 应用程序,我试图在 Azure 应用程序服务中运行它。它的唯一目的是让我通过使用 Git 和 Azure Devops 逐步扩展应用程序来学习。

我已经被困住了。

我有一个本地文件夹“node-starter”,里面有我的 app.js、package.json、node-modules(包括 Express)等等。app.js 非常简单:

const express = require("express")

const app = express()

app.get("/", (req, res) => {
    res.send({
        "first": "jason",
        "last": "bourne"
    })
})

app.listen(3000,()=> {
    console.log("server running....")
})

我的 package.json 也很简单:

{
  "name": "node-starter",
  "version": "1.0.0",
  "description": "simple node and express app to test azure deployments",
  "main": "app.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1",
    "start": "node app.js"
  },
  "author": "",
  "license": "ISC",
  "devDependencies": {
    "express": "^4.17.1"
  }
}

当我使用 npm start 脚本在本地运行此应用程序时,应用程序会运行,我可以在 localhost 的 3000 端口上获得 json 响应。非常简单并且在本地完美运行。

然后我要做的是:

  1. 为这个简单的项目设置一个 Azure Devlop 项目和 repo,我称之为“node-simple”。
  2. 然后,我将我的 node-starter 文件夹的全部内容推送到该 repo 并目视检查所有内容是否存在并且看起来很好。确实如此。
  3. 然后我转到 Azure 应用程序并创建一个新的 Web 应用程序。我选择了一台免费的 Linux 机器,完成了设置应用程序的业务,然后去“部署中心”。
  4. 在部署中心,我告诉它在哪里可以找到代码仓库(在 Azure Devops 中),向导会找到它并允许我选择它。
  5. 我能够提供启动命令 (npm start) 和 Node 版本 (12 LTS) 等信息。然后我部署它,大约一分钟左右后,我收到一条消息说一切都成功了。
  6. 然后我回到 Azure Devops 项目,可以在管道中看到已经构建和发布到生产环境。所以,一切看起来都很好。没有错误。

但是,当我随后浏览到 App servive 提供的 URL 时,我通常会收到应用程序错误 503。当我单击链接以获取更多信息时,我会被带到一个空白的 Azure 帮助屏幕。只是三个闪烁的蓝色圆圈,永远不会发生任何事情。

可能出了什么问题?一切看起来都像它的设置和部署正常,应用程序一旦部署似乎就无法工作。它必须是简单的,对吧?

几个问题,如果允许的话:

  1. 在 app.js 中,我指定了端口 3000,这似乎是 Express 的默认端口。这是否意味着我需要将“:3000”附加到 Azure 提供的 URL,或者 Azure 是否知道代理该​​端口?
  2. 经过多次点击后,我在 Azure 中为该应用程序(Kudo)找到了一个 Bash shell。当我连接到它时,我看到我的应用程序代码似乎已部署到站点/wwwroot。我可以在那里看到我的文件和 app.js。我尝试在那里运行“npm start”,但还是不行。我尝试了一个“npm i”来尝试解决任何依赖问题 - 仍然没有好处。

我还尝试使用 VSCode 插件部署应用程序并得到完全相同的结果。请让我摆脱痛苦,告诉我哪里可能出错了。请。

标签: node.jsazureexpress

解决方案


只有端口 80 和 443 对 Web 应用程序开放。您应该将侦听端口更改为process.env.PORT.

const port = process.env.PORT;
app.listen(port);

推荐阅读