本教程指导你完成创建简单的 Node.js 应用程序并将其发布到 Azure 的任务。
将 Node.js 应用程序发布到 Azure 时,有几个选项。 其中包括 Azure 应用服务、运行你选择的 OS 的 VM、用于管理 Kubernetes 的 Azure 容器服务(AKS)、使用 Docker 的容器实例等。 要了解上述每个选项的更多详细信息,请参阅 计算功能。
在本教程中,将应用部署到 Linux 应用服务。 Linux 应用服务部署 Linux Docker 容器来运行 Node.js 应用程序(而不是运行 Windows 上的 IIS 后面的 Node.js 应用的 Windows 应用服务)。
本教程演示如何从随适用于 Visual Studio 的 Node.js 工具一起安装的模板创建 Node.js 应用程序,将代码推送到 GitHub 上的存储库,然后通过 Azure Web 门户预配 Azure 应用服务,以便可以从 GitHub 存储库进行部署。 若要使用命令行预配 Azure 应用服务并从本地 Git 存储库推送代码,请参阅 创建 Node.js 应用。
重要
本文中的信息仅适用于 Node.js 项目类型(.njsproj)。 从 Visual Studio 2022 版本 17.8 预览版 2 开始,本文中使用的模板不再可用。
本教程介绍如何:
- 创建 Node.js 项目
- 为代码创建 GitHub 存储库
- 在 Azure 上创建 Linux 应用服务
- 部署到 Linux
先决条件
- 必须安装 Visual Studio 以及 Node.js 开发工具包。 - 如果尚未安装 Visual Studio 2019,请转到 Visual Studio 下载 页免费安装它。 - 如果需要安装工作负载但已有 Visual Studio,请转到 工具>获取工具和功能...,这将打开 Visual Studio 安装程序。 选择“Node.js 开发”工作负载,然后选择“修改”。 - VS InstallerNode.js 工作负荷 
- 须安装 Node.js 运行时。 - 如果未安装 LTS 版本,请从 Node.js 网站安装 LTS 版本。 一般情况下,Visual Studio 会自动检测已安装 Node.js 运行时。 如果未检测到已安装的运行时,可以将项目配置为在属性页中引用已安装的运行时(创建项目后,右键单击项目节点并选择 属性)。 
创建在 Azure 中运行的 Node.js 项目
- 打开 Visual Studio。 
- 创建新的 TypeScript Express 应用。 - 按 Esc 关闭开始窗口。 键入 Ctrl + Q 打开搜索框,键入 Node.js,然后选择 “创建新的基本 Azure Node.js Express 4 应用程序(TypeScript)。 在出现的对话框中,选择 创建。 - 如果未看到“基本 Azure Node.js Express 4 应用程序”项目模板,必须添加 Node.js 开发工作负载。 有关详细说明,请参阅 先决条件。 - Visual Studio 创建项目,并在解决方案资源管理器(右窗格)中打开它。 
- 按 F5 生成和运行应用,并确保一切按预期运行。 
- 选择 文件>添加到源代码管理,为项目创建本地 Git 存储库。 - 此时,使用 Express 框架并使用 TypeScript 编写的 Node.js 应用正在工作并签入到本地源代码管理。 
- 根据需要编辑项目,然后继续执行后续步骤。 
将代码从 Visual Studio 推送到 GitHub
要在 Visual Studio 中配置 GitHub:
- 使用“工具”>“扩展和更新”,确保安装和启用适用于 Visual Studio 的 GitHub 扩展。 
- 从菜单中选择“视图”>“其他窗口”>“GitHub”。 - 此时会打开 GitHub 窗口。 
- 如果未在 GitHub 窗口中看到“入门”按钮,请单击“文件>添加到源代码管理”,然后等待 UI 更新。  
- 单击 开始。 - 如果已连接到 GitHub,工具箱将显示如下图。  
- 填写字段使新存储库得以发布,然后单击“发布”。 - 片刻后,将显示一个横幅,上面写着“已成功创建存储库”。 - 下一部分介绍如何从此存储库发布到 Linux 上的 Azure 应用服务。 
在 Azure 中创建 Linux 应用服务
- 登录 Azure 门户。 
- 从左侧的服务列表中选择 应用服务,然后单击 添加。 
- 如果需要,请创建新的资源组和应用服务计划来托管新应用。 
- 请确保将 OS 设置为 Linux,并将 Runtime Stack 设置为所需的 Node.js 版本,如下图所示。  
- 单击 创建 以创建应用服务。 - 部署可能需要几分钟时间。 
- 部署后,转到 应用程序设置 部分,并添加一个名称为 - SCM_SCRIPT_GENERATOR_ARGS和值- --node的设置。 - 警告 - 应用服务部署过程使用一组启发式方法来确定要尝试和运行的应用程序类型。 在部署的内容中检测到 .sln 文件时,将假定这是一个基于 MSBuild 的项目正在被部署。 上面添加的设置将覆盖此逻辑,并显式指定这是 Node.js 应用程序。 如果没有此设置,当 .sln 文件属于正部署到应用服务的存储库时,Node.js 应用程序将部署失败。 
- 在 应用程序设置下,添加另一个名称为 - WEBSITE_NODE_DEFAULT_VERSION和值- 8.9.0的设置。
- 部署后,打开应用服务并选择 部署选项。 - 部署选项 
- 单击“选择源,然后选择 GitHub,然后配置任何所需的权限。  
- 选择要发布的存储库和分支,并选择“确定”。  - 同步时会显示 部署选项 页。  - 同步完成后,将显示勾号。 - 站点现在运行来自 GitHub 存储库的 Node.js 应用程序,并可以通过为 Azure 应用服务创建的 URL 访问(默认情况下此 URL 名称为 Azure 应用服务加上 - .azurewebsites.net)。
修改应用并推送更改
- 在 - app.use('/users', users);行之后,将此处显示的代码添加到 app.ts。 这会在 URL /api中添加 REST API。- app.use('/api', (req, res, next) => { res.json({"result": "success"}); });
- 在本地生成代码并对其进行测试,然后签入并推送到 GitHub。 - 在 Azure 门户中,需要一些时间才能检测 GitHub 存储库中的更改,然后开始新的部署同步。 这类似于下图。  
- 部署完成后,导航到公共站点,并将 /api 追加到 URL。 返回 JSON 响应。 
故障 排除
- 如果 node.exe 进程死亡(即发生未经处理的异常),则容器将重启。
- 容器启动时,它通过各种试探法来找出如何启动 Node.js 进程。 有关实现的详细信息,请参阅 generateStartupCommand.js。
- 可以通过 SSH 连接到正在运行的容器进行调查。 使用 Azure 门户可以轻松完成此操作。 选择应用服务,然后向下滚动工具列表,直到到达“开发工具”部分下的 SSH。
- 若要帮助进行故障排除,请转到应用服务的 诊断日志 设置,并将 Docker 容器日志记录 设置从 关闭 更改为 文件系统。 日志在 /home/LogFiles/_docker.log* 下的容器中创建,可以使用 SSH 或 FTP(S)在框中访问日志。
- 自定义域名可以分配给网站,而不是默认分配的 *.azurewebsites.net URL。 有关更多详细信息,请参阅主题映射自定义域。
- 在迁移到生产环境之前部署到过渡站点进行进一步测试是最佳做法。 有关如何配置此配置的详细信息,请参阅主题 创建过渡环境。
- 有关更常见问题,请参阅 Linux 上的 应用服务常见问题解答。
后续步骤
本教程介绍了如何创建 Linux 应用服务并将 Node.js 应用程序部署到该服务。 你可能想要了解有关 Linux 应用服务的详细信息。