← 返回博客

博客搭建总结

博客项目技术栈与架构总结分析

I. 核心技术栈 (Technical Stack)

类别技术名称具体应用备注
前端框架Next.js (React)用于构建高性能、SSR/SSG 的博客应用。
语言TypeScript确保代码的类型安全和可维护性。
内容管理Sanity无头 CMS,用于存储和管理博客文章、作者等内容数据。内容数据的唯一来源
数据库Prisma (ORM)用于管理辅助数据(如日历事件 calendarEvent、用户数据等)的 ORM。独立于 Sanity 内容。
样式框架Tailwind CSSUtility-First 框架,用于快速高效地实现样式。
样式扩展tailwindcss-animate用于实现页面过渡、组件动画等效果(如 animate-in)。
配色模型HSL推荐并应用于主题配色,用于简化颜色管理和动态主题切换。Shadcn/ui 的核心配色模式。
部署托管Vercel用于 Next.js 应用的托管和全球 CDN 分发。
性能监控Vercel Speed Insights实时用户监控 (RUM) 工具,用于追踪 Core Web Vitals 等性能指标。

II. 架构与设计 (Architecture & Design)

该博客采用典型的 现代无头 (Headless) 架构,实现了前后端分离,并在 Serverless 环境中进行了优化。

1. 数据架构 (Data Flow)

  • 内容 (Content): Next.js 通过 GROQGraphQL 查询语言,从 Sanity 的 API 接口获取博客文章、评论等结构化内容。
    • GROQ (推荐): 简洁、高效,且支持 Sanity 的实时流。
    • GraphQL (可选): 需要运行 sanity graphql deploy 来生成并部署 Schema 接口。
  • 应用数据 (Auxiliary Data): Next.js 通过 Prisma Client (Singleton) 连接到 PostgreSQL/MySQL 等关系型数据库,用于获取用户、事件等非内容数据。
    • 单例模式: 这是在 Vercel/Serverless 环境中防止数据库连接池耗尽的关键优化。

2. 样式架构 (Styling)

  • 原子化设计: 使用 Tailwind CSS 提供原子类。
  • 语义化配色: 采用 HSL 色彩模式结合 CSS Variables (hsl(var(--primary))),实现亮/暗主题的无闪烁切换 (Dark Mode FOUC fix)。
  • 过渡动画: 通过 tailwindcss-animate 插件实现组件和页面的淡入、滑入等平滑过渡效果。

3. 部署架构 (Deployment & Access)

  • 基础部署: 应用部署在 Vercel 平台,利用其全球 CDN 进行内容分发。
  • 中国访问优化 (待实施):
    • 代码级: 移除 Google Fonts (Inter, JetBrains_Mono) 依赖,切换至中文友好的系统字体栈,消除国内访问阻塞点。
    • 基础设施级: 规划通过 ICP 备案,然后将域名 CNAME 指向 国内 CDN 服务商(如阿里云/腾讯云),以代理 Vercel 源站内容,解决 Vercel 在中国无节点的访问问题。

III. 问题汇总与分析 (Issue Summary and Analysis)

我们遇到的所有问题可以分为四大类:

#问题类别具体错误描述根本原因分析解决方案
1数据库连接 (Prisma)P1001: Can't reach database server at db.prisma.io:5432.env 文件中的 DATABASE_URL 使用了占位符域名 db.prisma.io,而不是实际的数据库地址。修正 .env 中的 DATABASE_URL,指向正确的本地或远程数据库地址,并重启服务。
2前端动画 (Tailwind)animate-in CSS 类未生效。tailwind.config.js 文件中缺少对 tailwindcss-animate 插件的注册。tailwind.config.jsplugins 数组中添加 tailwindAnimate 引用。
3CMS 接口部署 (Sanity)混淆 sanity deploysanity graphql deploy 的作用。未理解 Sanity GraphQL API 接口的模式需要手动部署和更新。确认:每次修改 Schema 后,必须运行 sanity graphql deploy 来更新 GraphQL API 接口。
4域名与部署 (Vercel)访问 www.scm-arcadia-blog.xyz404: DEPLOYMENT_NOT_FOUND域名在域名服务商处解析正确,但 Vercel 项目设置中没有添加或绑定 www 子域名。必须在 Vercel Dashboard 的 "Settings" -> "Domains" 中显式添加 www.scm-arcadia-blog.xyz,并等待 Vercel 验证和映射。
5中国访问瓶颈Vercel 部署的博客在中国访问缓慢或无法访问。Vercel 在中国无 CDN 节点,且代码中使用了 Google Fonts 等被墙资源。代码优化: 移除 Google Fonts,切换到系统字体栈。 部署优化: 实施 ICP 备案,并使用国内 CDN 代理 Vercel 源站。

IV. 总结分析

您的博客项目构建在一个健壮且现代化的技术栈之上:

  1. 分层清晰: 内容(Sanity)与应用数据(Prisma)分离,各司其职。
  2. 开发效率高: Next.js 结合 Tailwind CSS 提供了极高的开发效率和出色的性能基础。
  3. 主要瓶颈: 目前主要挑战在于部署阶段,即解决 Vercel 在中国大陆的访问速度问题。这是一个基础设施级的挑战,需要通过额外的国内 CDN 投资来解决。

通过解决这些问题,您不仅修复了当前的 Bug,还学到了在 Serverless 环境中处理数据库连接、优化构建配置以及全球部署的实际经验。

