十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

RedwoodJS 部署到 Render:从 `setup deploy render` 到一键上线的完整实战指南

RedwoodJS 部署到 Render:从 `setup deploy render` 到一键上线的完整实战指南 后端前端Web框架开发工具【免费下载链接】redwoodRedwoodGraphQL项目地址https://gitcode.com/gh_mirrors/re/redwood点击查看免费下载Render 是一站式云平台可构建并运行应用与网站提供免费 SSL、全球 CDN、私有网络以及从 Git 仓库自动部署的能力并且自带数据库。本文以 Redwood 官方部署文档 docs/docs/deploy/render.md 为主体结合本仓库中setup deploy render与deploy render两条 CLI 命令的真实源码实现完整讲解如何在 Render 上以 Serverful常驻服务方式部署一个 Redwood 应用——包括渲染蓝图render.yaml的逐段解读、Postgres/SQLite 数据库的接入方式、健康检查函数的自动生成以及首次部署后必须手动完成的 API 重写规则修正。读完本文你将能独立把一个新的 Redwood 项目推送到 Render 并稳定运行。Render 与 Redwood 的部署模型Render 的核心定位是“unified cloud”——把构建、托管、数据库、CDN、SSL 都收敛到一个平台。对 Redwood 而言Render 属于Serverful 部署常驻 Node 进程这与 Netlify/Vercel 等纯 Serverless 平台形成对比API 侧在 Render 上是一个常驻运行的 Node 服务而不是按请求冷启动的函数。一个 Redwood 应用在 Render 上通常被拆成两个服务web 服务类型为static构建后发布web/dist静态产物由 Render 的 CDN 与重写规则提供服务api 服务类型为node常驻运行 Fastify 服务器承载 GraphQL 端点与所有函数Functions。两者之间通过 Render 的rewrite路由把/.redwood/functions/*的请求转发到 API 服务的真实地址从而让前端与后端看起来“同源”。快速上手Render tl;dr 部署四步走原文档给出了一条最直接的体验路径完整命令如下第 1 步创建项目yarn create redwood-app ./render-deploy第 2 步初始化 Git 并推送到远端仓库项目安装完成后进入目录执行git init git add . git commit -m initial commit然后将其作为一个新仓库推送到 GitHub 或 GitLabRender 支持从这两个平台拉取代码并自动部署。第 3 步运行 Render 部署设置命令yarn rw setup deploy render该命令会生成 Render 蓝图配置文件render.yaml、更新redwood.toml中的 API 地址并自动添加一个健康检查函数。--database标志用于选择数据库方案取值含义postgresql在 Render 上创建 Postgres 数据库默认值sqlite使用 SQLite 文件数据库 持久化磁盘none不配置任何数据库例如使用 SQLite 时执行yarn rw setup deploy render --database sqlite第 4 步在 Render 控制台完成部署将render.yaml提交到仓库并推送到 GitHub/GitLab 后登录 Render 控制台选择 BlueprintIaC方式关联该仓库Render 会依据render.yaml自动创建 web、api 以及数据库服务。详细的平台侧操作可参考 Render 官方的 Redwood 部署文档。深入源码setup deploy render到底做了什么原文档对这条命令只给了概要但本仓库的源码完整揭示了它的四个任务。命令入口位于 packages/cli/src/commands/setup/deploy/providers/render.js其handler通过 Listr 任务链依次执行Adding render.yaml——调用getRenderYamlContent(database)生成蓝图文件Updating API URL in redwood.toml——把[web]下的apiUrl改写为/.redwood/functions添加健康检查函数——写入api/src/functions/healthz.js打印后续指引——提示创建 Render 账号、阅读官方部署文档并特别提醒首次部署后要更新render.yaml中的重写目标地址。--database参数的取值与校验逻辑builder中定义了参数同见 providers/render.jsyargs.option(database, { alias: d, choices: [none, postgresql, sqlite], description: Database deployment for Render only, default: postgresql, type: string, })当选择postgresql或sqlite时getRenderYamlContent会先读取api/db/schema.prisma通过 Prisma 解析出当前的数据源 providerconfig.datasources[0].activeProvider并与命令行传入的--database比对若一致则生成对应数据库配置的render.yaml若不一致命令会直接报错并给出两条解决路径要么修改schema.prisma的 provider 后重新执行yarn rw prisma migrate dev与 setup 命令要么改用与 schema 匹配的--database取值见 providers/render.js。这意味着--database的选择必须与项目的 Prisma 数据源一致否则命令会拒绝执行而不是生成一份无法运行的配置。redwood.toml的apiUrl更新机制updateApiURLTask实现在 packages/cli/src/commands/setup/deploy/helpers/index.js会读取根目录redwood.toml并分三种情况处理已存在apiUrl用正则替换整行为apiUrl /.redwood/functions不存在apiUrl但存在[web]段在[web]下新增该行两者皆无在文件末尾追加[web]段与apiUrl。这个值让前端在浏览器中通过同源路径/.redwood/functions访问 API再由 Render 的 rewrite 规则转发到真实的 API 服务地址从而规避跨域CORS问题。自动生成的健康检查函数命令还会写入 api/src/functions/healthz.js其内容来自模板RENDER_HEALTH_CHECK见 templates/render.js// render-health-check export const handler async () { return { statusCode: 200, } }该函数用于 Render 对 API 服务做健康探测保证常驻进程被判定为“存活”。蓝图解析render.yaml的每一段含义render.yaml的生成模板定义在 packages/cli/src/commands/setup/deploy/templates/render.js其中服务名取自项目目录名path.basename(getPaths().base)。以下是一个--database postgresql场景下生成的完整蓝图项目名以render-deploy为例services: - name: render-deploy-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/* # Replace destination here after your first deploy: # # # destination: https://my-redwood-project-api.onrender.com/* # destination: replace_with_api_url/* - type: rewrite source: /* destination: /200.html - name: render-deploy-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: - key: DATABASE_URL fromDatabase: name: render-deploy-db property: connectionString databases: - name: render-deploy-db region: oregon逐段解读如下web 服务env: static表明这是静态站点buildCommand先启用 corepack、安装依赖再执行yarn rw deploy render web等价于安装依赖 yarn rw build web --verbose见下文staticPublishPath: ./web/dist指定发布目录SKIP_INSTALL_DEPS: true避免 Render 重复安装依赖。路由重写第一条 rewrite 把/.redwood/functions/*转发到 API 服务第二条 rewrite 把所有路径回退到/200.html这是 SPA 路由如 React Router能正常工作的关键——刷新任意前端路径都不会 404。api 服务env: node常驻运行 Node 进程plan: free使用免费套餐region: oregon指定区域startCommand启动yarn rw deploy render api。数据库fromDatabase引用同文件下定义的databasesRender 会自动创建 Postgres 实例并把连接串注入DATABASE_URL环境变量。重要的首次部署注意事项web 服务的destination: replace_with_api_url/*是一个占位符。首次部署完成后API 服务会获得一个形如https://my-redwood-project-api.onrender.com的真实地址必须把该占位符替换为这个真实 URL否则前端的函数请求无法命中 API 服务。这也是 setup 命令结束后打印提示中特别强调的一条。SQLite 模式下的蓝图差异若使用--database sqliteAPI 服务段会替换为见 templates/render.jsenvVars: - key: DATABASE_URL value: file:./data/sqlite.db disk: name: sqlite-data mountPath: /opt/render/project/src/api/db/data sizeGB: 1SQLite 不需要独立数据库实例而是通过 Render 的持久化磁盘disk块默认 1GB挂载到api/db/data目录DATABASE_URL直接指向file:./data/sqlite.db从而保证重启后数据不丢失。部署命令yarn rw deploy render side的执行细节render.yaml的buildCommand与startCommand都调用了部署命令deploy render其实现位于 packages/cli/src/commands/deploy/render.js。命令签名为render sideside可选api或web另有两个布尔选项选项默认值作用--prismatrue是否执行数据库迁移prisma migrate deploy--data-migrate别名--dmtrue是否执行数据迁移yarn rw dataMigrate upAPI 侧的执行流程yarn rw deploy render api依次完成数据库迁移若--prisma为真运行prisma migrate deploy --schema api/db/schema.prisma将 schema 变更应用到 Render 上的真实数据库数据迁移若--data-migrate为真先检查根package.json的 devDependencies 中是否有redwoodjs/cli-data-migrate包。没有该包时会跳过并打印提示——建议执行yarn add -D redwoodjs/cli-data-migrate因为缺少它容易在部署时遇到内存问题存在则运行yarn rw dataMigrate up启动服务器检查api/dist/server.js是否存在即是否配置了自定义 server file。存在则以yarn node启动该文件否则动态导入redwoodjs/api-server的apiCLIConfigHandler并按 Redwood 默认配置启动 Fastify API 服务器。此外源码在文件顶部有一个细节当命令带api参数时会预先设置REDWOOD_DISABLE_TELEMETRY1见 deploy/render.js注释解释了原因——API 侧在 Render 免费套餐上很容易超出资源限制因此需要关闭 telemetry 中间件来省下这部分开销。Web 侧的执行流程yarn rw deploy render web相对简单执行两步先yarn install安装依赖再yarn rw build web --verbose输出详细构建日志构建产物落在web/dist由 Render 静态托管。部署后的验证与排障要点完成部署后建议按以下顺序验证打开 web 服务域名确认首页与 SPA 内路由可正常访问对应 rewrite 到/200.html的规则生效验证 API 可达访问https://your-web-app/ .redwood/functions/healthz实际路径去掉空格应返回 200同时确认/.redwood/functions/graphql能被转发到 API 服务检查render.yaml的 destination若前端能打开但所有 API 请求失败绝大多数原因是destination: replace_with_api_url/*尚未替换为真实 API 地址此时回到仓库修改该值并推送Render 会自动重新部署确认数据库连接在 Render 控制台查看 API 服务的日志若出现连接错误检查DATABASE_URL是否已由fromDatabase正确注入。小结Render 为 Redwood 提供了一条 Serverful 部署路径通过yarn rw setup deploy render一条命令即可生成包含 web 静态服务、api 常驻服务与数据库定义的render.yaml蓝图配合yarn rw deploy render side完成构建、迁移与启动。本文结合 providers/render.js、templates/render.js 与 deploy/render.js 的源码把原文档的快速上手步骤展开到了文件级细节。唯一的“手动步骤”是首次部署后更新render.yaml中的 API 重写目标——记住这一点整个部署流程即可无缝跑通。赞分享后端前端Web框架开发工具【免费下载链接】redwoodRedwoodGraphQL项目地址https://gitcode.com/gh_mirrors/re/redwood点击查看免费下载相关推荐Rivet Actors × React 部署到 Renderreact-render 示例的完整实战指南Rivet Actors × React 部署到 Renderreact render 示例的完整实战指南 本指南围绕仓库中 examples/react r后端AI Agent人工智能流程编排WebSocketRender 部署与启动故障排查指南从故障分类到快速修复render-deploy SkillRender 部署与启动故障排查指南从故障分类到快速修复render deploy Skill 导读 本文是 render deploy 技能中面向部署失人工智能AI 技能AI 插件Wasp 一键部署到 Railwaywasp deploy railway 完整实战指南Wasp 一键部署到 Railway wasp deploy railway 完整实战指南 Wasp 框架将部署这一全栈工程中最繁琐的环节收进一条命令 waWeb框架后端前端CLI开发工具上一篇unfetch在SSR项目中的应用服务端渲染的网络请求处理终极指南下一篇2025年React Native Debugger最新安装指南支持macOS、Linux与Windows创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表