簡體   English   中英

如何將NodeJs應用程序部署到Azure Web應用程序

[英]How to deploy a NodeJs app to azure web app

我被賦予了將Node.js應用程序部署到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部署了解的一些關鍵點可以幫助我解決該問題,因此我對此並不熟悉。

  1. 您可以通過https:// {site} .scm.azurewebsites.net />“工具”標簽>“診斷轉儲”來獲取kudu日志文件。

  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/另外,即使在本地文件夾中已經有.npmrc,在進行npm安裝時也要明確指出注冊表。

  6. 最后,如果要在Azure Devops中使用Azure Service App部署進行部署,請不要讓它為您生成web.config,而讓kudu來生成它。

一旦在推送請求中檢測到package.json文件,Azure Web應用程序就會調用“ npm install”。 它安裝“依賴項”中列出的軟件包。

但是,這並不完美。 我的一個項目需要SQLite,但沒有安裝。 我通過在本地安裝所有軟件包,然后使用本地Git將整個“ node_modules”文件夾推送到Azure來解決此問題

我不建議將“ sample_service.js”放入“ node_modules”中,因為該文件夾是由npm根據“ package.json”中列出的依賴關系創建和修改的。 嘗試將“ sample_services.js”放置在“ node_modules”之外的同一文件夾中。

如果“ sample_services.js”是后端Javascript服務器,則由於部署時的命名限制 ,您需要將其重命名為“ server.js”或“ app.js”。 在“ 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

干杯!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM