数据库
在 LaunchSaaS 中配置 PostgreSQL 和 Drizzle ORM。连接 Neon、Supabase 或自托管数据库,实现类型安全的查询和迁移。
数据库
LaunchSaaS 使用 PostgreSQL 和 Drizzle ORM 进行类型安全的数据库操作。本指南涵盖数据库配置和设置。
设置
创建数据库
建议使用托管的 PostgreSQL 数据库服务。它们提供简单的设置和管理,通常包括足以开始使用的免费套餐。
Neon(推荐)
Neon 是一个无服务器 PostgreSQL 服务,具有出色的开发者体验。
设置步骤:
- 在 neon.tech 创建账户
- 创建新项目
- 创建数据库
- 从仪表板获取连接字符串
- 将连接字符串添加到
.env文件:
DATABASE_URL="postgres://user:[email protected]/database?sslmode=require"Supabase
Supabase 提供 PostgreSQL 数据库以及身份验证和存储等附加功能。
设置步骤:
- 在 supabase.com 创建账户
- 创建新项目
- 点击"Connect"按钮
- 在"Transaction pooler"部分获取连接字符串
- 将连接字符串添加到
.env文件:
DATABASE_URL="postgres://postgres:[email protected]:6543/postgres"初始化数据库
配置数据库 URL 后,初始化数据库:
pnpm run init此命令将:
- 生成 Drizzle 迁移
- 将迁移应用到你的数据库
- 创建管理员用户
如果你正在设置环境,现在可以返回环境配置指南并继续。
其他数据库选项
自托管
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 等)
常见问题
连接问题
如果你在连接数据库时遇到问题:
- 检查
DATABASE_URL格式是否正确 - 确保你的 IP 地址在数据库防火墙设置中被允许
- 验证数据库用户具有正确的权限
- 检查是否有任何网络限制
迁移问题
如果你遇到数据库迁移问题:
- 检查架构定义是否有错误
- 确保迁移脚本格式正确
- 尝试手动运行迁移以查看详细错误