/blog/post-1785058598455/博客
READY
技术笔记

上线实战:30分钟将AI全栈应用部署到Vercel + Supabase

2026-07-26约 6 分钟

一、部署概览与架构选型

本次上线的是一款**集成AI能力的个人技术品牌平台**(包含作品集、AI简历优化、面试模拟、RAG知识助手等功能)。为了兼顾开发效率和免费额度,我选择了这套组合拳:

前端/后端一体化:Next.js (App Router)

数据库与认证:Supabase(PostgreSQL + pgvector 向量插件)

AI大模型:DeepSeek(推理) + SiliconFlow(BGE-M3 嵌入向量,免费)

部署阵地:Vercel(Hobby 免费版)

整体耗时:按顺序执行,约 30~40分钟*即可让服务在全球CDN上跑起来。

二、第一步:Supabase 项目初始化(含 pgvector)

Supabase 不只是数据库,它还管着认证和实时订阅。这一步不能只建表,还得把**向量检索**的环境搭好。

1. 新建项目:去 [supabase.com](https://supabase.com) 点“New project”,免费版足够用。**区域选择**建议新加坡或东京,国内访问延迟相对低一些。

2. “执行SQL脚本”:进入 SQL Editor,按顺序跑两个文件:

  • schema.sql:这里面不仅建了业务表,还启用了 pgvector 扩展,并创建了基于余弦距离的检索函数(这是后面RAG知识库的基石)。

  • rls.sql:行级安全策略。Supabase 默认墙掉了所有外部访问,必须靠 RLS 放行,否则前端调接口全报 401。

3. “记下三把钥匙”:到 **Settings → API** 抄下来:

  • Project URL(请求地址)

  • anon public key(前端公钥,公开的)

  • service_role key(后端特权密钥,**绝不能泄露到前端**)

三、第二步:GitHub OAuth 配置(最容易翻车的环节)

用户登录用的是 GitHub OAuth,这里**回调地址的坑**我折腾了十分钟,大家直接照抄我的配置能避雷。

1. GitHub OAuth App 设置

去 GitHub Developer settings 新建 OAuth App:

- Homepage URL:本地开发填 http://localhost:3000(上线后记得改生产域名)。

- Authorization callback URL:**必须是** https://<你的项目ref>.supabase.co/auth/v1/callback。

> 注意:这个回调是发给 Supabase 的,不是发给你的 Next.js 站点!因为 OAuth 流程由 Supabase Auth 托管。

拿到 Client ID 和 Secret 后,去 Supabase Dashboard 的 **Authentication → Providers** 打开 GitHub 开关,填进去。

2. 重定向白名单

在 **Authentication → URL Configuration** 中:

- Site URL:本地填 http://localhost:3000。

- Redirect URLs:必须加上 http://localhost:3000/auth/callback(Next.js 处理回调的路由)。

四、第三步:AI 密钥准备(成本控制)

本次项目用了两家 AI 服务商:

1. DeepSeek:负责复杂的推理任务(如JD匹配、简历润色)。去 platform.deepseek.com 创建 Key,**确认账户余额 > 0**(哪怕充1块钱,防止接口因余额不足报错)。

2. SiliconFlow:负责 BGE-M3 向量嵌入,好消息是目前**完全免费**。去 cloud.siliconflow.cn 创建 Key 即可。

五、第四步:本地验证(强烈推荐)

别急着直接上生产,先用本地环境跑通全链路:

```bash
cd dev-platform
cp .env.example .env.local   # 把上面拿到的所有 Key 填进去
npm run dev


打开 `http://localhost:3000\`\[,点击登录走一遍\](http://localhost:3000\`,点击登录走一遍) GitHub 授权。如果登录后顶部导航出现了 \*\*“管理”\*\* 分组,说明认证和角色权限打通了。

此时去 Supabase 的 \*\*Authentication → Users\*\* 里复制你本人的 UID,填到 `.env.local` 的 `ADMIN_USER_ID` 中——这样你才有后台管理的最高权限。

六、第五步:Vercel 生产部署(关键步骤)

代码推送到 GitHub 后,在 Vercel 导入项目。这里有一个极易忽略的致命细节:

🌟 Root Directory 必须设为 dev-platform!
因为代码仓库的根目录可能包含其他文档,而 Next 应用在子文件夹里,不指定这个,Vercel 会找不到 package.json 直接构建失败。

环境变量注入(Production)

在 Vercel 项目设置中,填入以下环境变量(切记区分 NEXT_PUBLIC_* 前缀):

变量名说明NEXT_PUBLIC_SUPABASE_URLSupabase 地址NEXT_PUBLIC_SUPABASE_ANON_KEY前端匿名密钥SUPABASE_SERVICE_ROLE_KEY服务端特权密钥(用于绕过 RLS 做数据初始化)DEEPSEEK_API_KEYDeepSeek 密钥SILICONFLOW_API_KEYSiliconFlow 密钥ADMIN_USER_ID你的管理员 UIDNEXT_PUBLIC_SITE_URLhttps://你的Vercel域名DAILY_TOKEN_LIMIT500000(AI 用量日限额,防刷)

点击 Deploy,等待 3~5 分钟构建结束。部署成功后,记得回 Supabase 和 GitHub 把 OAuth 的 Site URL 和 Homepage URL 都改成生产域名,否则线上登录会报“重定向不匹配”。


七、第六步:上线后初始化(让数据活起来)

部署完成不代表结束,还需要做两件重要的事:

  1. 导入初始数据:通过 /projects/import 导入几个真实项目,再发一篇博客,不然首页空荡荡。

  2. 重建向量索引(RAG 灵魂操作):为了让 AI 知识助手能基于你的博客和项目回答问题,必须把文本转为向量存进 Supabase。在登录状态下,打开浏览器控制台执行:

    js

    fetch('/api/admin/reindex', {method: 'POST'}).then(r => r.json()).then(console.log)
    

    等待执行完毕,向量数据库里就有了你的专属知识库。

  3. 最后去 /settings 填好个人简介和头像,首页 Hero 区域就会展示你的信息了。


八、部署验收清单(对照 PRD)

上线后建议逐项打钩,确保核心链路没断:

  • □

    访客可浏览博客、项目详情、个人主页(无需登录)

  • □

    管理员登录后可进入后台管理

  • □

    上传 README.md,AI 能解析并自动预填项目表单

  • □

    粘贴招聘 JD,AI 能匹配项目库中的关联项目

  • □

    AI 简历生成后导出 PDF(重点实测:检查中文字体是否乱码,若失败按注释切换本地字体源)

  • □

    技能缺口分析能识别短板并推荐方案

  • □

    面试题库可基于 JD 生成分类题目

  • □

    模拟面试多轮对话正常,能出评估报告

  • □

    AI 助手能基于项目库和博客流式回答访客提问

  • □

    Token 用量统计正常(/settings/usage)

  • □

    日历和热力图正常渲染

  • □

    暗色主题(明日方舟风格)适配完整


九、避坑指南 & 已知问题

  1. PDF 中文字体:项目运行时依赖 jsdelivr CDN 加载 Noto Sans SC 字体,导出 PDF 必须联网。如果导出空白,打开控制台看字体加载是否 404。

  2. Vercel 免费版超时限制:Hobby 计划函数最大执行 60s。本项目已将简历生成等长耗时操作拆分为多个独立请求,避免单次超时。

  3. Supabase 免费容量:500MB 数据库足够,但注意清理测试数据。

  4. Next.js 16 弃用警告:控制台可能会报 middleware 迁移提示,这属于 Next 自身升级的兼容警告,不影响业务功能,可以后续再优化。

  5. OG 分享图:目前没有动态生成,建议放一张 1200×630 的 PNG 到 public/ 作为兜底。


十、结语

从本地代码到公网可访问,短短半小时其实浓缩了数据库运维、身份认证、AI密钥管理和边缘部署的整套流程。相比于传统的买服务器、配Nginx、装Python环境,Vercel + Supabase 的 Serverless 体验确实省心不少。希望这份实录能帮你避开那些隐藏的“回调坑”和“根目录坑”。

如果你的项目也在部署中遇到了奇怪的问题,欢迎在评论区一起交流。


(项目代码已私有化托管,核心部署流程如上,供同好参考)