如何正确部署Nest.js应用到Azure Web App?需包含package.json吗?
部署Nest.js到Azure Web App的正确方法
核心逻辑
Azure Web App依赖package.json来识别项目依赖、执行启动命令,只传dist文件夹的话,服务器没有安装依赖的依据,所以必须把构建产物+必要配置文件一同部署,推荐用自动化流程减少手动操作。
方法一:手动部署(适合测试场景)
- 本地完成项目构建:
npm run build - 整理部署文件:
- 必须包含:
dist/(构建后的编译文件)、package.json、package-lock.json(或yarn.lock) - 可选补充:
.env(生产环境变量,注意剔除敏感信息)、nest-cli.json(有自定义构建规则时需要)
- 必须包含:
- 将这些文件打包成ZIP,通过Azure门户的「部署中心」上传,或用FTP/SFTP直接上传到服务器站点目录
- 配置启动命令:
在Azure Web App的「配置」→「常规设置」里,设置启动命令为:
也可以直接写npm run start:prodnode dist/main.js,取决于你package.json里的脚本配置
方法二:自动化部署(推荐用于生产环境)
用GitHub Actions实现代码推送后自动构建部署,全程无需手动操作:
- 在项目根目录创建
.github/workflows/azure-deploy.yml,示例内容:name: Deploy Nest.js to Azure Web App on: push: branches: [ main ] workflow_dispatch: jobs: build-and-deploy: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Set up Node.js uses: actions/setup-node@v4 with: node-version: '20.x' # 匹配你的项目Node版本 - name: Install dependencies run: npm ci - name: Build project run: npm run build - name: Deploy to Azure uses: azure/webapps-deploy@v3 with: app-name: '你的Web App名称' publish-profile: ${{ secrets.AZURE_WEBAPP_PUBLISH_PROFILE }} package: . # 部署当前目录下的所有必要文件 - 在Azure门户获取Web App的发布配置文件,添加到GitHub仓库的Secrets中(命名为
AZURE_WEBAPP_PUBLISH_PROFILE) - 推送代码到main分支后,GitHub Actions会自动完成依赖安装、项目构建、部署到Azure的流程,Azure会自动安装生产依赖并启动应用
关键注意事项
- 确保
package.json里的生产启动脚本正确:"scripts": { "start:prod": "node dist/main.js", "build": "nest build" } - 不要上传本地的
node_modules文件夹,Azure会自动执行npm install --production安装生产依赖,手动上传可能导致版本冲突 - 如果用环境变量,建议通过Azure门户的「配置」→「应用程序设置」添加,避免把敏感信息提交到代码仓库
内容的提问来源于stack exchange,提问作者Maria Gavrila
相关产品推荐
相关产品推荐

