【Azure Bot Service】部署NodeJS ChatBot代码到App Service中无法自动启动

问题描述

把NodeJS的ChatBot代码部署到App Service环境中,通过VS Code直接部署,显示部署成功。但是通过URL访问时候,却是 :( Application Error 。

问题解答

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部署包中包含本地可以运行的程序的全部文件。重新部署!

 

方式二:直接进入App Service的高级工具Kudu站点(https://<yourappservicename>.scm.chinacloudsites.cn/newui/kududebug), 进入wwwroot目录,执行 npm install 

但是,这种方式有时会遇见权限不足,无法安装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'

此外,如果完整的NodeJS项目文件部署到App Service后,项目无法启动的原因也可能为:

从 Node 14 LTS 开始,容器不会自动使用 PM2 启动应用。 若要使用 PM2 启动应用,请将启动命令设置为 pm2 start <.js-file-or-PM2-file> --no-daemon。

请务必使用 --no-daemon 参数,因为 PM2 需要在前台运行才能使容器正常工作。

 

参考资料

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

 

【END】

 

posted @ 2024-11-12 21:24  路边两盏灯  阅读(4)  评论(1编辑  收藏  举报