LogoLaunchSaaS

数据库

在 LaunchSaaS 中配置 PostgreSQL 和 Drizzle ORM。连接 Neon、Supabase 或自托管数据库,实现类型安全的查询和迁移。

数据库

LaunchSaaS 使用 PostgreSQL 和 Drizzle ORM 进行类型安全的数据库操作。本指南涵盖数据库配置和设置。

设置

创建数据库

建议使用托管的 PostgreSQL 数据库服务。它们提供简单的设置和管理,通常包括足以开始使用的免费套餐。

Neon(推荐)

Neon 是一个无服务器 PostgreSQL 服务,具有出色的开发者体验。

设置步骤:

  1. neon.tech 创建账户
  2. 创建新项目
  3. 创建数据库
  4. 从仪表板获取连接字符串
  5. 将连接字符串添加到 .env 文件:
DATABASE_URL="postgres://user:[email protected]/database?sslmode=require"

Supabase

Supabase 提供 PostgreSQL 数据库以及身份验证和存储等附加功能。

设置步骤:

  1. supabase.com 创建账户
  2. 创建新项目
  3. 点击"Connect"按钮
  4. 在"Transaction pooler"部分获取连接字符串
  5. 将连接字符串添加到 .env 文件:
DATABASE_URL="postgres://postgres:[email protected]:6543/postgres"

初始化数据库

配置数据库 URL 后,初始化数据库:

pnpm run init

此命令将:

  1. 生成 Drizzle 迁移
  2. 将迁移应用到你的数据库
  3. 创建管理员用户

如果你正在设置环境,现在可以返回环境配置指南并继续。

其他数据库选项

自托管

Docker

在 Docker 容器中运行 PostgreSQL 用于本地开发:

docker run --name launchsaas-postgres -e POSTGRES_PASSWORD=mypassword -d -p 5432:5432 postgres

连接字符串:

DATABASE_URL="postgres://postgres:mypassword@localhost:5432/postgres"

本地安装

postgres.org 直接在你的机器上安装 PostgreSQL。

其他托管服务

数据库命令

命令描述
pnpm run db:generate从架构更改生成迁移
pnpm run db:migrate将迁移应用到数据库
pnpm run db:push直接推送架构更改(仅开发环境,跳过迁移)
pnpm run db:generate:auth重新生成 Better Auth 架构(在更改认证配置后)
pnpm run init:db生成 + 迁移(组合)

针对不同环境运行命令

默认情况下,数据库命令使用你的 .env 文件。要针对不同环境(如生产或预发布)运行命令,使用 dotenv 加载相应的环境文件:

# 推送架构到生产数据库
pnpm dotenv -e .env.production -- pnpm db:push

# 在预发布数据库上运行迁移
pnpm dotenv -e .env.staging -- pnpm db:migrate

# 使用生产数据库生成迁移
pnpm dotenv -e .env.production -- pnpm db:generate

针对生产环境运行数据库命令时要小心。在运行迁移之前始终备份数据,并且在生产环境中优先使用 db:migrate 而不是 db:push

架构组织

数据库架构位于 src/schemas/tables/

文件描述
auth.ts身份验证表(由 Better Auth 自动生成)
order.ts确认的货币交易订单表
entitlement.ts用户产品访问权限表
index.ts重新导出所有架构

不要手动编辑 auth.ts - 它是自动生成的。更改身份验证配置后运行 npm run db:generate:auth

订单表(Order Table)

表示确认的货币交易:

  • 在支付确认时创建
  • 一次性产品在结账完成时创建订单
  • 订阅产品在每次成功支付时创建订单(循环订单)
  • 包含:提供商信息、产品详情、金额、货币、元数据

权限表(Entitlement Table)

表示用户对产品的访问权限:

  • 当订单支付时授予/延长
  • 一次性产品在结账时创建状态为"active"的权限
  • 订阅产品创建状态为"pending"的权限,首次支付后变为"active"
  • 包含:订阅周期信息、取消状态、提供商订阅 ID
  • 支持多个支付提供商(Stripe、Creem 等)

常见问题

连接问题

如果你在连接数据库时遇到问题:

  1. 检查 DATABASE_URL 格式是否正确
  2. 确保你的 IP 地址在数据库防火墙设置中被允许
  3. 验证数据库用户具有正确的权限
  4. 检查是否有任何网络限制

迁移问题

如果你遇到数据库迁移问题:

  1. 检查架构定义是否有错误
  2. 确保迁移脚本格式正确
  3. 尝试手动运行迁移以查看详细错误

参考资料

下一步