返回文章列表

用 Next.js 搭建了一个博客,发布上线啦!

9 次阅读

为什么不用现成的博客框架

初初的想法也很朴素,自建博客自由度更高一点,想怎么搞怎么搞,后面想自定义一些功能也很方便,再加上现在有了 AI Coding,产生一个想法到编码实践,真的是分分钟的事情了。

另外也是想着借这个机会,用 Next.js 的 App Route、Server Components 这套东西用一遍,练练手。

技术栈选型

选型
框架Next.js 16(App Router)
数据库Supabase(Postgres)
ORMDrizzle
认证Auth.js(NextAuth v5)· GitHub OAuth
样式Tailwind CSS v4
正文渲染react-markdown + remark-gfm + rehype-pretty-code(shiki 高亮)
后台编辑器@mdxeditor/editor

选择 Next.js 也没别的原因了,因为网站本身就是想白嫖服务器资源的,选择好像就只有两个:要么部署在 Vercel,要么就部署到 Cloudflare。然后又因为一个博客网站,要SEO要服务端渲染,就没想着前后端分离了,直接 Next.js 一把梭,那目前还是部署到 Vercel 来的方便。如果哪天要迁移了,还可以看肉山大佬的迁移方案文章:Cloudflare Workers + Supabase + Hyperdrive 最佳实践(2026):连接池与低延迟查询。我也是偶尔刷到他的个人网站,才想着要不自己也做一个博客哈哈。

部署到 Vercel

因为不能静态导出,托管基本就锁定 Vercel(或同类能跑 Node 的 PaaS)。步骤大概是这样:

  1. 导入仓库:Vercel 从 GitHub 导入,框架选 Next.js,构建命令 pnpm build
  2. 配置环境变量:
变量用途
DATABASE_URL_POOLER运行时用 Supabase 连接池(端口 6543)
DATABASE_URL仅本地 Drizzle 迁移用,直连 5432
AUTH_GITHUB_ID / AUTH_GITHUB_SECRETGitHub OAuth
AUTH_SECRET会话签名密钥
AUTH_URL / SITE_URL正式域名 https://jiangruijian.com
ADMIN_EMAILS允许登录后台的 GitHub 邮箱(逗号分隔)
  1. 对接自定义域名 + Cloudflare:在 Vercel 加 jiangruijian.comwww,然后去 Cloudflare 加 DNS——根域 A 记录指向 76.76.21.21wwwCNAME 指向 cname.vercel-dns.com,都开代理(橙云)。SSL/TLS 设为 Full (strict),并开 Always Use HTTPS
  2. GitHub OAuth 回调:把回调地址改成 https://jiangruijian.com/api/auth/callback/github

结尾

到这里,基本上就能把一个网站发上线了。但是啊中间还有好多过程,未来还有好多内容可以做的。赶着发布,今天就像这样吧,边做边学习,边做边分享。后面再聊聊其他的东西吧~