• 2026年7月17日
  • 5 分钟阅读
  • SystemDo

Vercel、域名与 SSL 部署前如何规划?环境、容量与依赖清单

在将应用部署到 Vercel 之前,需要明确环境划分、容量估算、依赖清单、网络拓扑和责任边界。本文从软件架构师视角,给出可落地的规划清单与决策依据。

Vercel、域名与 SSL 部署前如何规划?环境、容量与依赖清单
SystemDo
SystemDo

软件定制开发团队

"真正有价值的技术内容,应该能帮助客户更快判断方向、预算和落地路径。"

部署前规划的价值:避免返工与责任模糊

很多团队在 Vercel 上部署应用时,习惯先跑起来再说——域名用默认的 *.vercel.app,SSL 由平台自动生成,环境变量直接在 Dashboard 里填。这种做法在小规模原型阶段没有大问题,但一旦涉及正式业务、多环境、合规要求或团队协作,就会暴露出环境混乱、容量预估不足、依赖缺失、网络延迟和责任边界模糊等问题。

作为软件架构师,我的经验是:部署前的规划时间至少应占整个部署周期的 20% 到 30%。对于中等复杂度的项目(例如一个包含前端、后端函数、数据库连接和第三方 API 的 SaaS 应用),规划需要 1 到 3 天。如果项目涉及多个域名、CDN 自定义配置或企业级 SSL 策略,规划周期可能延长至一周。

本文不讨论 Vercel 的基本使用方法,而是聚焦于环境划分、容量估算、依赖清单、网络拓扑和责任边界这五个维度,给出具体的清单和决策依据。

环境划分:不止是 dev/staging/prod

许多团队在 Vercel 上只设置两个环境:development(对应 main 分支)和 production(对应稳定分支)。这种划分对于单人项目勉强够用,但对于企业级项目,至少需要三个环境,并且每个环境应有独立的域名和 SSL 策略。

环境清单

  • **开发环境(dev)**:对应 feature 分支或开发分支,域名建议使用 `<project>-dev.vercel.app` 或自定义子域名如 `dev.yourdomain.com`。SSL 可以使用 Vercel 自动生成的证书,无需额外配置。环境变量使用开发数据库、测试 API 密钥。
  • **预发布环境(staging)**:对应 release 或 staging 分支,域名建议为 `staging.yourdomain.com`。SSL 建议使用与生产环境相同的 CA 签发证书,以便提前发现证书问题。环境变量应尽可能接近生产,但使用隔离的数据库和第三方沙箱账号。
  • **生产环境(production)**:对应 main 或 master 分支,域名是正式域名。SSL 必须使用受信任的 CA 证书,且建议启用 HSTS。环境变量使用生产凭据。

环境配置要点

每个环境在 Vercel 中对应一个 Project 或一个 Team 下的独立 Project。如果使用同一个 Project 的不同分支,需要注意:

  • Vercel 的 Preview Deployments 默认会为每个分支生成独立的 URL,但这些 URL 无法绑定自定义域名(除非使用 Vercel 的 Domain 功能手动添加)。
  • 环境变量可以在 Vercel Dashboard 中按环境设置,但注意“Production”和“Preview”是 Vercel 内置的环境分类,而“Development”需要手动创建。
  • 对于数据库连接、API 密钥等敏感信息,建议使用 Vercel Environment Variables 的“Encrypt”选项,或结合外部密钥管理服务。

**决策依据**:如果项目只有 1 到 2 人维护且用户量低于 100,两个环境(dev+prod)可能足够。但一旦涉及多人协作或正式客户,三个环境是底线。多一个环境意味着多一份维护成本,但可以显著降低生产事故的概率。

容量估算:函数并发、带宽与冷启动

Vercel 的 Serverless Functions 有明确的并发和资源限制。在规划阶段,必须估算应用的容量需求,否则上线后可能遇到性能瓶颈甚至服务中断。

关键限制指标

