【Azure 应用服务】本地Node.js部署上云(Azure App Service for Linux)遇到的三个问题解决之道
问题描述
当本地Node.js(Linux + Node.js + npm + yarn)部署上云,选择 Azure App Service for Linux 环境。但是在部署时,遇见了以下三个问题:
问题一:使用VS Code进行部署,部署速度非常的慢,且长时间无法部署成功
问题二:本地项目文件部署到App Service的WWWROOT目录下,但是项目中的node_modules为空,即App Service没有完成自动化部署
问题三:部署成功后,项目无法访问,端口3000没有被App Service监听
问题解答
问题一:使用VS Code进行部署,部署速度非常的慢,且长时间无法部署成功
因为Node.js 应用必须与所有必需的 NPM 依赖项一起部署。但如果项目根目录文件中包含了 yarn.lock 或者是在 package.json 中指定了 yarn 作为Package Manager,则会使用 yarn 来代替 npm。 且默认会使用最新版的 yarn。这会导致在部署时出现未知问题。如卡顿导致长时间无响应。

解决办法为,删除 yarn.lock 文件。
引用文档:https://github.com/microsoft/Oryx/blob/main/doc/runtimes/nodejs.md#package-manager
Package manager
The version of npm used to install dependencies and run npm scripts is the one bundled with the specified Node.js version as listed here.
If a
yarn.lockfile is found in your repo root or if you specify "yarn" in theenginesfield of package.json, the latest or specified version of yarn will be used instead of npm.Note that installing packages globally is unsupported, whether requested directly by your app or by some pre/post install script of an included package. For example, this will not work in your
package.json:"scripts" : {
"preinstall" : "npm install -g somepackage"
}
问题二:本地项目文件部署到App Service的WWWROOT目录下,但是项目中的node_modules为空,即App Service没有完成自动化部署
因为项目文件已经部署到 wwwroot目录下,但是 node_modules 为空,表示部署时没有完成 npm install 自动编译的命令。所以经过查看关于App Service对部署是否自动build的资料发现,当对App Service进行部署的时候,App Service Kudu会自动执行编译命令。其主要是通过 SCM_DO_BUILD_DURING_DEPLOYMENT 参数进行控制。
当 SCM_DO_BUILD_DURING_DEPLOYMENT 设置为 true 时,Kudu会自动编译项目文件,如运行 npm install 或 dotnet build / dotnet pulish
当 SCM_DO_BUILD_DURING_DEPLOYMENT 设置为false时,则不会。当使用ZIP 包部署时,就不会触发自动编译。因为Kudu认为ZIP中的文件已经是可执行文件,不在需要编译。
Reference : https://github.com/projectkudu/kudu/wiki/Configurable-settings#enabledisable-build-actions
解决办法为,在App Service的Configuration中添加 SCM_DO_BUILD_DURING_DEPLOYMENT 参数,并配置值为 true。或者是在项目跟目录中添加 .deployment 文件。并在其中加入
[config]
SCM_DO_BUILD_DURING_DEPLOYMENT=true
如图:

问题三:部署成功后,项目无法访问,端口3000没有被App Service监听
Node.js 应用需要侦听正确的端口才能接收传入的请求
当部署完成,但无法通过浏览器访问App Service 。这时候,就可以直接登录Kudu 查看 docker 日志。在日志中看见 app service默认监听的端口为8080。

