【问题标题】:How to deploy a NodeJs app to azure web app如何将 NodeJs 应用程序部署到 azure Web 应用程序
【发布时间】:2019-01-21 05:07:40
【问题描述】:

我被分配了一项任务,将 nodejs 应用程序部署到 azure web 应用程序,但是我无法让它工作。

我按照link 的说明进行操作,一切似乎都很简单。

唯一的区别是我的 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,因为根据link kudu 将尝试根据您的 package.json 为您生成一个,但它仍然没有工作。

我知道我做错了什么,谁能指出我正确的方向。

另外,如何在 azure Web 应用程序中调用“npm install”?

是的,当被“npm start”调用时,它在本地工作

【问题讨论】:

    标签: node.js azure azure-devops web-config azure-web-app-service


    【解决方案1】:

    我能够解决这个问题,现在能够成功地将我的 nodejs 应用程序部署到 azure Web 应用程序。

    一些关键点帮助我解决了这个问题,因为 Iam 知道 kudu 部署,所以我不太熟悉。

    1. 您可以通过以下方式获取 kudu 日志文件 https://{site}.scm.azurewebsites.net/ > 工具选项卡 > 诊断转储

    2. 在下面网站的“总体流程”部分下,您将看到 kudu 流程的工作原理。这个链接也帮助我了解了 kudu 过程。 https://blog.lifeishao.com/2017/03/24/custom-nodejs-deployment-on-azure-web-app/

    3. 在同步应用程序、清理文件并将文件复制到目标文件夹后,kudu 将尝试生成 web.config。 在我们的例子中,.js 位于私有节点模块之一中,因此它需要在 kudu 生成 web.config 之前存在。

    4. 还建议您创建自己的 deploy.cmd,以便您能够控制部署步骤。您也可以参考此链接了解更多信息。 https://github.com/projectkudu/kudu/wiki/Custom-Deployment-Script#custom-deployment-script-generator

    5. 如果您使用私有模块部署应用程序,您可以参考此链接获取指南。 https://www.jeff.wilcox.name/2017/02/azure-private-npm/ 此外,在执行 npm install 时明确指出注册表,即使您的本地文件夹中已经有 .npmrc。

    6. 最后,如果您在 Azure Devops 中使用 Azure Service App 部署进行部署,请不要让它为您生成 web.config,而是让 kudu 生成它。

    【讨论】:

      【解决方案2】:

      Azure Web 应用程序在检测到推送请求中的 package.json 文件时调用“npm install”。它安装“依赖项”中列出的软件包。

      但是,它并不完美。我的一个项目需要 SQLite,但它没有安装。我通过在本地安装所有包然后使用本地 Git 将整个“node_modules”文件夹推送到 Azure 来解决这个问题

      我不建议将“sample_service.js”放入“node_modules”,因为该文件夹是由 npm 根据“package.json”中列出的依赖项创建和修改的。尝试将“sample_services.js”放置在“node_modules”之外但与“node_modules”相同的文件夹中。

      如果“sample_services.js”是后端 Javascript 服务器,您需要在部署时将其重命名为“server.js”或“app.js”,因为naming restrictions。在“package.json”中将其指定为“main”,以便 Azure 将其作为 Windows Powershell 中的“node server.js”运行,以启动后端并在“server.js”中包含以下代码:

      const port = process.env.PORT || 3000; 
      

      生成的“package.json”文件应如下所示:

      {
        "name": "myProject",
        "version": "1.0.0",
        "engines": {
          "node": "8.10.0",
          "npm": "5.6.0"
        },
        "description": "Project X",
        "main": "server.js",
        "scripts": {
          "test": "echo \"Error: no test specified\" && exit 1",
          "start": "node server.js"
        },
        "author": "me",
        "license": "ISC",
        "dependencies": {
          "express": "4.16.3",
          "sqlite3": "4.0.2"
        }
      }
      

      Azure 会自动选择要使用的 Node.js 和 npm 版本。如果您有兼容性问题,请像我一样指定 Node.js 和 npm 的版本

      此外,如果您像我在之前的项目中那样使用 Express 进行路由,“server.js”中的这段代码会运行以加载默认的 onload HTML 页面:

      app.get('/', function(req,res){
          console.log('default html loading');
          res.render('./public/index.html');
      });
      

      同样,由于相同的命名限制,我将我的主 HTML 页面命名为 index.html

      如果您想试用完整示例或比较代码,我发现本指南很有帮助:https://www.codeproject.com/Articles/1133660/Deploy-Node-js-in-Microsoft-Azure

      干杯!

      【讨论】:

      • 感谢您的意见!它让我更深入地解决了我的问题。
      • 很高兴能帮上忙 :)
      猜你喜欢
      • 2022-06-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-21
      • 1970-01-01
      • 2018-01-19
      相关资源
      最近更新 更多