问题描述
把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】
当在复杂的环境中面临问题,格物之道需:浊而静之徐清,安以动之徐生。 云中,恰是如此!