教程 搜索 / 发布与基础设施 / 在 Render 上部署
📝 文字 ● 初级 更新于 2026-05-13

在 Render 上部署

Render 是后 Heroku 时代最接近 Heroku 风格的 PaaS——相同的五种服务类型、固定的月费定价、"连接仓库即部署"的工作流。与 Railway 相比,自动检测能力稍弱;与 Fly 相比,可用区域较少。最大的优势是:账单永远如你所料,没有意外。

如果你在过去十年里用过 Heroku,Render 的界面会让你感到格外熟悉。Web 服务、后台 Worker、定时任务、静态站点、托管数据库——相同的五种服务模型,相同的每服务配置页面,相同的"此分支自动构建并部署"工作流。正是这种亲切感让 Render 的采用率稳步增长:如果你在 Heroku 上发过布,这里没有什么新东西要学,但 Heroku 让你头疼的那些问题在这里都得到了改善。

相比 Heroku,Render 最实质的改进在于定价。Render 的计划按服务按月收费,价格固定——Web 服务 $7,Worker $7,托管 Postgres $7 起,静态站点免费。月末账单和月初一样,既不令人兴奋,也不会有意外,这正是它的意义所在。如果你希望在月初就知道自己要花多少钱,Render 是最友好的选择。

权衡是真实存在的,但范围有限。Render 的可用区域比 Fly 少(只有几个,分布在北美、欧洲、亚洲,而非 30+ 个)。技术栈的自动检测能力不如 Railway——你通常需要写一个小小的 render.yaml 或手动指定启动命令。免费套餐的冷启动时间为 30–60 秒,对于偶尔访问的个人项目尚可,但对于有真实用户的服务则完全不可接受。这些都不是致命缺陷,只是"稳定可靠"所付出的代价。

你将学到什么

第 1 步:注册并连接 GitHub

1

Render.com,GitHub OAuth

使用你的 GitHub 账户在 render.com 注册。OAuth 流程会请求仓库访问权限——出于安全考虑,建议将权限范围限制在特定仓库,而非选择"全部"。在创建非免费服务之前,无需绑定信用卡。

如果你不使用 GitHub,Render 也支持 GitLab 和 Bitbucket。

第 2 步:选择服务类型

2

五种形态

Render 的服务类型:

  • Static Site(静态站点)——从仓库的静态资源构建,完全免费。适合纯 HTML、React/Vue SPA(构建后)、文档站点,通过 CDN 全球分发。
  • Web Service(Web 服务)——长期运行的 HTTP 服务器,最常用的类型。入门套餐 $7/月,更高规格可按需选择。
  • Background Worker(后台 Worker)——无 HTTP 端口的长期运行进程,适合任务队列、消息消费者等。$7/月。
  • Cron Job(定时任务)——按计划运行的脚本,价格较低,按运行次数计费。
  • Private Service(私有服务)——仅在你的其他 Render 服务内部可访问的 Web 服务,适合内部 API。$7/月。

此外还有托管数据库:Postgres、Redis、Key Value——独立产品,各有独立的月费定价。

第 3 步:部署 Web 服务

3

最常见的流程

点击 New + → Web Service,选择仓库,然后配置以下内容:

  • Name(名称):随意填写;这会成为 URL 的一部分。
  • Region(区域):选择离你的用户最近的区域。
  • Branch(分支):通常是 main
  • Build command(构建命令):用于构建项目的命令(例如 npm install && npm run build)。
  • Start command(启动命令):用于启动服务器的命令(例如 npm start)。
  • Plan(套餐):Free(有冷启动)或 Starter($7/月,始终在线)。

点击 Create Web Service,Render 会完成构建和部署,几分钟后 URL 即可访问。

免费套餐有冷启动。免费 Web 服务在 15 分钟内没有收到请求时会被挂起。下一个请求会唤醒它——需要 30–60 秒。对于偶尔访问的个人项目尚可接受,但对有真实用户的服务则完全不行。$7 的 Starter 套餐没有这个问题。

第 4 步:添加 Postgres 数据库

4

托管数据库,一键创建

在控制台中,点击 New + → PostgreSQL。填写名称、区域(最好与你的服务相同)、套餐(入门版 $7/月,对大多数应用已足够)。Render 会在几分钟内完成托管 Postgres 的配置。

连接方式:从 Postgres 控制台复制"Internal Database URL",将其设置为 Web 服务上的 DATABASE_URL 环境变量。内部 URL 仅在 Render 的网络内部有效——它们是私有的,不经过公网传输。如果需要从 Render 外部连接(例如从本地机器),也有"External Database URL"可用,但服务之间应使用内部 URL。

第 5 步:环境变量

5

每个服务的 Environment 标签页

每个服务都有一个 Environment 标签页,用于设置环境变量。敏感变量会被遮掩,非敏感变量不会。根据需要添加 API_KEY=...NODE_ENV=production 等。保存更改后 Render 会自动重新部署,无需手动触发。

Render 还支持 Environment Groups(环境变量组)——可以将一组变量附加到多个服务。当多个服务需要共享密钥时非常有用(例如 Worker 和 Web 服务都需要数据库 URL)。

第 6 步:自定义域名 + TLS

6

一条 CNAME,TLS 由 Render 负责

服务设置 → Custom Domains → Add Custom Domain。Render 会提供一个 CNAME 目标值。在你的 DNS 服务商处添加:

  • Name:你的子域名(如果你的 DNS 服务商支持顶点 CNAME,也可以填 @)。
  • Value:Render 提供的目标值。

几分钟后,Render 会完成验证并颁发免费的 TLS 证书(底层使用 Let's Encrypt),自动续期,无需你再操心。

第 7 步:用 render.yaml 实现生产级配置管理

7

基础设施即代码,可选

如果你不想让控制台成为配置的唯一来源,可以在仓库根目录放一个 render.yaml

services:
  - type: web
    name: my-api
    env: node
    buildCommand: npm install && npm run build
    startCommand: npm start
    plan: starter

databases:
  - name: my-postgres
    plan: starter

提交它。从此以后,git 中的配置就是唯一真相。Render 的"Blueprints"功能会在你创建项目时读取 render.yaml;对于已有项目,可以通过 Settings 切换到这种方式。

第 8 步:什么时候 Render 不是最佳选择

8

三种情况

  • 你需要全球边缘节点。Render 的区域有限。Fly.io 在多区域方面遥遥领先。
  • 你想要最轻松的入门体验。Railway 的自动检测更友好;Render 更频繁地要求你手动指定构建/启动命令。
  • 你希望按使用量付费。Render 的固定套餐意味着即使服务几乎没有流量,每月也要花 $7。Railway 的按量计费对低流量项目更划算。
免费套餐适合测试,不适合生产环境。免费 Web 服务有冷启动。免费 Postgres 有 90 天的数据保留限制,到期后会被删除。这两点在文档中有明确说明,但很容易忽视。如果数据对你有价值,从第一天起就使用付费套餐。

接下来