ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

Wasp 应用部署到 Fly.io 后,如何用 `wasp db studio` 安全地连接生产数据库

Wasp 应用部署到 Fly.io 后,如何用 `wasp db studio` 安全地连接生产数据库 Wasp 应用部署到 Fly.io 后如何用wasp db studio安全地连接生产数据库【免费下载链接】waspThe batteries-included full-stack framework for the AI era. Develop JS/TS web apps (React, Node.js, and Prisma) using declarative code that abstracts away complex full-stack features like auth, background jobs, RPC, email sending, end-to-end type safety, single-command deployment, and more.项目地址: https://gitcode.com/GitHub_Trending/wa/wasp本篇技术指南以 Wasp 官方调试文档 Database Studio with Fly.io 为核心骨架完整讲解如何把本地工具连接到 Fly.io 上的生产 PostgreSQL 数据库并通过wasp db studio以图形化界面查看与修改线上数据。读完本文你将掌握获取数据库名称与密码、建立本地隧道、配置DATABASE_URL、运行 Prisma Studio 的完整操作链路同时理解其底层实现与安全边界避免在生产数据上造成不可逆的误操作。操作警告本文所有步骤都是把本地开发工具指向线上生产数据库。动手之前请务必通读文末的 安全注意事项 一节确认你了解后果。适用场景与前置条件wasp db studio是 Wasp 内置的数据库图形化检查工具其本质是调用 Prisma Studio 打开一个 Web 界面让你在不写 SQL 的情况下浏览和编辑数据。本地开发时直接运行wasp db studio即可查看开发数据库但当你的应用已经通过wasp deploy fly launch部署到 Fly.io 后本地工具默认仍指向本地数据库若想查看生产数据就需要先打通一条从本地到 Fly.io 生产数据库的安全连接。本指南适用于以下前提你的 Wasp 应用已经部署到 Fly.io你的本机已安装并登录 Fly CLIfly命令可用你了解 Wasp 中DATABASE_URL服务端环境变量的作用详见 环境变量文档 中对DATABASE_URL的说明它是 Wasp 应用连接 PostgreSQL 数据库的必需变量。在开始之前请先确认你的 Fly 账号下有三个应用app-client、app-server和app-db其中app-db就是承载生产数据库的 Postgres 应用这也是 Wasp 在 Fly.io 上部署时自动创建的三个应用层级见 fly.md。整体思路五个步骤打通本地到生产库连接生产数据库的思路非常直接——Fly.io 的生产数据库默认不直接暴露在公网因此需要借助 Fly 的隧道proxy能力把本地 5432 端口转发到生产 Postgres 应用随后让wasp db studio通过这个本地端口连接数据库。整体流程如下获取数据库名称数据库名获取数据库密码打开到数据库的本地隧道配置本地环境的DATABASE_URL运行wasp db studio下面逐一展开。下文命令中以some-test-db指代你的 Postgres 应用名以some-test-server指代你的服务器应用名实际操作时请替换为你的真实应用名。第一步获取数据库名称首先连接到你的 Postgres 应用将some-test-db替换为你的实际数据库应用名fly postgres connect -a some-test-db连接成功后进入 Postgres 命令行界面列出所有数据库\l输出会列出该 Postgres 实例上的所有数据库。你的 Wasp 应用数据库名称通常遵循server_name_with_underscores的命名模式例如服务器应用叫some-test-server那么数据库名就是some_test_server即把连字符替换为下划线。查看完毕后输入\q退出 Postgres 提示符。第二步获取数据库密码SSH 进入你的数据库应用fly ssh console -a some-test-db进入交互式 shell 后通过环境变量读取数据库超级用户密码echo $OPERATOR_PASSWORD复制输出的密码后续配置DATABASE_URL时会用到然后输入exit退出 SSH 会话。这个密码是 Fly Postgres 的postgres超级用户密码具备完整权限请务必妥善保管不要提交到版本控制中。第三步打开数据库隧道Fly 的fly proxy命令可以把本地端口转发到远程应用的内网端口。在打开隧道前先确认本机 5432 端口没有被占用停止本地开发数据库如果在运行wasp db start先把它停掉检查是否有 Docker 容器占用了 5432 端口。注意后台进程即使你关闭了运行wasp db start的终端对应的 Docker 容器仍可能在后台继续运行并占用 5432 端口。请务必先将其停止否则后续fly proxy会因端口冲突而失败。确认端口空闲后打开隧道fly proxy 5432 -a some-test-db该命令会保持前台运行本地localhost:5432的流量会被转发到 Fly 上some-test-db应用的 Postgres 端口。请保持这个终端标签页一直打开后续步骤请在另一个新的终端中执行。第四步配置数据库 URLWasp 在开发模式下通过项目根目录的.env.server文件为服务端提供环境变量详见 环境变量文档。编辑该文件把DATABASE_URL指向刚打通的生产数据库DATABASE_URLpostgres://postgres:passwordlocalhost:5432/db_name其中password替换为第二步获取的密码db_name替换为第一步获取的数据库名。完整示例如下DATABASE_URLpostgres://postgres:myDatabasePasswordlocalhost:5432/some_test_server可以看到连接地址的主机部分用的是localhost与端口5432——这正是第三步中fly proxy建立的本地隧道入口wasp db studio会通过这条隧道与 Fly 上的生产数据库通信。需要留意的是数据库部署文档 特别提醒除了写入.env.server文件也可以在终端中以内联环境变量的方式临时指定DATABASE_URLpostgresql://user:passwordhost:port/dbname wasp db studio官方更推荐在终端临时设置DATABASE_URL而不是写进.env.server因为如果你把生产库地址留在.env.server里之后忘记清理就运行wasp start本地开发可能会意外连接到生产数据库。建议用完本文流程后立即恢复.env.server。第五步运行 Database Studio现在可以启动 Prisma Studio 来浏览和编辑生产数据了wasp db studio命令执行后会在浏览器中打开一个 Web 界面展示数据库中的所有数据模型即你在schema.prisma中定义的实体你可以直接查看每条记录、按字段筛选也可以修改数据。整个界面与本地开发时看到的完全一致。命令背后的实现原理从源码看wasp db studio并非 Wasp 自己实现的一个独立数据库工具而是对 Prisma Studio 的封装。在 waspc 的数据库生成器 中runStudio函数的实现是-- | Runs prisma studio - Prismas db inspector. runStudio :: Path Abs (Dir GeneratedAppDir) - J.Job runStudio generatedAppDir runPrismaCommandAsJobFromWaspServerDir generatedAppDir [studio, --schema, SP.fromAbsFile schema]也就是说它会在 Wasp 生成的服务器应用目录中执行prisma studio --schema schema 路径其中的--schema指向生成的schema.prisma。这也解释了 Wasp 官方为什么强调不要直接使用prisma命令而要统一走wasp db系列命令——Wasp 在 Prisma 之上做了额外处理例如自动生成 auth 相关的数据模型等直接用prisma命令可能导致缺少必要模型或数据库配置出错参见 CLI 参考文档 中的相关警告。命令的入口位于 Studio.hs其逻辑是先要求当前目录是一个 Wasp 项目InWaspProject定位到生成的.wasp/out应用目录然后启动runStudio并持续打印其输出消息。它被设计为一个常驻进程源码注释中写着 This should never happen, studio should never stop.因此wasp db studio会一直前台运行直到你手动终止。在 WaspDbStudioTest.hs 中还能看到对应的端到端测试它验证了在 Wasp 项目目录之外运行wasp db studio会失败而在一个未编译的最小项目内则可以成功启动测试注释说明不测试具体界面内容因为那是 Prisma 的功能。安全注意事项连接生产数据库、尤其是通过 Prisma Studio 这类工具直接操作数据时必须牢记以下几点任何对生产数据的修改都是立即生效的而且可能很难甚至无法回滚。Prisma Studio 的编辑操作没有草稿机制保存即写入在动手修改前先备份数据库最好是在 Fly.io 控制台上为该 Postgres 应用创建一份手动备份或快照如果只是例行巡检数据建议使用只读用户连接从根上杜绝误写风险。你可以为数据库创建一个只有只读权限的角色用它来配置DATABASE_URL用完后恢复.env.server把DATABASE_URL改回本地开发数据库避免后续wasp start意外连接生产库用完关闭隧道在运行fly proxy的终端中按CtrlC终止进程即可关闭绝不要把生产凭据提交到版本控制。Wasp 新项目的.gitignore默认会忽略所有 dotenv 文件见 环境变量文档请保持这一默认行为同时也不要手动添加包含密码的文件。另外数据库部署文档 还补充了一个使用细节wasp db studio无法查看_prisma_migrations表Prisma 内部用于记录迁移历史的表。如果你需要排查迁移失败等问题请使用 DBeaver、pgAdmin 等通用数据库管理工具连接生产库查看。常见问题排查fly proxy提示端口被占用通常是本地还有开发数据库 Docker 容器在运行。执行docker ps查看并停止占用 5432 端口的容器然后重试fly proxy 5432 -a some-test-db。wasp db studio打开后看不到任何数据确认.env.server中的DATABASE_URL是否仍指向本地库确认隧道终端仍在运行确认数据库名填写正确注意下划线命名规则。wasp db studio报错说不在 Wasp 项目中该命令必须在 Wasp 项目根目录下执行Studio.hs 中强制要求InWaspProject。想直接连fly postgres执行 SQLwasp db studio只提供图形界面执行复杂 SQL、查看迁移表等操作请使用fly postgres connect -a some-test-db或外部数据库管理工具。小结本指南基于 Database Studio with Fly.io 整理。通过查询数据库名 → 获取密码 → 建立本地隧道 → 配置DATABASE_URL→ 运行wasp db studio这五步你就能在本地以图形化方式安全地检查 Fly.io 上的生产数据。这套方法同样适用于其他托管 PostgreSQL 服务核心只有两点——让本地端口能访问到生产库并让DATABASE_URL指向该端口。在享受 Prisma Studio 带来的便利时请始终把生产数据不可逆放在心上做好备份、优先使用只读账号并在操作结束后恢复本地配置、关闭隧道。【免费下载链接】waspThe batteries-included full-stack framework for the AI era. Develop JS/TS web apps (React, Node.js, and Prisma) using declarative code that abstracts away complex full-stack features like auth, background jobs, RPC, email sending, end-to-end type safety, single-command deployment, and more.项目地址: https://gitcode.com/GitHub_Trending/wa/wasp创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表