如何创建并部署 Node.js 应用

构建 Node.js 应用只是软件开发生命周期的第一步;而应用交付的关键在于确保应用在实际环境中可访问、高性能且具有弹性。部署现代 Web 应用时,需要选择一种与您的流量特征、生命周期阶段及资源预算相匹配的架构。

无论您是要发布 AI 辅助的全栈原型,还是要部署生产级后端服务,现代云环境都能提供自动化和容器化的路径。本指南涵盖 Node.js Web 架构的核心概念,探讨关键部署注意事项,并逐步介绍如何使用免费层级配额在托管式基础设施上创建和部署 Node.js 应用。

什么是 Node.js 运行时?

Node.js 是一个基于 Chrome V8 JavaScript 引擎构建的开源跨平台 JavaScript 运行时环境。它使 JavaScript 能够在网络浏览器之外的服务器端运行,从而让工程师能够使用单一编程语言编写统一的全栈代码库。

与传统多线程 Web 服务器(为每个并发连接生成一个独立的操作系统线程)不同,Node.js 采用的是事件驱动、单线程、非阻塞 I/O 的模型。此架构使 Node.js 能够轻量、高效地处理数千个并发连接,例如 RESTful API、实时消息传递、在线媒体服务和 AI 智能体编排器。

传统 Node.js 部署与无服务器容器平台

在准备部署 Node.js 后端时,选择合适的计算环境会直接影响维护开销、扩缩速度和成本效益。

特性

虚拟机 (IaaS/VPS)

PaaS/buildpack 托管

现代无服务器容器

基础架构管理

手动操作系统修补、防火墙管理和运行时更新

具有供应商运行时锁定的全托管式平台层

全托管式基础设施;无需管理操作系统

扩缩机制

基于指标的虚拟机自动扩缩(启动实例需要几分钟时间)

按实例数量或工作器限制进行自动扩缩

请求驱动型即时自动扩缩,包括缩减至零

打包格式

原始源文件、systemd 服务或 PM2 进程管理器

Git 推送代码库与自动化 buildpack 的集成。

标准 OCI/Docker 容器映像

空闲成本概况

全天候计费,无论是否有传入 HTTP 流量

通常需要支付最低基础实例价格。

在活跃请求处理期间严格按秒计费

可移植性

可移植性高,但环境漂移风险高

可移植性差;受限于平台惯例

可移植性高;可在任何环境中运行相同的容器

特性

虚拟机 (IaaS/VPS)

PaaS/buildpack 托管

现代无服务器容器

基础架构管理

手动操作系统修补、防火墙管理和运行时更新

具有供应商运行时锁定的全托管式平台层

全托管式基础设施;无需管理操作系统

扩缩机制

基于指标的虚拟机自动扩缩(启动实例需要几分钟时间)

按实例数量或工作器限制进行自动扩缩

请求驱动型即时自动扩缩,包括缩减至零

打包格式

原始源文件、systemd 服务或 PM2 进程管理器

Git 推送代码库与自动化 buildpack 的集成。

标准 OCI/Docker 容器映像

空闲成本概况

全天候计费,无论是否有传入 HTTP 流量

通常需要支付最低基础实例价格。

在活跃请求处理期间严格按秒计费

可移植性

可移植性高,但环境漂移风险高

可移植性差;受限于平台惯例

可移植性高;可在任何环境中运行相同的容器

创建 Node.js 应用时的关键考虑事项

开发可用于生产用途的 Node.js 应用需要解决架构模式,以防止瓶颈并确保正常运行时间:

  • 无状态应用状态:现代无服务器平台会根据传入流量动态启动和关闭容器实例。避免将用户会话状态、上传的媒体文件或后台队列保存在本地容器内存或本地磁盘路径中,因为写入临时容器磁盘的文件会在重新部署或缩容时消失。使用 Cloud Firestore、Cloud SQL for PostgreSQL 或 Cloud Storage 等专用托管式服务来存储持久状态。
  • 环境变量和 Secret 隔离:将 API 密钥、数据库凭证或 Secret 密钥硬编码到源代码控制中会造成严重的安全漏洞。始终将运行时配置隔离到环境变量 (process.env) 中,并在容器运行时级别安全地注入这些配置。
  • 端口绑定和健康探测:无服务器容器环境通过注入默认目标端口(例如 PORT 环境变量,通常为端口 8080)来路由 HTTP 流量。您的 Node.js 服务器必须动态监听 process.env.PORT || 8080,才能通过健康检查和就绪性检查。
  • 安全关停和信号捕获:Node.js 应用应拦截 SIGTERM 和 SIGINT 操作系统信号。当基础设施自动扩缩器启动缩容时,处理这些信号可确保现有 HTTP 请求在数据库连接关闭和容器终止之前完成处理。

如何创建并部署 Node.js 应用

您可以通过两种主要工作流创建和部署 Node.js 应用:快速 AI 辅助原型设计(无需本地设置)或基于容器的标准部署(适用于现有代码库)。

路径 A:快速原型设计,例如 AI Studio 构建模式和新手体验层级(免费预配)

对于快速原型设计和 AI 应用,Google AI Studio 构建模式允许开发者使用自然语言描述全栈 Node.js 架构,并将其部署到 Cloud Run,而无需使用本地命令行工具或强制性结算设置。

第 1 步:在构建模式下初始化应用

  1. 前往 Google AI Studio,然后切换到构建模式。
  2. 输入应用提示,描述所需的业务逻辑和前端界面(例如,“构建一个包含 Node.js 后端和持久性任务管理的库存跟踪信息中心”)。
  3. 集成的智能体将生成应用文件、配置服务器路由、安装相关 npm 依赖项,并启动互动式预览。

