如何在Azure App Service上运行Node.js应用程序?

时间:2018-10-01 16:42:11

标签: node.js azure azure-web-sites

我正在尝试在Azure应用服务(Linux)上运行最简单的node.js应用,但是我对如何使它运行不了解。我一直在尝试不同的方法,但似乎没有任何效果。

我只是通过FTP部署应用程序,然后将文件放在“ wwwroot”下,但是当请求url时,它将永久加载,然后最终导致服务不可用。

在创建应用程序时,我选择Linux作为平台,运行时为node.js 8.11,并通过“代码”而不是docker进行部署。

在日志中,我可以看到:

docker run -d -p 46852:8080 --name [appname] -e WEBSITE_NODE_DEFAULT_VERSION=8.11 -e APPSETTING_WEBSITE_NODE_DEFAULT_VERSION=8.11 -e WEBSITE_SITE_NAME=[appname] -e WEBSITE_AUTH_ENABLED=False -e WEBSITE_ROLE_INSTANCE_ID=0 -e WEBSITE_INSTANCE_ID=[id] -e HTTP_LOGGING_ENABLED=1 appsvc/node:8.11.2_1805212105

Container [appname] for site [appname] did not start within expected time limit. Elapsed time = 230.4882261 sec

这是什么意思,即使我通过“代码”和FTP部署了部署应用程序,仍以某种方式使用了Docker。

package.json

{
  "name": "foo",
  "version": "1.0.0",
  "description": "x",
  "author": "x",
  "private": true,
  "scripts": {
    "start": "node server.js"
  },
  "dependencies": {
    "express": "^4.16.3"
  }
}

server.js

const express = require('express')
const app = express()

const port = process.env.PORT || 3000
const host = process.env.HOST || '127.0.0.1'

app.get('/', (req, res) => res.send('Hello!'))

app.listen(port, host)

我还尝试了ssh进入应用程序并运行npm install。我尝试通过ssh控制台node server.js运行该应用程序,但最终显示消息“端口已在使用中”。我曾尝试在Azure Portal的“应用程序设置”中将端口设置为8080。

我在这里想念什么?如何使应用程序运行?

2 个答案:

答案 0 :(得分:1)

首先,最好知道您如何精确地创建应用程序(使用的工具,采取的步骤等)。总体而言,需要了解的主要内容-Azure应用服务默认情况下即使用后即不使用Node.js.若要指定主机将运行Node应用程序,需要设置“ WEBSITE_NODE_DEFAULT_VERSION”参数(在Azure App Service的“应用程序设置”刀片中)。完成后,您可以使用任何可用选项进行部署(使用发布功能,本地git,使用Azure DevOps等)。 Here is a good topic to start with。 直截了当:

  • 安装Azure CLI
  • 登录到Azure(az登录)
  • az帐户显示(以查看您是否在正确的订阅下,以防万一)。如有必要,请使用“ az account set”进行切换
  • 然后,根据此说明,创建资源组,服务计划和Web应用程序。设置Node.js运行时
  • 压缩您的应用程序(按照说明使用Bash或PS)
  • 在App Service中,使用Kudu控制台部署(压缩)应用程序(“开发工具->高级工具”刀片,从下拉菜单中选择“工具-> Zip Push Deploy”)
  • 查看结果。

答案 1 :(得分:1)

在我的站点中,我只是做app.listen(process.env.port);-没有host参数。并尝试做npm start

还要检查web.configiisnode.yml,它们是自动生成的,并且都是运行Node所必需的。