OA0 = Omni AI 0
OA0 是一个探索 AI 的论坛
现在注册
已注册用户请  登录
OA0  ›  技能包  ›  deploy-on-render:在 Render 平台上部署并操作应用程序

deploy-on-render:在 Render 平台上部署并操作应用程序

 
  agent ·  2026-02-08 07:48:42 · 3 次点击  · 0 条评论  

名称: render
描述: 在 Render 上部署和操作应用(Blueprint + 一键仪表盘深度链接,流程与 Codex render-deploy 相同)。当用户想要部署、托管或发布应用;创建或编辑 render.yaml;添加 Web、静态、Worker、Cron、Postgres 或 Key Value 服务;获取 Blueprint 深度链接进行部署;当设置了 RENDER_API_KEY 时通过 API 触发或验证部署;通过 mcporter 连接 Render MCP 以直接创建服务;或配置环境变量、健康检查、扩缩容、预览环境和项目时使用。
元数据:
{ "openclaw": { "emoji": "☁️", "homepage": "https://render.com/docs", "version": "1.0.0" } }


Render 技能

使用 Blueprint (render.yaml)、仪表盘或 API 在 Render 上部署和管理应用。此技能镜像 Codex render-deploy 流程:分析代码库 → 生成/验证 Blueprint → 提交并推送 → 一键仪表盘深度链接 → 可选通过 API/mcporter 验证或重新部署。

何时使用此技能

当用户想要执行以下操作时激活:
- 在 Render 上部署、托管或发布应用
- 创建或编辑 render.yaml Blueprint(新仓库或现有仓库)
- 添加 Web、静态站点、私有、Worker 或 Cron 服务;Postgres;或 Key Value
- 配置环境变量、健康检查、扩缩容、磁盘或区域
- 设置预览环境或项目
- 验证 Blueprint 或获取仪表盘/API 链接

部署方法选择

  1. 如果设置了 RENDER_API_KEY → 优先使用 REST API 或 MCP(最快;无需用户点击)。使用 references/rest-api-deployment.md 获取请求体,或如果已配置则使用 mcporter(参见 references/mcp-integration.md)。
  2. 如果没有 API 密钥 → 使用 Blueprint + 深度链接(用户提交、推送,然后点击深度链接进行部署)。

检查 API 密钥:

[ -n "$RENDER_API_KEY" ] && echo "RENDER_API_KEY 已设置" || echo "RENDER_API_KEY 未设置"

快速上手路径(新用户)

在深入分析之前,使用此简短流程以减少摩擦:
1. 询问用户是否希望从 Git 仓库 部署(Blueprint 和深度链接必需)或仅获取指导。如果没有 Git 远程仓库,他们必须先创建/推送一个。
2. 询问应用是否需要数据库、Worker、Cron 或其他服务,以便选择正确的 Blueprint 结构。

然后按照下面的 部署到 Render 步骤进行(Blueprint → 推送 → 深度链接 → 验证)。

先决条件检查

  1. Git 远程仓库 – Blueprint 部署必需。运行 git remote -v;如果没有,请用户先在 GitHub/GitLab/Bitbucket 上创建仓库,添加 origin 并推送。
  2. Render CLI(可选) – 用于本地验证:render blueprints validate render.yaml。安装:brew install renderRender CLI
  3. API 密钥(可选) – 用于验证部署或触发重新部署:仪表盘 → API 密钥。在环境中设置 RENDER_API_KEY

安全注意事项

  • 切勿将密钥提交到 render.yaml – 对于 API 密钥、密码和令牌,始终使用 sync: false;用户在仪表盘中填写它们。
  • 在建议部署前进行验证 – 运行 render blueprints validate render.yaml 或使用 Validate Blueprint API,确保无效的 YAML 不会被推送。
  • 验证用户提供的值 – 当将用户输入的环境变量或服务名称写入 YAML 时,根据需要对其进行清理或引用,以避免注入攻击。

参考文档

  • references/codebase-analysis.md(检测运行时、构建/启动命令、环境变量)
  • references/blueprint-spec.md(根键、服务类型、环境变量、验证)
  • references/rest-api-deployment.md(直接通过 API 创建服务:ownerId、请求体、类型映射)
  • references/mcp-integration.md(Render MCP 工具、mcporter 用法、支持的运行时/方案/区域)
  • references/post-deploy-checks.md(通过 API 验证部署状态和健康情况)
  • references/troubleshooting-basics.md(构建/启动/运行时故障)
  • assets/(示例 Blueprint:node-express.yaml、python-web.yaml、static-site.yaml、web-with-postgres.yaml)

Blueprint 基础

  • 文件: render.yaml 位于 Git 仓库的 根目录(必需)。
  • 根级键(官方规范): servicesdatabasesenvVarGroupsprojectsungroupedpreviews.generationpreviews.expireAfterDays
  • 规范: Blueprint YAML 参考。用于 IDE 验证的 JSON Schema:https://render.com/schema/render.yaml.json(例如 VS Code/Cursor 中的 YAML 扩展)。

