多彩编程 多彩编程MZPH · CODE BLOG
ARTICLE DETAIL

文章详情

深耕前端与后端开发技术的一线实战笔记与踩坑复盘。

Redwood 8.0 部署指南:通过 Coherence 在 GCP/AWS 上实现全生命周期环境自动化

Redwood 8.0 部署指南:通过 Coherence 在 GCP/AWS 上实现全生命周期环境自动化 Redwood 8.0 部署指南通过 Coherence 在 GCP/AWS 上实现全生命周期环境自动化【免费下载链接】redwoodRedwoodGraphQL项目地址: https://gitcode.com/gh_mirrors/re/redwoodCoherence 是 Redwood 官方支持的一款 serverful服务器型部署平台能够在 GCP 或 AWS 账户内自动化管理从云端开发环境、CI/CD 到分支预览、生产环境的完整软件开发生命周期。本文以 Redwood 8.0 文档为核心结合仓库内 CLI 的实际实现源码完整讲解yarn rw setup deploy coherence的配置过程、生成文件结构与底层原理帮助你一次性完成 Redwood 应用在 Coherence 上的部署落地。Coherence 是什么面向 Redwood 的全生命周期环境自动化平台Coherence 的价值在于开发者无需自行拼凑一堆开源工具就能获得一套开箱即用的全生命周期环境管理体验。它特别面向承担关键业务mission-critical work的初创团队。从官方文档看通过一份简单配置Coherence 提供以下四类能力云端开发环境基于 VSCode 的 Cloud-hosted 开发环境体验类似 Gitpod 或 GitHub CodeSpaces开发者无需在本地搭建完整工具链即可开始编码生产级 CI/CD运行在你自己 GCP/AWS 账户内涵盖数据库迁移migration、数据填充seeding、快照加载snapshot loading、并行化测试、容器构建与 Docker Registry 管理全栈分支预览Branch Previews为任意容器化应用提供类似 Vercel/Netlify 的开发者体验并且可以一并拉起 CDN、Redis、数据库等依赖资源预发与生产环境管理生产环境运行在独立的云账户AWS或独立项目GCP中所有环境类型统一提供开发者友好的密钥secrets管理 UI。对于 Redwood 项目而言Coherence 属于 官方支持的部署目标 之一与 Baremetal、Flightcontrol、Netlify、Render、Serverless.com、Vercel 等并列适用于希望把 API 与 Web 两侧部署在传统服务器型基础设施而非 Serverless上的场景。部署前置条件在开始部署之前需要满足以下两个前提GitHub 托管Redwood 项目必须托管在 GitHub 上Coherence 需要读取仓库、触发 CI/CD 与分支预览云账户必须拥有一个 AWS 或 GCP 账户Coherence 会在你自己的云账户内创建和运维所有资源。此外由于 Coherence 属于 serverful 部署形态建议先阅读 部署总览文档 理解 Redwood 的通用部署流程代码提交触发部署 → API 与 Web 两侧分别构建 → 构建期间执行数据库相关操作如迁移→ 托管商将静态资源分发到 CDN、将 API 代码部署到后端。开始部署运行 setup 命令在你的 Redwood 项目根目录执行以下命令即可开始配置yarn rw setup deploy coherence该命令会完成三件事对应 coherenceHandler.js 中的任务链添加部署文件生成coherence.yml和 API 侧的 health check 文件详见下一节更新redwood.toml自动化调整 host、apiUrl 与端口配置输出部署提示指引你前往 Coherence 控制台创建账户、配置云与 GitHub 连接。命令还支持一个可选参数# 覆盖已存在的配置文件默认 false已存在时会报错或提示 yarn rw setup deploy coherence --force在 coherence.js 中可以看到--force的定义它是一个布尔选项用于在coherence.yml或 health check 文件已存在时强制覆盖写入。数据库支持检测命令执行时会自动读取你的 Prisma schema 并检查数据库类型。从 coherenceHandler.js 的源码可以看出其内部逻辑通过prisma/internals的getSchema/getConfig读取schema.prisma取出datasource块的activeProvider目前仅支持mysql和postgresql两种数据库见SUPPORTED_DATABASES常量如果检测到sqlite或其他 provider会直接抛出错误并提示你切换到支持的类型Coherence doesnt support the provider provider in your Prisma schema. To proceed, switch to one of the following: mysql, postgresql.若检测到postgresql生成配置时会将其映射为 Coherence 使用的名称postgres。因此如果你的开发库是 SQLiteRedwood 新项目默认需要在api/prisma/schema.prisma中把provider改为postgresql或mysql并配置对应的DATABASE_URL环境变量后再执行部署命令datasource db { provider postgresql url env(DATABASE_URL) }命令生成的文件coherence.yml 与 health checkyarn rw setup deploy coherence会在项目根目录生成coherence.yml并在api/src/functions/下生成 health check 函数TypeScript 项目为health.tsJavaScript 项目为health.js。health check 的完整内容如下// Coherence health check export const handler async () { return { statusCode: 200, } }这个函数的作用是让 Coherence 的负载均衡与健康探针能够通过 HTTP 请求验证 API 是否存活Coherence 会定时访问/api/health进行探活。coherence.yml 完整结构与逐段解析根据 coherenceHandler.js 中的模板源码生成的coherence.yml结构如下以下为基于源码还原的完整示例api: type: backend url_path: /api prod: command: [yarn, rw, build, api, , yarn, rw, serve, api, --apiRootPath/api] dev: command: [yarn, rw, build, api, , yarn, rw, dev, api, --apiRootPath/api] local_packages: [node_modules] system: cpu: 2 memory: 2G health_check: /api/health resources: - name: 你的项目名-db engine: postgres version: 13 type: database adapter: postgresql # 如果使用了 data migrations请改用下面这行 # migration: [yarn, rw, prisma, migrate, deploy, , yarn, rw, data-migrate, up] migration: [yarn, rw, prisma, migrate, deploy] web: type: frontend assets_path: web/dist prod: command: [yarn, rw, serve, web] dev: command: [yarn, rw, dev, web, --fwd\--allowed-hosts all\] # 注意Redwood 的 prerender 目前与 Coherence 不兼容 # 状态与进展见 issue #8333。 build: [yarn, rw, build, web, --no-prerender] local_packages: [node_modules] system: cpu: 2 memory: 2G关键配置项说明api 段声明type: backendurl_path: /api将 API 挂载在/api路径下与redwood.toml中的apiUrl /api保持一致。prod命令先执行yarn rw build api构建 API再用yarn rw serve api --apiRootPath/api启动生产服务dev命令则用于本地/云端开发环境。system 段为服务分配 2 核 CPU、2G 内存并指定健康检查路径/api/health。resources 段自动声明一个以项目名命名的数据库实例项目名-db引擎根据 Prisma schema 自动写入postgres或mysql版本为 13。adapter: postgresql仅在数据库为 Postgres 时生成对应源码中db postgres ? adapter: postgresql : 的条件拼接。migration 段默认执行yarn rw prisma migrate deploy完成数据库迁移。如果你还使用了 Redwood 的 data migrations数据迁移源码注释提示应改为同时执行yarn rw>[web] title Redwood App port ${PORT:8910} apiUrl /api host 0.0.0.0 [api] port ${PORT:8911} host 0.0.0.0注意host、apiUrl、port的改写分别由HOST_REGEXP、API_URL_REGEXP、PORT_REGEXP三个正则驱动只替换已有配置项对尚未出现的host则按[web]/[api]段插入。若你手动调整过redwood.toml建议在运行命令前备份或在需要时使用--force重新生成。重要警告Prerender 暂不支持 Coherence在 Coherence 部署文档 中有一个醒目的警告Redwood 的 Prerender预渲染功能目前无法与 Coherence 配合使用。当前的进展与后续更新可以关注 Redwood 仓库的 issue #8333在生成的coherence.yml注释中同样标注了该 issue 编号如果项目启用了prerender在问题修复前不要将其用于 Coherence 部署如果不使用 prerender则可以放心继续。同时可以看到生成的coherence.yml中 Web 的build命令被固定为yarn rw build web --no-prerender这正是为了让构建过程跳过预渲染步骤、规避兼容性问题。关于 prerender 的更多背景可参考 Prerender 文档。进阶在 Coherence 中配置更多能力基础部署完成后官方文档建议参考 Coherence 的 Redwood 部署文档进一步配置以下能力详见 Coherence 侧文档的 Redwood.js 框架章节Redis 服务器为应用添加 Redis 实例用于缓存、会话或 Redwood 的实时realtime功能数据库迁移 / 数据填充 / 快照加载在 CI/CD 流水线中配置数据库 schema 迁移、seed数据脚本执行以及从快照恢复数据若使用 data migrations记得把coherence.yml中migration一行改为同时执行yarn rw prisma migrate deploy yarn rw contenteditable="false">【免费下载链接】redwoodRedwoodGraphQL项目地址: https://gitcode.com/gh_mirrors/re/redwood创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表