node.js - 如何将 NodeJs 应用程序部署到 azure Web 应用程序
问题描述
我被赋予了将 nodejs 应用程序部署到 azure web 应用程序的任务,但是我无法让它工作。
我按照此链接中的说明进行操作,一切似乎都非常简单。
唯一的区别是我的 package.json 启动脚本如下所示。
"scripts": {
"start": "node ./node_modules/@samplescope/samplefolder/sample_service.js"
},
在说明链接的示例源代码中,它有一个指向 server.js 的 web.config,所以我将该部分修改为我的启动文件的位置,即“./node_modules/@samplescope/samplefolder/sample_service. js"
由此
<rule name="DynamicContent">
<match url="/*" />
<action type="Rewrite" url="server.js"/>
</rule>
像这样
<rule name="DynamicContent">
<match url="/*" />
<action type="Rewrite" url="./node_modules/@samplescope/samplefolder/sample_service.js"/>
</rule>
我还尝试删除我创建的 web.config,因为根据此链接, kudu 将尝试根据您的 package.json 为您生成一个,但仍然无法正常工作。
我知道我做错了什么,有人可以指出我正确的方向。
此外,如何在 azure Web 应用程序中调用“npm install”?
是的,它在被“npm start”调用时在本地工作
解决方案
我能够解决这个问题,现在能够成功地将我的 nodejs 应用程序部署到 azure web 应用程序。
一些关键点帮助我解决了这个问题,因为 Iam 知道 kudu 部署,所以我不太熟悉它。
您可以通过 https://{site}.scm.azurewebsites.net/ > 工具选项卡 > 诊断转储获取 kudu 日志文件
在下面网站的“总体流程”部分下,您将看到 kudu 流程的工作原理。这个链接也帮助我了解了 kudu 过程。 https://blog.lifeishao.com/2017/03/24/custom-nodejs-deployment-on-azure-web-app/
在同步应用程序、清理文件并将文件复制到目标文件夹后,kudu 将尝试生成 web.config。在我们的例子中,.js 位于私有节点模块之一中,因此它需要在 kudu 生成 web.config 之前存在。
还建议您创建自己的 deploy.cmd,以便您能够控制部署步骤。您也可以参考此链接了解更多信息。 https://github.com/projectkudu/kudu/wiki/Custom-Deployment-Script#custom-deployment-script-generator
如果您要部署带有私有模块的应用程序,您可以参考此链接获取指南。 https://www.jeff.wilcox.name/2017/02/azure-private-npm/ 此外,在执行 npm install 时明确指出注册表,即使您的本地文件夹中已经有 .npmrc 也是如此。
最后,如果您在 Azure Devops 中使用 Azure Service App 部署进行部署,请不要让它为您生成 web.config,而是让 kudu 生成它。
推荐阅读
- maven - Maven - 能够运行一组测试但不能运行单个测试
- php - 绕过用户输入从 PFX 证书转换为单独的 PEM 文件
- sql - 按年龄范围(“30 岁以下”-“30 - 39”...)按客户数量分组,按他们使用 Oracle SQL 购买的产品分组
- android - Android Studio 4.2 分析代码需要很长时间
- windows - Npsql 在 Windows 托管的 postgres 时间刻度服务器上超时二进制导入(COPY 二进制)
- r - 如何根据数字天值添加月份列
- python - TensorFlow 中的逐行相关
- python - Django 过滤器。什么更有效 - .filter(date__range) 或 .all() 并通过 Python 过滤
- python - 使用谷歌云Text2Speech时如何选择复音字(中文)的读音?
- asp.net-core - MassTransit ISendEndpoint.Send method doesn't throw exception when RabbitMQ is unreachable