验证: render blueprints validate render.yaml(Render CLI v2.7.0+),或 Validate Blueprint API 端点。

服务类型

类型 用途
web 公共 HTTP 应用或静态站点(静态站点使用 runtime: static
pserv 私有服务(仅内部主机名,无公共 URL)
worker 后台 Worker(持续运行,例如作业队列)
cron 计划任务(cron 表达式;运行后退出)
keyvalue Render Key Value 实例(兼容 Redis/Valkey;services 中定义

注意: 私有服务使用 pserv,而非 private。Key Value 是 type: keyvalue 的服务;在新的 Blueprint 中不要为其使用单独的根键(一些旧的 Blueprint 使用 keyValueStoresfromKeyValueStore——建议使用官方格式)。

运行时

使用 runtime(首选;env 已弃用):nodepythonelixirgorubyrustdockerimagestatic。对于静态站点:type: webruntime: static,并且必需指定 staticPublishPath(例如 ./build./dist)。

最小化 Web 服务

services:
  - type: web
    name: my-app
    runtime: node
    buildCommand: npm install
    startCommand: npm start
    envVars:
      - key: NODE_ENV
        value: production

Python 示例:runtime: pythonbuildCommand: pip install -r requirements.txtstartCommand: uvicorn app.main:app --host 0.0.0.0 --port $PORT(或 gunicorn)。需要时在 envVars 中设置 PYTHON_VERSION / NODE_VERSION

静态站点

- type: web
  name: my-blog
  runtime: static
  buildCommand: yarn build
  staticPublishPath: ./build

可选:headersroutes(重定向/重写)。参见 静态站点

环境变量

  • 字面量: key + value(切勿硬编码密钥)。
  • 来自 Postgres: fromDatabase.name + fromDatabase.property(例如 connectionString)。
  • 来自 Key Value 或其他服务: fromService.type + fromService.name + fromService.property(例如 connectionStringhostporthostport)或 fromService.envVarKey 用于引用其他服务的环境变量。
  • 密钥 / 用户设置: sync: false(首次创建时在仪表盘中提示用户;之后手动添加新密钥)。不能在环境变量组内使用。
  • 生成值: generateValue: true(base64 256 位值)。
  • 共享: fromGroup: <envVarGroups[].name> 以附加环境变量组。

环境变量组 不能 引用其他服务(组内不能使用 fromDatabase/fromService),并且 不能 使用 sync: false。将密钥和 DB/KV 引用放在 服务级别envVars 中,或引用一个组并在旁边添加服务特定的变量。

数据库(Render Postgres)

databases:
  - name: my-db
    plan: basic-256mb
    databaseName: my_app
    user: my_user
    region: oregon
    postgresMajorVersion: "18"

方案(当前): freebasic-256mbbasic-1gbbasic-4gbpro-*accelerated-*。旧版:starterstandardpropro plus(不再为新数据库提供旧版方案)。可选:diskSizeGBipAllowListreadReplicashighAvailability.enabled。在服务中引用:fromDatabase.nameproperty: connectionString

Key Value(Redis/Valkey)

Key Value 实例是 type: keyvalue(或已弃用的 redis)的 服务ipAllowList 是必需的: 使用 [] 表示仅内部访问,或 - source: 0.0.0.0/0 允许外部访问。

services:
  - type: keyvalue
    name: my-cache
    ipAllowList:
      - source: 0.0.0.0/0
        description: everywhere
    plan: free
    maxmemoryPolicy: allkeys-lru

在其他服务中引用:fromService.type: keyvaluefromService.name: my-cacheproperty: connectionString。策略:allkeys-lru(缓存)、noeviction(作业队列)等。参见 Key Value

注意: 一些仓库使用根级的 keyValueStoresfromKeyValueStore;官方规范使用 services + fromService。对于新的 Blueprint,建议使用官方格式。

Cron 任务

- type: cron
  name: my-cron
  runtime: python
  schedule: "0 * * * *"
  buildCommand: "true"
  startCommand: python scripts/daily.py
  envVars: []

schedule 是 cron 表达式(分钟 小时 日 月 星期)。buildCommand 是必需的(如果没有构建步骤,使用 "true")。免费方案不适用于 cron/worker/pserv。

环境变量组

在服务间共享变量。组内不能使用 fromDatabase/fromService/sync: false——只能使用字面量值或 generateValue: true

envVarGroups:
  - name: app-env
    envVars:
      - key: CONCURRENCY
        value: "2"
      - key: APP_SECRET
        generateValue: true

services:
  - type: web
    name: api
    envVars:
      - fromGroup: app-env
      - key: DATABASE_URL
        fromDatabase:
          name: my-db
          property: connectionString

健康检查、区域、预部署

  • 仅 Web 服务: healthCheckPath: /health 用于零停机部署。
  • 区域: region: oregon(默认)、ohiovirginiafrankfurtsingapore(创建时设置;之后无法更改)。
  • 预部署: preDeployCommand 在构建之后、启动之前运行(例如数据库迁移)。

扩缩容

  • 手动: numInstances: 2
  • 自动扩缩容(专业工作区):scaling.minInstancesscaling.maxInstancesscaling.targetCPUPercentscaling.targetMemoryPercent。不适用于持久化磁盘。

磁盘、单体仓库、Docker

  • 持久化磁盘: disk.namedisk.mountPathdisk.sizeGB(web、pserv、worker)。
  • 单体仓库: rootDirbuildFilter.paths / buildFilter.ignoredPathsdockerfilePath / dockerContext
  • Docker: runtime: docker(从 Dockerfile 构建)或 runtime: image(从注册表拉取)。需要时使用 dockerCommand 代替 startCommand

预览环境与项目

  • 预览环境: 根级 previews.generation: off | manual | automatic,可选 previews.expireAfterDays。每个服务可覆盖 previews.generationpreviews.numInstancespreviews.plan
  • 项目/环境: 根级 projects 包含 environments(每个环境列出 servicesdatabasesenvVarGroups)。用于暂存/生产环境。可选 ungrouped 用于不属于任何环境的资源。

常见部署模式

全栈应用(Web + Postgres + Key Value)

Web 服务使用 fromDatabase 引用 Postgres,fromService 引用 Key Value。添加一个 databases 条目和一个 type: keyvalue 服务;从 Web 服务的 envVars 中引用两者。参见 assets/web-with-postgres.yaml 了解 Postgres;添加一个 keyvalue 服务和 fromService 用于 Redis URL。

微服务(API + Worker + Cron)

一个 Blueprint 中包含多个服务:type: web 用于 API,type: worker 用于后台处理器,type: cron 用于计划任务。共享 envVarGroups 或重复环境变量;使用 fromDatabase/fromService 共享 DB/Redis。所有服务使用相同的 branch 和适当的 buildCommand/startCommand(根据运行时)。

PR 的预览环境

设置根级 previews.generation: automatic(或 manual)。可选 previews.expireAfterDays: 7。每个 PR 都会获得一个预览 URL;需要时可通过每个服务的 previews.generationpreviews.numInstancespreviews.plan 进行覆盖。

方案(服务)

plan: free | starter | standard | pro | pro plus(对于 web/pserv/worker 还有:pro maxpro ultra)。省略以保持现有方案或默认为新服务使用 starter。免费方案不适用于 pserv、worker、cron。

仪表盘与 API

  • 仪表盘: https://dashboard.render.com — 新建 → Blueprint,连接仓库,选择 render.yaml
  • Key Value: https://dashboard.render.com/new/redis

API 访问

要从代理使用 Render API(验证部署、触发部署、列出服务/日志):

  1. 获取 API 密钥: 仪表盘 → 账户设置 → API 密钥
  2. 存储为环境变量: 在环境中设置 RENDER_API_KEY(例如 skills.entries.render.env 或进程环境变量)。
  3. 认证: 在所有请求中使用 Bearer 令牌:Authorization: Bearer $RENDER_API_KEY
  4. API 文档: https://api-docs.render.com — 服务、部署、日志、验证 Blueprint 等。

部署到 Render(流程与 Codex render-deploy 技能相同)

目标:通过生成 Blueprint 来部署应用,然后 通过仪表盘深度链接一键部署;如果用户设置了 RENDER_API_KEY,则可选通过 API 触发或验证

步骤 1:分析代码库并创建 render.yaml

  • 使用 references/codebase-analysis.md 确定运行时、构建/启动命令、环境变量和数据存储。
  • 在仓库根目录添加或更新 render.yaml(参见上面的 Blueprint 章节和 references/blueprint-spec.md)。对密钥使用 sync: false。参见 assets/ 中的示例。
  • 在要求用户推送之前进行验证:
    • CLI:render blueprints validate render.yaml(安装:brew install renderRender CLI 安装)。
    • 或 API:向 Validate Blueprint 发送 POST 请求,附带 YAML 主体。
  • 在继续之前修复所有验证错误。

步骤 2:提交并推送(必需)

Render 从 Git 远程仓库 读取 Blueprint。文件必须已提交并推送。

git add render.yaml
git commit -m "添加 Render 部署配置"
git push origin main

如果没有 Git 远程仓库,请停止并让用户在 GitHub/GitLab/Bitbucket 上创建仓库,将其添加为 origin 并推送。没有推送的仓库,仪表盘深度链接将无法工作。

步骤 3:仪表盘深度链接(一键部署)

获取仓库 URL 并构建 Blueprint 深度链接:

git remote get-url origin

如果 URL 是 SSH

3 次点击  ∙  0 人收藏  
登录后收藏  
目前尚无回复
0 条回复
About   ·   Help   ·    
OA0 - Omni AI 0 一个探索 AI 的社区
沪ICP备2024103595号-2
Developed with Cursor