将 Redwood 应用部署到 Render:从 `rw setup deploy render` 到 Blueprint 云平台的完整指南
后端前端Web框架开发工具【免费下载链接】redwoodRedwoodGraphQL项目地址https://gitcode.com/gh_mirrors/re/redwood点击查看免费下载本指南以 Redwood 官方文档 v7.x 中的 Deploy to Render 为核心完整讲解如何将 Redwood 全栈应用部署到 Render 这一统一云平台Unified Cloud并结合当前仓库中 CLI 的真实实现packages/cli/src/commands/setup/deploy/providers/render.js、packages/cli/src/commands/setup/deploy/templates/render.js、packages/cli/src/commands/deploy/render.js深入剖析render.yaml的生成逻辑、数据库Postgres / SQLite配置模板、健康检查函数的注入以及部署命令的运行时行为。读完本文你将能够独立完成一个带数据库的 Redwood 项目的 Render 部署并理解首次部署后必须手动修正render.yaml中 rewrite 规则的原因。Render 与 Redwood为什么选择 RenderRender 是一个统一云平台unified cloud用于构建和运行各类应用与网站内置免费 SSL、全球 CDN、私有网络private networks、从 Git 自动部署auto-deploys from Git并且数据库也包含在内database included。对于 Redwood 这类前后端同仓的全栈应用而言Render 的 BlueprintIaCInfrastructure as Code机制允许用一个render.yaml文件同时声明 web 服务、api 服务和数据库实例一次提交即可完成整个应用的部署。官方文档将其定位为Serverful 部署有状态、常驻服务区别于 Netlify/Vercel 的无服务器函数部署对应的部署命令同样面向常驻进程模型web 端构建静态产物api 端以 Node 服务常驻运行。Render 快速部署路径tl;dr如果只是想快速体验完整的 Render 部署流程含 Postgres 或 SQLite 数据库官方文档给出了 4 步路径创建新的 Redwood 项目yarn create redwood-app ./render-deploy等待项目安装完成后初始化 git 并提交然后将其作为新仓库推送到 GitHub 或 GitLabRender 需要从 Git 仓库拉取代码并自动部署cd render-deploy git init git add . git commit -m init # 在 GitHub/GitLab 上创建新仓库后推送到远端运行 Render 部署脚手架命令并通过--database标志选择数据库类型yarn rw setup deploy render # 或显式指定数据库 yarn rw setup deploy render --database postgresql yarn rw setup deploy render --database sqlite yarn rw setup deploy render --database none--database可选值为postgresql、sqlite、none默认值为postgresql不带任何数据库则传none。前往 Render 控制台dashboard创建账户并按照 Render 官方的 Redwood 部署文档render.com/docs/deploy-redwood创建 Blueprint 并完成部署。上述步骤与当前仓库中的文档完全一致参见 version-7.x 版本 与 未版本化的最新文档。yarn rw setup deploy render命令详解命令与参数定义该命令的源码位于 packages/cli/src/commands/setup/deploy/providers/render.js其中command renderdescription Setup Render deploybuilder通过 yargs 定义--database选项别名-dchoices: [none, postgresql, sqlite]default: postgresqltype: string。也就是说yarn rw setup deploy render -d sqlite与yarn rw setup deploy render --database sqlite等价。数据库 provider 检测与校验getRenderYamlContent(database)是生成render.yaml的核心函数其逻辑非常值得注意当database none时直接生成不带数据库配置的render.yamlRENDER_YAML()否则命令会检查api/db/schema.prisma是否存在不存在则抛出错误Could not find prisma schema at api/db/schema.prisma存在时通过prisma/internals的getSchema与getConfig读取 schema并检测config.datasources[0].activeProvider得到项目实际使用的数据库 provider只有当检测到的 provider 与你--database选择的类型一致时才会生成对应的数据库配置模板若不一致命令会直接报错并给出两种解决方案Option 1: Update your schema.prisma provider to be database, then run yarn rw prisma migrate dev yarn rw setup deploy render --database database Option 2: Rerun setup deploy command with current schema.prisma provider: yarn rw setup deploy render --database detectedDatabase这意味着你无需手动保证 schema 与部署参数一致——CLI 会替你校验避免配置了 Postgres 数据库却使用 SQLite schema这类部署隐患。脚手架实际执行的四个任务handler内部使用 Listr2 顺序执行以下任务源码见 providers/render.jsAdding render.yaml把根据--database生成的render.yaml写入项目根目录getPaths().base即render.yamlUpdating API URL in redwood.toml调用updateApiURLTask(/.redwood/functions)把redwood.toml中[web]下的apiUrl设置为/.redwood/functions若已存在apiUrl则整体替换该行否则在[web]段下插入该实现见 packages/cli/src/commands/setup/deploy/helpers/index.js。这个路径正是render.yaml中 rewrite 规则转发的函数路径前后端由此打通Adding config额外写入健康检查函数api/src/functions/healthz.js内容来自模板RENDER_HEALTH_CHECK// render-health-check export const handler async () { return { statusCode: 200, } }这个函数供 Render 的健康检查探针使用确保 api 服务被判定为运行正常打印部署提示printSetupNotes提示前往 dashboard.render.com 创建账户、查看 Render 官方部署文档并特别提醒首次部署后需要更新./render.yaml中的 rewrite 规则 destination详见下文首次部署后的必做调整。生成的render.yaml深度剖析render.yaml由 packages/cli/src/commands/setup/deploy/templates/render.js 中的RENDER_YAML(database)函数生成项目名取自当前目录的 basenamepath.basename(getPaths().base)因此服务名会形如项目名-web、项目名-api、项目名-db。web 服务静态站点- name: project-web type: web env: static buildCommand: corepack enable yarn install yarn rw deploy render web staticPublishPath: ./web/dist envVars: - key: SKIP_INSTALL_DEPS value: true routes: - type: rewrite source: /.redwood/functions/* destination: replace_with_api_url/* - type: rewrite source: /* destination: /200.html要点env: staticstaticPublishPath: ./web/distweb 端构建产物输出到web/dist由 Render 以静态站点方式托管buildCommand中的yarn rw deploy render web会执行yarn install与yarn rw build web --verbose见 deploy/render.js两条 rewrite 规则/.redwood/functions/*被转发到 api 服务首次部署后必须将replace_with_api_url替换为真实 api 地址其余所有路径/*转发到200.html这是 SPA 路由如 Redwood Router 的前端路由能够在任意刷新路径下正常工作的关键。api 服务常驻 Node 服务- name: project-api type: web plan: free env: node region: oregon buildCommand: corepack enable yarn install yarn rw build api startCommand: yarn rw deploy render api envVars: # 数据库配置在此处注入见下文要点api 侧是type: webenv: node的常驻进程默认plan: free、region: oregonbuildCommand执行yarn rw build api完成 api 端构建startCommand执行yarn rw deploy render api启动阶段会依次执行数据库迁移、数据迁移并拉起服务详见部署命令的运行时行为一节。数据库配置模板根据--database的选择envVars部分与文件末尾会追加不同内容PostgreSQL默认- key: DATABASE_URL fromDatabase: name: project-db property: connectionString databases: - name: project-db region: oregonRender 会自动创建名为project-db的 Postgres 数据库并把其连接串注入到 api 服务的DATABASE_URL环境变量中——无需手动管理数据库密码。SQLite- key: DATABASE_URL value: file:./data/sqlite.db disk: name: sqlite-data mountPath: /opt/render/project/src/api/db/data sizeGB: 1SQLite 使用本地文件数据库因此必须挂载持久化磁盘diskmountPath指向api/db/data默认容量 1GB避免部署重启导致数据丢失。none不注入任何数据库环境变量适合无需数据库的纯前端或演示项目。部署命令的运行时行为yarn rw deploy render sideyarn rw setup deploy render生成的render.yaml会在构建/启动阶段调用yarn rw deploy render其实现位于 packages/cli/src/commands/deploy/render.js位置参数side必填可选api或web选项--prismaboolean默认true是否执行数据库迁移选项--data-migrate/-dmboolean默认true是否执行数据迁移。api 侧handler中的runApiCommands若--prisma为真执行prisma migrate deploy --schema api/db/schema.prisma注意是migrate deploy而非migrate dev只应用已提交的迁移文件适合生产环境若--data-migrate为真执行yarn rw dataMigrate up。这里有一个贴心处理如果项目根package.json的devDependencies中没有redwoodjs/cli-data-migrate会打印提示并跳过数据迁移提示将其作为 devDependency 安装可避免部署期内存问题最后启动服务若api/dist/server.js存在即项目配置了自定义 server 文件则以yarn node api/dist/server.js启动否则回退到redwoodjs/api-server的apiCLIConfigHandler。此外该文件在检测到side api时会提前设置REDWOOD_DISABLE_TELEMETRY1关闭遥测原因注释写得很直白api 侧很容易超过 Render 免费套餐的资源限制因此连遥测这种额外开销也要省掉。web 侧runWebCommands依次执行yarn install与yarn rw build web --verbose产物输出到web/dist供静态托管。首次部署后的必做调整CLI 在完成脚手架时会打印提示render.yaml模板中也以注释形式明确提醒routes: - type: rewrite source: /.redwood/functions/* # Replace destination here after your first deploy: # # destination: https://my-redwood-project-api.onrender.com/* destination: replace_with_api_url/*由于第一次部署前 api 服务的真实 URL 尚不存在destination会以占位符replace_with_api_url/*生成。首次部署成功后需要把该占位符替换为 Render 分配给 api 服务的真实地址形如https://project-api.onrender.com/*web 端对/.redwood/functions/*的函数请求才能正确转发到 api 服务。这也是 Redwood 官方部署流程中最容易遗漏、但必须完成的一步。部署后的验证与排障健康检查确认api/src/functions/healthz.js存在并已提交到仓库脚手架会自动生成Render 的健康检查会请求该函数返回200即视为服务正常API 连通性在浏览器访问 web 服务地址下的/.redwood/functions/healthz应返回 200若 404 或 502优先检查 rewrite 规则的destination是否已替换为真实 api 地址数据库迁移观察 Render 部署日志中 api 服务的启动输出确认prisma migrate deploy与dataMigrate up均成功执行DATABASE_URL已由 Render 注入Postgres或指向挂载盘上的 SQLite 文件。小结将 Redwood 应用部署到 Render 的完整链路是创建项目 → 推送到 GitHub/GitLab → 运行yarn rw setup deploy render --database postgresql|sqlite|none生成render.yaml、更新redwood.toml的apiUrl并注入健康检查函数 → 在 Render 控制台基于 Blueprint 一键部署 → 首次部署后替换 rewrite 规则的destination。整个过程由当前仓库中的 CLI 源码providers/render.js、templates/render.js、deploy/render.js驱动数据库 provider 自动校验、迁移自动执行、SQLite 磁盘自动挂载等细节都已内置你只需要理解每一步的产物与用途即可在生产环境稳定运行。赞分享后端前端Web框架开发工具【免费下载链接】redwoodRedwoodGraphQL项目地址https://gitcode.com/gh_mirrors/re/redwood点击查看免费下载相关推荐将 Redwood 应用部署到 Render从 setup deploy 配置到 api/web 双端上线的完整指南将 Redwood 应用部署到 Render从 setup deploy 配置到 api/web 双端上线的完整指南 Render 是一个一体化云平台uni后端前端Web框架开发工具RedwoodJS 部署到 Render从 setup deploy render 到一键上线的完整实战指南RedwoodJS 部署到 Render从 setup deploy render 到一键上线的完整实战指南 Render 是一站式云平台可构建并运行应用与后端前端Web框架开发工具在 Render 上部署 Redwood从 setup 到上线的完整实战指南在 Render 上部署 Redwood从 setup 到上线的完整实战指南 本篇指南以 Redwood 官方文档version 6.x中《Deploy后端前端Web框架开发工具上一篇Flowable-Engine包含网关详解复杂条件分支的优雅实现下一篇lark-cli 审批实例查询指南approval instances initiated 命令详解与实战创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考