【Azure Bot Service】部署NodeJS ChatBot程式碼到App Service中無法自動啟動

路边两盏灯發表於2024-11-12

問題描述

把NodeJS的ChatBot程式碼部署到App Service環境中,透過VS Code直接部署,顯示部署成功。但是透過URL訪問時候,卻是 :( Application Error 。

【Azure Bot Service】部署NodeJS ChatBot程式碼到App Service中無法自動啟動

問題解答

App Service遇見Application Error,第一步,檢視日誌。

發現啟動時候遇見:

2024-11-12T12:22:40.366223350Z Error: Cannot find module 'dotenv'

2024-11-12T12:40:12.538120729Z Error: Cannot find module 'restify'

2024-11-12T12:48:13.348529900Z Error: Cannot find module 'lodash'

因在部署NodeJS專案時,VS Code打包時候,排除了 專案中 node_modules資料夾中的全部內容。導致專案啟動時候找不到module!
8:21:29 PM lbbotbackendapp01: Starting deployment...
8:21:29 PM lbbotbackendapp01: Creating zip package...
8:21:30 PM lbbotbackendapp01: Ignoring files from "appService.zipIgnorePattern"
"node_modules{,/**}"
".vscode{,/**}"
8:21:31 PM lbbotbackendapp01: Adding 13 files to zip package...

而部署包上傳成功後,App Service並沒有主動執行npm install安裝系統中所需要使用的node modules。

解決辦法有多種:

方式一:修改zipIgnorePattern內容,讓Zip部署包中包含本地可以執行的程式的全部檔案。重新部署!

【Azure Bot Service】部署NodeJS ChatBot程式碼到App Service中無法自動啟動

方式二:直接進入App Service的高階工具Kudu站點(https://<yourappservicename>.scm.chinacloudsites.cn/newui/kududebug), 進入wwwroot目錄,執行 npm install

【Azure Bot Service】部署NodeJS ChatBot程式碼到App Service中無法自動啟動

但是,這種方式有時會遇見許可權不足,無法安裝modules問題, 所以,還是更推薦第一種方式,從本地上傳完整的node modules檔案!

npm ERR! Error: EACCES: permission denied, rename '/home/site/wwwroot/node_modules/eslint-plugin-import' -> '/home/site/wwwroot/node_modules/.eslint-plugin-import-QTkaoisN'

【Azure Bot Service】部署NodeJS ChatBot程式碼到App Service中無法自動啟動

此外,如果完整的NodeJS專案檔案部署到App Service後,專案無法啟動的原因也可能為:

從 Node 14 LTS 開始,容器不會自動使用 PM2 啟動應用。 若要使用 PM2 啟動應用,請將啟動命令設定為 pm2 start <.js-file-or-PM2-file> --no-daemon。

請務必使用 --no-daemon 引數,因為 PM2 需要在前臺執行才能使容器正常工作。

【Azure Bot Service】部署NodeJS ChatBot程式碼到App Service中無法自動啟動

參考資料

為 Azure 應用服務配置 Node.js 應用 : https://docs.azure.cn/zh-cn/app-service/configure-language-nodejs?pivots=platform-linux#configure-nodejs-server

【END】

相關文章