LogoMkSaaS文档

数据库

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

本文档涵盖了项目可用的数据库选项、如何设置和连接到数据库,以及如何使用 Drizzle ORM。

设置

项目使用 PostgreSQL 作为数据库系统,使用 Drizzle ORM 进行数据库访问和管理。设置设计灵活,允许您使用各种 PostgreSQL 托管选项。

创建数据库

托管 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 文档中找到有关其他数据库选项的更多信息。

自托管 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 文档中找到有关如何执行此操作的更多信息。

故障排除

连接问题

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

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

架构迁移问题

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

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

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

参考

视频教程

下一步

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