以下数据基于 Vercel 官方文档(2026 年 7 月),实际限制可能随平台调整,请以官方最新信息为准:

  • **免费计划(Hobby)**:100 个 Serverless Functions,每个函数最大执行时间 10 秒(Hobby)或 60 秒(Pro),内存 512 MB(Hobby)或 1024 MB(Pro)。
  • **Pro 计划**:300 个 Functions,并发请求数在 100 到 1000 之间(取决于账户历史)。超出部分可能被限流或排队。
  • **Enterprise 计划**:可定制,通常支持更高并发和更长的执行时间。

容量估算方法

假设你的应用有一个 API 端点,平均响应时间 200ms,每秒需要处理 50 个请求。那么:

  • 单函数并发处理能力 = 1 / 0.2 = 5 请求/秒
  • 所需函数实例数 = 50 / 5 = 10 个并发实例
  • Vercel 的 Pro 计划默认支持 100 个并发实例,所以这个场景下容量是足够的。

但如果你的函数需要连接数据库且响应时间上升到 500ms,则单函数处理能力下降到 2 请求/秒,所需实例数上升到 25 个。如果同时有多个端点,总并发实例数可能迅速增加。

**冷启动问题**:Vercel 的 Functions 在空闲一段时间后会被回收,下次请求需要重新加载。冷启动时间通常在 200ms 到 1s 之间,取决于函数大小和依赖。对于用户可感知的 API,建议使用 Vercel 的 Edge Functions(基于 V8 Isolates,冷启动极低)或将关键路径的函数设置为“保持 Warm”(Pro 计划以上支持)。

带宽与数据传输

Vercel 的带宽包含在计划中:Hobby 计划 100 GB/月,Pro 计划 1 TB/月,超出部分按量计费。对于图片、视频等静态资源,建议使用 CDN(Vercel 默认提供)并开启缓存。对于 API 响应,考虑使用压缩和分页。

**决策依据**:如果你的应用预计日均请求量超过 10 万次,或函数执行时间超过 10 秒,建议直接选择 Pro 计划并提前与 Vercel 支持沟通容量规划。Enterprise 计划适合对延迟、合规和定制化有严格要求的场景。

依赖清单:从代码到基础设施

部署前的依赖清单可以分为三个层次:代码依赖、平台依赖和外部依赖。遗漏任何一个都可能导致部署失败或运行时错误。

代码依赖

  • **Node.js 版本**:Vercel 默认使用 Node.js 18.x,但可以通过 `engines` 字段或 `.nvmrc` 指定。注意 Vercel 支持的 Node.js 版本列表,避免使用已废弃的版本。
  • **构建工具**:如 Next.js、Nuxt.js、SvelteKit 等框架的版本,必须与 Vercel 的 Build Image 兼容。对于 Next.js,建议使用最新 LTS 版本。
  • **依赖包**:`package.json` 中的 dependencies 和 devDependencies 必须完整。Vercel 在构建时会运行 `npm install` 或 `yarn install`,但注意私有包需要配置访问令牌。
  • **环境变量**:列出所有需要的环境变量,并标明来源(如数据库 URL、API 密钥、JWT 密钥)。建议在项目根目录创建 `.env.example` 文件作为参考。

平台依赖

  • **Vercel 项目配置**:`vercel.json` 文件中的 `rewrites`、`redirects`、`headers`、`functions` 等配置。例如,单页应用需要配置 `rewrites` 将所有路由指向 `index.html`。
  • **构建命令与输出目录**:默认 Vercel 会自动检测框架,但建议显式指定 `buildCommand` 和 `outputDirectory`。
  • **Serverless Functions 配置**:每个 Function 的 `maxDuration`、`memory` 等参数可以在 `vercel.json` 中设置,也可以在函数文件头部通过注释指定。
  • **Edge Functions**:如果使用 Edge Functions,需要确认代码兼容 Edge Runtime(不支持 Node.js API 如 `fs`、`net`)。

