LogoMkSaaS文档
LogoMkSaaS文档
首页模板介绍代码库视频教程入门文档环境配置
网站配置

功能集成

数据库身份验证邮件邮件订阅存储支付积分定时任务AI 功能统计分析通知验证码聊天框联盟营销

自定义

元数据字体主题图片国际化博客文档组件页面落地页用户管理

代码库

IDE 设置项目结构格式化和代码检查更新代码库
X (Twitter)

数据库

了解数据库选项以及如何为项目配置数据库

本文档涵盖了数据库的创建、初始化、迁移和连接到数据库,以及如何使用 Drizzle ORM。

本文主要介绍的是 Postgres 类型数据库的创建和配置,即如果你使用的是 main 分支或者 cloudflare 分支,请参考本文档。

如果你使用的是 cloudflare-d1 分支,即使用 Cloudflare D1 数据库,请参考 Cloudflare 部署(使用 D1 数据库)。

设置

项目使用 PostgreSQL 作为数据库系统,使用 Drizzle ORM 进行数据库访问和管理。

创建数据库

推荐使用托管的 PostgreSQL 数据库服务,它们提供简单的设置和管理,并且通常包含足够入门的免费套餐。

Neon(推荐)

Neon 是一个具有出色的开发者体验的 PostgreSQL 数据库服务,它是小型项目的绝佳选择。

设置步骤:

  1. 在 neon.tech 创建账户
  2. 创建新项目
  3. 创建数据库
  4. 从仪表盘获取连接字符串
  5. 将连接字符串作为 DATABASE_URL 添加到 .env 文件中
# Neon 连接字符串示例
DATABASE_URL="postgres://user:password@ep-something.us-east-2.aws.neon.tech/database?sslmode=require"

您可以在此文档中找到有关如何设置 Neon 的更多信息。

Neon

Supabase

Supabase 提供具有身份验证和存储等附加功能的 PostgreSQL 数据库,它是中大型项目的绝佳选择。

设置步骤:

  1. 在 supabase.com 创建账户
  2. 创建新项目
  3. 点击 Connect 按钮
  4. 在 Transaction pooler 部分获取连接字符串
  5. 将连接字符串作为 DATABASE_URL 添加到 .env 文件中
# Supabase 连接字符串示例
DATABASE_URL="postgres://postgres:your-password@db.something.supabase.co:6543/postgres"

您可以在此文档中找到有关如何设置 Supabase 的更多信息,或查看 Supabase 上的连接文档。

Supabase

初始化数据库

MkSaaS 使用 Drizzle ORM 与数据库交互。您可以通过运行以下命令初始化数据库:

pnpm run db:generate # 生成 Drizzle 客户端
pnpm run db:migrate # 迁移数据库
npm run db:generate # 生成 Drizzle 客户端
npm run db:migrate # 迁移数据库
yarn db:generate # 生成 Drizzle 客户端
yarn db:migrate # 迁移数据库
bun run db:generate # 生成 Drizzle 客户端
bun run db:migrate # 迁移数据库

这将生成数据库迁移文件,并将数据库架构迁移到数据库中执行初始化。

如果您正在设置环境,现在您可以回到环境配置文档并继续。本文档的其余部分可以稍后阅读。

环境配置

设置环境变量


创建数据库(其他选项)

其他数据库托管服务

您可以在 Drizzle ORM 文档中找到有关其他数据库选项的更多信息。

  • Vercel Postgres
  • Prisma Postgres
  • AWS RDS(PostgreSQL)
  • Google Cloud SQL(PostgreSQL)
  • Azure Database for PostgreSQL

自托管 PostgreSQL

Docker

您可以在 Docker 容器中运行 PostgreSQL 进行本地开发:

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

然后使用此连接字符串:

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

您可以在此文档中找到有关如何在本地设置 PostgreSQL 的更多信息。

本地安装

直接在您的机器上安装 PostgreSQL:

  1. 从 postgres.org 下载或使用包管理器
  2. 安装并设置密码
  3. 创建数据库

然后使用此连接字符串:

DATABASE_URL="postgres://your-username:your-password@localhost:5432/database-name"

使用 Drizzle ORM

模板使用 Drizzle ORM,专注于类型安全和开发者体验的 ORM,Drizzle 支持与各种数据库和提供商兼容。

当前配置