博客项目技术栈与架构总结分析

I. 核心技术栈 (Technical Stack)

类别技术名称具体应用备注
前端框架Next.js (React)用于构建高性能、SSR/SSG 的博客应用。
语言TypeScript确保代码的类型安全和可维护性。
内容管理Sanity无头 CMS,用于存储和管理博客文章、作者等内容数据。内容数据的唯一来源
数据库Prisma (ORM)用于管理辅助数据(如日历事件 calendarEvent、用户数据等)的 ORM。独立于 Sanity 内容。
样式框架Tailwind CSSUtility-First 框架,用于快速高效地实现样式。
样式扩展tailwindcss-animate用于实现页面过渡、组件动画等效果(如 animate-in)。
配色模型HSL推荐并应用于主题配色,用于简化颜色管理和动态主题切换。Shadcn/ui 的核心配色模式。
部署托管Vercel用于 Next.js 应用的托管和全球 CDN 分发。
性能监控Vercel Speed Insights实时用户监控 (RUM) 工具,用于追踪 Core Web Vitals 等性能指标。

II. 架构与设计 (Architecture & Design)

该博客采用典型的 现代无头 (Headless) 架构,实现了前后端分离,并在 Serverless 环境中进行了优化。

1. 数据架构 (Data Flow)

  • 内容 (Content): Next.js 通过 GROQGraphQL 查询语言,从 Sanity 的 API 接口获取博客文章、评论等结构化内容。
    • GROQ (推荐): 简洁、高效,且支持 Sanity 的实时流。
    • GraphQL (可选): 需要运行 sanity graphql deploy 来生成并部署 Schema 接口。
  • 应用数据 (Auxiliary Data): Next.js 通过 Prisma Client (Singleton) 连接到 PostgreSQL/MySQL 等关系型数据库,用于获取用户、事件等非内容数据。
    • 单例模式: 这是在 Vercel/Serverless 环境中防止数据库连接池耗尽的关键优化。

2. 样式架构 (Styling)

  • 原子化设计: 使用 Tailwind CSS 提供原子类。
  • 语义化配色: 采用 HSL 色彩模式结合 CSS Variables (hsl(var(--primary))),实现亮/暗主题的无闪烁切换 (Dark Mode FOUC fix)。
  • 过渡动画: 通过 tailwindcss-animate 插件实现组件和页面的淡入、滑入等平滑过渡效果。

3. 部署架构 (Deployment & Access)

  • 基础部署: 应用部署在 Vercel 平台,利用其全球 CDN 进行内容分发。
  • 中国访问优化 (待实施):
    • 代码级: 移除 Google Fonts (Inter, JetBrains_Mono) 依赖,切换至中文友好的系统字体栈,消除国内访问阻塞点。
    • 基础设施级: 规划通过 ICP 备案,然后将域名 CNAME 指向 国内 CDN 服务商(如阿里云/腾讯云),以代理 Vercel 源站内容,解决 Vercel 在中国无节点的访问问题。

III. 问题汇总与分析 (Issue Summary and Analysis)

我们遇到的所有问题可以分为四大类:

#问题类别具体错误描述根本原因分析解决方案
1数据库连接 (Prisma)P1001: Can't reach database server at db.prisma.io:5432.env 文件中的 DATABASE_URL 使用了占位符域名 db.prisma.io,而不是实际的数据库地址。修正 .env 中的 DATABASE_URL,指向正确的本地或远程数据库地址,并重启服务。
2前端动画 (Tailwind)animate-in CSS 类未生效。tailwind.config.js 文件中缺少对 tailwindcss-animate 插件的注册。tailwind.config.jsplugins 数组中添加 tailwindAnimate 引用。
3CMS 接口部署 (Sanity)混淆 sanity deploysanity graphql deploy 的作用。未理解 Sanity GraphQL API 接口的模式需要手动部署和更新。确认:每次修改 Schema 后,必须运行 sanity graphql deploy 来更新 GraphQL API 接口。
4域名与部署 (Vercel)访问 www.scm-arcadia-blog.xyz404: DEPLOYMENT_NOT_FOUND域名在域名服务商处解析正确,但 Vercel 项目设置中没有添加或绑定 www 子域名。必须在 Vercel Dashboard 的 "Settings" -> "Domains" 中显式添加 www.scm-arcadia-blog.xyz,并等待 Vercel 验证和映射。
5中国访问瓶颈Vercel 部署的博客在中国访问缓慢或无法访问。Vercel 在中国无 CDN 节点,且代码中使用了 Google Fonts 等被墙资源。代码优化: 移除 Google Fonts,切换到系统字体栈。 部署优化: 实施 ICP 备案,并使用国内 CDN 代理 Vercel 源站。

IV. 总结分析

您的博客项目构建在一个健壮且现代化的技术栈之上:

  1. 分层清晰: 内容(Sanity)与应用数据(Prisma)分离,各司其职。
  2. 开发效率高: Next.js 结合 Tailwind CSS 提供了极高的开发效率和出色的性能基础。
  3. 主要瓶颈: 目前主要挑战在于部署阶段,即解决 Vercel 在中国大陆的访问速度问题。这是一个基础设施级的挑战,需要通过额外的国内 CDN 投资来解决。

通过解决这些问题,您不仅修复了当前的 Bug,还学到了在 Serverless 环境中处理数据库连接、优化构建配置以及全球部署的实际经验。

评论

请先登录后再发表评论
加载评论中...