而 Node.js 项目中,使用的确是3000,所以需要通过配置App Service的 Application Setting来解决这个问题。
解决办法为:通过App Service门户,添加 PORT 或者 WEBSITES_PORT 应用配置参数值为3000.
Reference:
【Azure 应用服务】本地Node.js部署上云(Azure App Service for Linux)遇到的三个问题解决之道的更多相关文章
- 【Azure 应用服务】PHP应用部署在App Service for Linux环境中,上传文件大于1MB时,遇见了413 Request Entity Too Large 错误的解决方法
问题描述 在PHP项目部署在App Service后,上传文件如果大于1MB就会遇见 413 Request Entity Too Large 的问题. 问题解决 目前这个问题,首先需要分析应用所在的 ...
- 【Azure 应用服务】Azure App Service For Linux 上实现 Python Flask Web Socket 项目 Http/Https
问题描述 在上篇博文"[Azure 应用服务]App Service for Linux 中实现 WebSocket 功能 (Python SocketIO)"中,实现了通过 HT ...
- 使用Node.js调用阿里云短信的发送以及接收
为了使用Node.js调用阿里云短信服务,我自己写了个npm包, 目前实现了: 使用Node.js调用阿里云短信服务,发送短信: 使用Node.js调用阿里云短信服务以及MNS服务,接收用户上行短信 ...
- Node.js 部署免费/自动续订 HTTPS
随着互联网快速发展,互联网信息安全越来越受到大家重视,HTTPS 应该是近两年各大厂商都在尽力普及的技术之一.国内大厂基本上已经全面普及了 HTTPS. 本文首发于我的个人网站:听说 - https: ...
- KoaHub.js可借助 Babel 编译稳定运行在 Node.js 环境上
koahubjs KoaHub.js -- 基于 Koa.js 平台的 Node.js web 快速开发框架.可以直接在项目里使用 ES6/7(Generator Function, Class, A ...
- Azure 镜像市场支持一键部署到云
本视频教程介绍了Azure 镜像市场和一键部署到云. Azure 镜像市场(AMP)由世纪互联运营,是一个联机应用程序和服务市场,它通过独立软件服务商(ISV)能够成为 Azure 客户(Custom ...
- Node.js 文件上传 cli tools
Node.js 文件上传 cli tools byte stream 断点续传 refs xgqfrms 2012-2020 www.cnblogs.com 发布文章使用:只允许注册用户才可以访问!
- 【Azure 应用服务】App Service For Linux 部署PHP Laravel 项目,如何修改首页路径为 wwwroot\public\index.php
问题描述 参考官方文档部署 PHP Laravel 项目到App Service for Linux环境中,但是访问应用时候遇见了500 Server Error 错误. 从部署的日志中,可以明确看出 ...
- 【Azure 应用服务】部署Jar到App Service for Linux,因启动命令路径配置错误而引起:( Application Error 问题
问题描述 App Service for Linux 资源创建完成后,通过FTP方式把 .jar包(logdemo.jar)包上传到 /site/wwwroot/ 文件夹后,在App Service的 ...
- 【Azure 应用服务】使用PowerShell脚本上传文件至App Service目录
问题描述 使用PowerShell脚本上传文件至App Service目录的示例 脚本示例 对文件进行上传,使用的 WebClient.UploadFile 方法进行上传.当文件夹中包含子目录,执行以 ...
随机推荐
- Windows设置一键安装Mysql数据库的方法
Windows设置一键安装Mysql数据库的方法 前言 因为MySQL数据库的8126 65536 以及3072最大索引长度等问题 研发这边提交的补丁总是出现稀奇古怪的问题. mysql数据库又因为D ...
- Arthas 超简单离线使用教程
简介 Arthas 是阿里巴巴开源的一套监控java应用的工具 官网的文档地址: https://arthas.aliyun.com/doc/ 官方的简介说明: Arthas 是Alibaba开源的J ...
- 隐私集合求交(PSI)协议研究综述
摘要 隐私集合求交(PSI)是安全多方计算(MPC)中的一种密码学技术,它允许参与计算的双方,在不获取对方额外信息(除交集外的其它信息)的基础上,计算出双方数据的交集.隐私集合求交在数据共享,广告转化 ...
- TS声明promise返回来的数据类型
promise返回来的数据类型 interface backResult{ code: number, data: { name:string,age:number}[], //数组里面的对象类型,这 ...
- Unity中的string gc优化
在项目中如果有大量的字符串拼接,比如每秒执行的倒计时,协议中的日志输出,每次拼接会产生大量的gc,尤其是在ILRuntime下执行 gc alloc的次数会更加频繁. zstring 有两个字符串处理 ...
- TienChin 渠道管理-删除渠道
更改一下菜单权限,将删除渠道的 delete 改为 remove: ChannelController.java @PreAuthorize("hasPermission('tienchin ...
- 小白学k8s(10)-k8s中ConfigMap理解
理解ConfigMap 什么是ConfigMap ConfigMap的创建 使用key-value 字符串创建 从env文件创建 从目录创建 通过Yaml/Json创建 ConfigMap使用 用作环 ...
- C++ CryptoPP使用RSA加解密
Crypto++ (CryptoPP) 是一个用于密码学和加密的 C++ 库.它是一个开源项目,提供了大量的密码学算法和功能,包括对称加密.非对称加密.哈希函数.消息认证码 (MAC).数字签名等.C ...
- Flask 框架:运用Axios库实现前后端交互
Axios 是一个基于promise的HTTP库,该库是一个更好的替代ajax向后端发送数据或请求数据的前端组件库,其本质上也是对原生XHR的封装,只不过它是Promise的实现版本,符合最新的ES规 ...
- Java并发(十)----线程之守护线程
默认情况下,Java 进程需要等待所有线程都运行结束,才会结束.有一种特殊的线程叫做守护线程,只要其它非守护线程运行结束了,即使守护线程的代码没有执行完,也会强制结束. 例: log.debug(&q ...