目前,项目配置为使用 postgres-js 依赖库,以便更好地兼容各种数据库和运行环境:

src/db/index.ts
import { drizzle } from 'drizzle-orm/postgres-js';

import postgres from 'postgres';
import * as schema from './schema';

let db: ReturnType<typeof drizzle> | null = null;

export async function getDb() {
  if (db) return db;
  const connectionString = process.env.DATABASE_URL!;
  const client = postgres(connectionString, { prepare: false });
  db = drizzle(client, { schema });
  return db;
}

数据库架构

数据库架构在 src/db/schema.ts 中,使用 Drizzle 的架构定义语法:

src/db/schema.ts
import { pgTable, text, timestamp } from "drizzle-orm/pg-core";

export const user = pgTable("user", {
  id: text("id").primaryKey(),
  name: text('name').notNull(),
  email: text('email').notNull().unique(),
  // ... 其他字段
});

// ... 其他表

您可以在下图中看到数据库的架构:

Structure

使用其他数据库提供商

Drizzle ORM 支持多个数据库提供商。如果您想使用不同的提供商:

  1. 安装适当的 Drizzle 适配器包
  2. 更新 src/db/index.ts 以使用正确的驱动程序
  3. 如有必要,调整 src/db/schema.ts 中的架构

示例:使用 MySQL

src/db/index.ts
// 1. 安装:npm install drizzle-orm mysql2
// 2. 更新 src/db/index.ts
import { drizzle } from 'drizzle-orm/mysql2';
import mysql from 'mysql2/promise';

const connection = await mysql.createConnection(process.env.DATABASE_URL!);
const db = drizzle(connection);

export default db;

示例:使用 SQLite

src/db/index.ts
// 1. 安装:npm install drizzle-orm better-sqlite3
// 2. 更新 src/db/index.ts
import { drizzle } from 'drizzle-orm/better-sqlite3';
import Database from 'better-sqlite3';

const sqlite = new Database('sqlite.db');
const db = drizzle(sqlite);

export default db;

有关 Drizzle ORM 及其适配器的更多信息,请参考 Drizzle ORM 文档。

如果您使用不同的数据库类型,您需要更新 src/lib/auth.ts 文件以使用正确的驱动程序,具体参考 Better Auth 文档。

如果您使用的是 Cloudflare D1 数据库,请参考文档 Cloudflare 部署(使用 D1 数据库)。

连接到数据库

您可以运行 pnpm db:studio 打开数据库工作台,在开发环境中查看和管理数据库数据。

这个命令根据 drizzle.config.ts 文件中的配置,连接到对应的数据库,并打开数据库工作台。

Database Studio

常见问题

连接问题

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

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

架构迁移问题

如果您在数据库迁移时遇到问题:

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

有关更详细的帮助,请参考 Drizzle ORM 文档。

数据库成本问题

如果你使用的是Neon数据库服务,你可能需要注意设置AutoScaling,以避免产生过多的费用账单。

Neon AutoScaling

参考资料

  • Neon
  • Supabase
  • Drizzle ORM
  • Supabase | 使用 Drizzle 连接
  • 使用 Drizzle 的数据库连接
  • Drizzle 与 Neon Postgres
  • Drizzle 与 Supabase Postgres
  • Drizzle 与 Vercel Edge Functions
  • Drizzle | 如何在本地设置 PostgreSQL
  • 在 Cloudflare Workers 中使用 Neon

视频教程

下一步

现在您了解了如何在 MkSaaS 中设置数据库,您可能想要探索这些相关功能:

身份验证

配置用户身份验证

电子邮件

配置电子邮件服务

邮件订阅

配置邮件列表订阅

环境配置

配置环境变量

Cloudflare (使用 D1 数据库)

学习如何将您的项目部署到 Cloudflare Workers 平台,并使用 D1 数据库

身份验证

学习如何在 MkSaaS 中使用 Better Auth 设置和使用身份验证

目录

设置
创建数据库
Neon(推荐)
Supabase
初始化数据库
创建数据库(其他选项)
其他数据库托管服务
自托管 PostgreSQL
Docker
本地安装
使用 Drizzle ORM
当前配置
数据库架构
使用其他数据库提供商
示例:使用 MySQL
示例:使用 SQLite
连接到数据库
常见问题
连接问题
架构迁移问题
数据库成本问题
参考资料
视频教程
下一步