第 2 步:配置内置数据和身份验证

  • 对于持久性存储:如果您的提示需要数据存储,请启用 Cloud Firestore 或 Cloud SQL for PostgreSQL(开发者版)。AI Studio 会自动起草架构、模型和客户端连接文件。
  • 对于用户身份:开启 Firebase Authentication ,即可启用预配置的 Google 登录流程,而无需手动设置单独的 OAuth 重定向处理程序。

第 3 步:发布到托管式 Cloud Run

  1. 点击上方界面中的发布 > 开始 > 发布应用。
  2. 选择您偏好的部署区域。
  3. 为您的应用提供自定义 <user-defined>.ai.studio 网址并发布。
  4. 该平台会打包您的容器,预配底层计算,并在几秒钟内为您提供一个有效的 <user-defined>.ai.studio HTTPS 生产网址。

路径 B:部署自定义 Node.js 应用,例如 Docker 和 Cloud Run

对于预先存在的代码库和自定义微服务,您可以将 Node.js 应用打包到符合 OCI 标准的容器中,并直接部署到 Cloud Run。

第 1 步:构建 Node.js 服务器代码

使用 Express、Fastify 或标准 Node.js 库 (index.js) 创建一个最小的 HTTP 服务器:

  • JavaScript
正在加载...

注意:Cloud Run 会在运行时自动注入 PORT 环境变量。上述代码中的后备 || 8080 主要是为了方便您在部署前在本地机器上轻松进行测试。

第 2 步:创建安全的多阶段 Dockerfile

使用多阶段构建打包应用,确保生成最小、安全的生产映像。

最佳实践:在根目录中创建一个 .dockerignore 文件,并将 node_modules 和 .env 添加到其中。这样可以确保本地开发文件不会意外打包到容器映像中,从而保持其整洁和安全。

在根目录中创建名为 Dockerfile 的文件:

  • Dockerfile
正在加载...

第 3 步:部署到 Cloud Run

从本地根文件夹使用 Google Cloud CLI 执行部署。您还可以选择为应用创建格式为 <user-defined>.cloud.run 的自定义网址:

  • Bash
正在加载...

如需在之后映射自定义网域,请使用:

  • Bash
正在加载...

免费层级和新手体验层级定价机制

了解免费配额的运作方式,可确保您能够以可预测的方式对 Node.js 应用进行原型设计和扩缩:

层级类型

计算和资源限额

要求/限制

Google Cloud 新手体验层级(原型设计)

• Cloud Run:最多 2 个活跃 Web 应用

• Cloud Firestore:1 GiB 存储空间、5 万次读取/天、4 万次写入/天

• Cloud SQL:PostgreSQL 开发者版(缩减至零)

• Firebase Auth:包含 Google 登录功能

• 有效的 Google 账号

• 无需提供信用卡或结算账号

• 单一部署区域锁定

标准 Google Cloud 免费层级 (标准账号)

• Cloud Run:200 万次请求/月、18 万 vCPU 秒/月、36 万 GiB 秒/月、1 GB 北美网络出站流量/月

• 获享 300 美元迎新赠金,可在前 90 天内使用



• 关联的 Cloud Billing 账号

• 跨所有区域的完整平台 API 访问权限

层级类型

计算和资源限额

要求/限制

Google Cloud 新手体验层级(原型设计)

• Cloud Run:最多 2 个活跃 Web 应用

• Cloud Firestore:1 GiB 存储空间、5 万次读取/天、4 万次写入/天

• Cloud SQL:PostgreSQL 开发者版(缩减至零)

• Firebase Auth:包含 Google 登录功能

• 有效的 Google 账号

• 无需提供信用卡或结算账号

• 单一部署区域锁定

标准 Google Cloud 免费层级 (标准账号)

• Cloud Run:200 万次请求/月、18 万 vCPU 秒/月、36 万 GiB 秒/月、1 GB 北美网络出站流量/月

• 获享 300 美元迎新赠金,可在前 90 天内使用



• 关联的 Cloud Billing 账号

• 跨所有区域的完整平台 API 访问权限

利用 Google Cloud 解决业务难题

新客户可获得 $300 赠金,用于抵扣 Google Cloud 的费用。
与 Google Cloud 销售专员联系,详细讨论您的独特挑战。

在无服务器环境中运行 Node.js 的最佳实践

  1. 通过精简依赖项优化冷启动:移除未使用的开发软件包 (npm prune --production),并使用现代模块摇树优化工具(如 esbuild 或 tsup)打包服务器代码,以减小映像大小并加速容器初始化。
  2. 配置实例上限:从沙盒环境迁移到实际生产项目时,请指定并发阈值并设置 --max-instances(例如 --max-instances 5),以确保意外的流量激增不会超出目标运营预算。
  3. 以结构化方式持久保存日志:使用结构化 JSON 格式将日志流式传输到 stdout 和 stderr。托管式日志记录系统会自动解析 JSON 对象,让您可以按 HTTP 状态代码、严重级别和执行延迟时间进行过滤。
  4. 使用原生健康检查:实现清晰的 HTTP 端点探测(例如 /healthz),以在向传入路由代理发出就绪信号之前,验证下游数据库连接。

更进一步

获享 $300 赠金以及 20 多种提供“始终免费”用量的产品,开始在 Google Cloud 上构建项目。