外部依赖

  • **域名注册与 DNS**:域名必须在 Vercel 之外注册(如 Namecheap、GoDaddy),并在 DNS 提供商处添加 Vercel 的 CNAME 或 A 记录。Vercel 的 DNS 管理功能(Vercel DNS)支持直接购买和管理域名,但如果你已有 DNS 提供商,建议保持现有设置。
  • **SSL 证书**:Vercel 会自动为绑定的域名生成 SSL 证书(使用 Let's Encrypt 或 Google Trust Services)。如果你需要自定义证书(如企业 CA 或 EV 证书),可以通过 Vercel Dashboard 上传。注意:自定义证书需要是 PEM 格式,且包含完整证书链。
  • **CDN 与缓存**:Vercel 默认使用 Fastly 作为 CDN。如果需要自定义 CDN 行为(如缓存策略、Purge),可以在 `vercel.json` 的 `headers` 中配置 `Cache-Control`。
  • **数据库与第三方服务**:列出所有需要连接的外部服务,并确认其访问控制(IP 白名单、API 密钥、VPC 对等连接)。Vercel 的 Functions 运行在动态 IP 上,无法固定 IP,因此不能通过 IP 白名单限制数据库访问。解决方案包括使用数据库的 IP 范围白名单(如 AWS RDS 支持 CIDR 范围)或通过 VPN/隧道连接。

**依赖清单示例(部分)**:

| 依赖项 | 类型 | 配置方式 | 注意事项 |
|--------|------|----------|----------|
| Node.js 18.x | 代码 | .nvmrc | 必须与 Vercel 兼容 |
| PostgreSQL 15 | 外部 | 环境变量 DATABASE_URL | 使用连接池,避免 IP 限制 |
| Stripe API | 外部 | 环境变量 STRIPE_KEY | 在生产环境使用 Live 密钥 |
| 自定义域名 | 平台 | Vercel Domain 设置 | DNS 记录必须正确 |
| SSL 证书 | 平台 | 自动生成或上传 | 自定义证书需 PEM 格式 |

网络拓扑:域名解析与流量路径

理解 Vercel 的网络拓扑有助于排查延迟和路由问题。一个典型的请求路径如下:

1. 用户浏览器输入 `https://www.yourdomain.com/api/data`
2. DNS 解析:`www.yourdomain.com` 的 CNAME 记录指向 `cname.vercel-dns.com`
3. Vercel 的 DNS 服务器返回最近的 CDN 节点 IP
4. CDN 节点(Fastly)检查缓存:如果命中,直接返回缓存内容;否则转发到 Vercel 的 Edge Network
5. Edge Network 根据请求路径和 `vercel.json` 的配置,决定是提供静态文件还是调用 Serverless Function
6. 如果是 Serverless Function,Edge Network 选择一个 Region 执行函数(默认是离用户最近的 Region,但可以通过 `regions` 配置强制指定)
7. 函数执行完毕后,返回响应,Edge Network 将结果缓存(如果设置了缓存头)

域名规划要点

  • **主域名与子域名**:Vercel 支持将多个域名绑定到同一个 Project。例如,`yourdomain.com` 和 `www.yourdomain.com` 可以同时指向同一个应用。注意:需要配置其中一个为默认域名,另一个做 301 重定向。
  • **跨域名通信**:如果前端部署在 Vercel,后端 API 部署在其他平台(如 AWS Lambda),需要配置 CORS 或在同一个域名下通过反向代理解决。
  • **自定义域名验证**:Vercel 要求验证域名所有权,通常通过添加 TXT 记录或 CNAME 记录完成。验证通过后,SSL 证书会自动生成。

网络延迟优化

  • **选择函数 Region**:Vercel 默认使用 `auto` 模式,函数运行在离用户最近的 Region。但如果你需要连接特定数据库(如 AWS RDS 在 us-east-1),建议将函数 Region 固定为 `iad1`(美国东部)或 `hkg1`(香港),以减少网络延迟。
  • **Edge Functions 优先**:对于不需要 Node.js 完整 API 的场景(如简单的数据转换、A/B 测试),使用 Edge Functions 可以显著降低延迟,因为它们在 CDN 节点上运行。
  • **静态资源缓存**:对于图片、CSS、JS 等静态资源,设置合理的 `Cache-Control` 头(如 `public, max-age=31536000, immutable`),并利用 Vercel 的 CDN 缓存。

**责任边界**:Vercel 负责从 CDN 节点到函数执行之间的网络和计算资源。域名解析、DNS 记录、SSL 证书的续期(自动证书由 Vercel 负责,自定义证书由用户负责)以及外部服务(数据库、第三方 API)的可用性属于用户责任。在规划时,明确这些边界有助于故障排查。

责任边界:谁该为什么负责

在部署前,团队需要明确 Vercel 平台、运维团队和开发团队之间的责任划分。模糊的责任边界是部署后故障的主要原因之一。

Vercel 平台责任

  • 确保 Serverless Functions 和 Edge Functions 的运行时环境可用
  • 自动生成并续期 SSL 证书(对于使用 Vercel DNS 或验证过的域名)
  • 提供 CDN 缓存和全球边缘网络
  • 处理平台级别的安全更新和补丁

运维团队责任

  • 域名注册、DNS 记录管理、域名续费
  • 自定义 SSL 证书的上传和更新(如果使用)
  • 环境变量的管理和轮换
  • 监控和告警设置(Vercel 提供基本的 Dashboard 和 Webhook,但第三方监控如 Datadog 或 Sentry 需要自行集成)
  • 容量规划和升级计划(如从 Pro 升级到 Enterprise)

开发团队责任

  • 代码中的依赖管理和版本兼容性
  • 函数执行时间、内存使用和错误处理
  • 环境变量的正确使用(避免将敏感信息硬编码)
  • 性能优化(如减少函数执行时间、启用缓存)

**实践建议**:在项目启动时,创建一个“部署责任矩阵”文档,列出每项任务的责任人。例如,域名续费由运维团队负责,SSL 证书自动续期由 Vercel 负责但运维团队需要定期检查证书状态。这个文档可以减少上线后的沟通成本。

规划清单:部署前逐项确认

基于以上分析,以下是一个可执行的部署前规划清单。建议在正式部署前逐项检查。

环境清单

  • [ ] 是否创建了 dev、staging、production 三个独立环境?
  • [ ] 每个环境是否绑定了独立的域名?
  • [ ] 环境变量是否按环境隔离,且敏感信息已加密?
  • [ ] staging 环境的环境变量是否与 production 一致(除凭据外)?

容量清单

  • [ ] 是否估算过预期并发请求数?
  • [ ] 函数执行时间是否在 Vercel 限制范围内?
  • [ ] 是否需要 Pro 或 Enterprise 计划?
  • [ ] 是否考虑过冷启动对用户体验的影响?

依赖清单

  • [ ] 所有代码依赖是否在 `package.json` 中明确?
  • [ ] `vercel.json` 配置是否正确(rewrites、headers、functions)?
  • [ ] 外部服务(数据库、API)是否已配置访问方式?
  • [ ] 是否处理了 Vercel 动态 IP 带来的数据库访问问题?

网络清单

  • [ ] DNS 记录是否正确指向 Vercel?
  • [ ] SSL 证书是否已生效(自动或自定义)?
  • [ ] 是否配置了 HSTS?
  • [ ] 函数 Region 是否与外部服务的地理位置匹配?

责任清单

  • [ ] 是否明确了 Vercel、运维团队和开发团队的责任边界?
  • [ ] 是否创建了“部署责任矩阵”文档?
  • [ ] 是否配置了监控和告警?

总结:规划是部署的基石

在 SystemDo 的项目经验中,我们见过太多因为规划不足导致的部署返工:环境变量混乱导致 staging 误连生产数据库、域名解析错误导致用户无法访问、SSL 证书过期导致安全警告、函数并发超限导致服务中断。这些问题的共同根源是部署前没有系统的规划。

本文给出的环境划分、容量估算、依赖清单、网络拓扑和责任边界,是经过多个企业项目验证的实践框架。你可以根据项目规模和复杂度调整细节,但核心原则不变:规划阶段投入的时间,会在后续运维中十倍回报。

最后提醒一点:Vercel 平台本身在持续演进,本文中的限制数据和配置方法以 2026 年 7 月为准。部署前,请务必参考 Vercel 官方文档的最新版本。