Drizzle ORM + Redis-Cluster Redis-Cluster + PostgreSQL+ Docker+ Cloudflare R2+ Better Auth+ Zod+ Upstash+ Resend

Better Auth + Drizzle + Upstash Redis 构建认证与数据层

Better Auth 负责账户认证,Drizzle+Zod 管理数据库 schema 与校验,Upstash Redis 提供缓存与限流,Resend 发送事务邮件

✓ 缓存与限流一体化✓ 类型安全的数据库层 ✕ 依赖多个外部云服务

方案简介

该方案是博客站点的认证与数据层配方:以 Better Auth 实现用户认证(支撑留言板、管理后台、账户设置等站点功能),Drizzle ORM 配合 Zod schemas 实现类型安全的数据建模与校验,Redis 使用 Upstash 做缓存,并使用 Upstash 做 API 限流。环境变量通过 t3-env 管理,图片存储使用 Cloudflare R2,事务性邮件(如评论通知、回复通知)由 Resend 发送。整套组合为站点提供登录、数据持久化、缓存加速、接口限流和邮件通知的完整后端能力,适合需要用户体系与动态数据(评论/点赞/浏览计数)的 Next.js 站点。

亮点与能力

  • Better Auth 用户认证
  • Drizzle ORM + Zod schemas 类型安全数据层
  • Upstash Redis 缓存与 API 限流
  • 留言板(Guestbook)与管理后台实时统计
  • 评论通知与回复通知邮件模板
  • 图片存储使用 Cloudflare R2
  • t3-env 管理环境变量
  • Umami 站点分析

组成与分工

  • Better Auth:认证框架,支撑账户体系
  • Drizzle ORM:数据库 schema、迁移与查询,配套 Drizzle Studio 可视化
  • Zod:schema 校验
  • Upstash(Redis):缓存与 API rate limiting
  • Resend:发送评论/回复通知等事务性邮件
  • Cloudflare R2:图片存储
  • t3-env:环境变量校验管理

前置要求

  • Node.js >= 24
  • bun >= 1.4
  • Docker(运行 PostgreSQL 数据库与 Redis 服务)

服务端口:Database 为 localhost:5432,Redis 为 localhost:6379,Redis serverless 为 localhost:8079

实施步骤

1. 安装与初始化

bash
git clone https://github.com/nelsonlaidev/nelsonlai.dev
cd nelsonlai.dev
bun install

2. 配置环境变量

复制 .env.example.env.local 并按需更新环境变量:

bash
cp .env.example .env.local

3. 用 Docker 启动依赖服务

bash
docker compose up -d

4. 数据库迁移与填充

bash
bun db:migrate
bun db:seed

5. 启动应用与邮件预览

bash
bun dev # Run the development server

or

bun email:dev # Run the email preview server separately

React Email 邮件预览服务运行在 localhost:3001

使用与配置要点

数据库日常操作脚本:

bash
bun db:generate # Generate database migrations
bun db:migrate # Run database migrations
bun db:seed # Seed the database
bun db:push # Push schema changes directly to DB
bun db:reset # Reset database
bun db:studio # Open Drizzle Studio

邮件模板相关:

bash
bun email:export # Export email templates

验证成功:应用在 localhost:3000 可访问,数据库在 localhost:5432,Redis 在 localhost:6379

注意事项与常见问题

  • Upstash 为云服务,线上使用需注册并配置对应密钥(通过 .env.local)。
  • Redis serverless 本地映射在 localhost:8079,用于模拟 Upstash 环境。
  • 修改 schema 后可用 bun db:push 直接推送到数据库,或走 bun db:generate + bun db:migrate 的迁移流程。

优缺点

  • ✓ 缓存与限流一体化
  • ✓ 类型安全的数据库层
  • ✕ 依赖多个外部云服务

出处

本方案挖掘自开源项目 nelsonlaidev/nelsonlai.dev,方案内容与实施命令均来自其 README 原文。

方案出处
nelsonlaidev/nelsonlai.dev:My personal website built with TypeScript, Next.js, and TailwindCSS
843 star My personal website built with TypeScript, Next.js, and TailwindCSS

本方案由真实开源项目挖掘整理,实施命令均来自其 README 原文,安装使用请遵循项目开源协议。