用 Next.js 搭建了一个博客,发布上线啦!
为什么不用现成的博客框架
初初的想法也很朴素,自建博客自由度更高一点,想怎么搞怎么搞,后面想自定义一些功能也很方便,再加上现在有了 AI Coding,产生一个想法到编码实践,真的是分分钟的事情了。
另外也是想着借这个机会,用 Next.js 的 App Route、Server Components 这套东西用一遍,练练手。
技术栈选型
| 层 | 选型 |
|---|---|
| 框架 | Next.js 16(App Router) |
| 数据库 | Supabase(Postgres) |
| ORM | Drizzle |
| 认证 | 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)。步骤大概是这样:
- 导入仓库:Vercel 从 GitHub 导入,框架选 Next.js,构建命令
pnpm build。 - 配置环境变量:
| 变量 | 用途 |
|---|---|
| DATABASE_URL_POOLER | 运行时用 Supabase 连接池(端口 6543) |
| DATABASE_URL | 仅本地 Drizzle 迁移用,直连 5432 |
| AUTH_GITHUB_ID / AUTH_GITHUB_SECRET | GitHub OAuth |
| AUTH_SECRET | 会话签名密钥 |
| AUTH_URL / SITE_URL | 正式域名 https://jiangruijian.com |
| ADMIN_EMAILS | 允许登录后台的 GitHub 邮箱(逗号分隔) |
- 对接自定义域名 + Cloudflare:在 Vercel 加
jiangruijian.com和www,然后去 Cloudflare 加 DNS——根域A记录指向76.76.21.21,www加CNAME指向cname.vercel-dns.com,都开代理(橙云)。SSL/TLS 设为 Full (strict),并开 Always Use HTTPS。 - GitHub OAuth 回调:把回调地址改成
https://jiangruijian.com/api/auth/callback/github。
结尾
到这里,基本上就能把一个网站发上线了。但是啊中间还有好多过程,未来还有好多内容可以做的。赶着发布,今天就像这样吧,边做边学习,边做边分享。后面再聊聊其他的东西吧~