【开源】手把手教你搭建本地IT求职面经分享平台 | Next.js + Supabase + Vercel + Cloudflare 全栈项目,国内访问友好,零成本上线
【开源】手把手教你搭建本地IT求职面经分享平台 | Next.js + Supabase + Vercel + Cloudflare 全栈项目,国内访问友好,零成本上线
本项目完全开源,今天把完整部署教程整理出来,包含Cloudflare免费CDN加速方案,使用dpdns.org免费域名,真正零成本解决国内访问问题,大家可以照着搭一个自己城市的版本。
📌 项目预览
- 线上地址:https://ncbyteinterview.dpdns.org (Cloudflare CDN加速,国内访问友好)
- GitHub地址:https://github.com/longzhu0725/nanchang-it-interview
- 目标城市:南昌(可自行替换成任意城市)
核心功能
| 模块 | 功能说明 |
|---|---|
| 🏢企业库 | 本地IT企业名录(30+家南昌企业),含行业、规模、标签、简介 |
| 📝面经分享 | 面试/笔试经验,支持Markdown、匿名发布、难度评级 |
| ❓问答社区 | 求职提问、回答、采纳最佳答案 |
| 🔐邀请码注册 | 保证社区质量,避免垃圾账号 |
| 👍互动功能 | 点赞、收藏、评论、举报 |
| 👨💼管理后台 | 内容审核、邀请码生成、企业管理 |
技术栈
- 前端框架:Next.js 14 (App Router) + TypeScript
- UI组件:Tailwind CSS + shadcn/ui
- 后端/数据库:Supabase (PostgreSQL + Auth + RLS)
- 托管平台:Vercel(免费)
- CDN加速:Cloudflare(免费)
- 域名:dpdns.org免费域名(零成本),或自有域名
🚀 零成本快速上线(20分钟)
准备工作
全部用免费服务,不需要花一分钱:
| 平台 | 用途 | 官网 |
|---|---|---|
| GitHub | 存放代码 | https://github.com |
| Supabase | 数据库+用户认证 | https://supabase.com |
| Vercel | 网站托管 | https://vercel.com |
| Cloudflare | CDN加速+DNS管理 | https://cloudflare.com |
| DigitalPlat | 免费域名(dpdns.org) | https://dash.domain.digitalplat.org |
💡 域名建议:DigitalPlat提供免费dpdns.org二级域名,可以托管NS到Cloudflare,完美实现CDN加速,零成本!如果想要一级域名,Namesilo买个.xyz域名一年几块钱。
第一步:Fork项目代码
- 打开:https://github.com/longzhu0725/nanchang-it-interview
- 点击右上角Fork到你自己的GitHub账号
第二步:创建Supabase数据库
2.1 新建项目
- 登录 https://supabase.com → New Project
- 填写项目名、数据库密码(记下来)
- 区域选Northeast Asia (Tokyo)或Southeast Asia (Singapore)(离国内近)
- Create,等1-2分钟初始化
2.2 获取密钥
Settings → API,复制三个值保存到记事本:
- Project URL(
https://xxxx.supabase.co) - anon public key(eyJ开头的长字符串)
- service_role key(另一个长字符串,保密!)
2.3 执行数据库初始化SQL
SQL Editor → New query,按顺序执行3个SQL文件:
0001_initial.sql- 表结构、RLS策略、初始企业数据0002_notifications_and_views.sql- 通知、视图0003_fix_admin_profile.sql- 用户触发器、管理员修复(必须执行!)
SQL文件地址:https://github.com/longzhu0725/nanchang-it-interview/tree/main/supabase/migrations
✅ 验证:执行SELECT tablename FROM pg_tables WHERE schemaname = 'public';,能看到profiles/companies/posts等表即成功。
2.4 临时配置认证回调
Authentication → URL Configuration:
- Site URL:
http://localhost:3000 - Redirect URLs:
http://localhost:3000/auth/callback - Save
域名配好后再改回来。
第三步:部署到Vercel
- 登录 https://vercel.com → Add New → Project
- Import你Fork的仓库(没看到就点Adjust GitHub App Permissions授权)
- Environment Variables添加三个变量:
| Name | Value |
|---|---|
NEXT_PUBLIC_SUPABASE_URL | 你的Project URL |
NEXT_PUBLIC_SUPABASE_ANON_KEY | anon key |
SUPABASE_SERVICE_ROLE_KEY | service_role key |
- Deploy,等1-2分钟,得到Vercel默认域名(类似
xxx.vercel.app)
第四步:申请免费域名(已有域名可跳过)
如果你还没有域名,先申请一个免费dpdns.org域名:
- 注册DigitalPlat:https://dash.domain.digitalplat.org/signup
- 需要GitHub账号认证(KYC)
- 需要一个Gmail/Outlook邮箱
- 地址信息可以用美国地址生成器生成
- 登录后点Domain Registration
- 后缀选dpdns.org(推荐,比qzz.io稳定)
- 输入你想要的前缀(如
nanchangit),点Check Availability - 如果没被占用,就注册成功了,保持页面打开不要关
如果你已经有ncbyteinterview.dpdns.org域名,跳过这步。
第五步:Cloudflare配置CDN+DNS(核心!国内访问关键)
这是解决国内访问Vercel慢的核心步骤,免费域名也能用!
5.1 Cloudflare添加站点
- 登录 https://dash.cloudflare.com
- 点添加站点,输入你的完整域名(如
nanchangit.dpdns.org或ncbyteinterview.dpdns.org) - 选Free计划,继续
- DNS记录页面直接点继续
- 关键:复制Cloudflare给的两个Nameserver地址(类似
xxx.ns.cloudflare.com)
5.2 DigitalPlat修改NS服务器
回到DigitalPlat域名注册页面(或My Domains → 你的域名 → 管理):
- 找到Nameservers设置,选择Custom Nameservers
- 填入Cloudflare给的两个NS地址
- 点Register/Save保存
5.3 等待NS生效
回到Cloudflare点"检查名称服务器",等待域名状态变为活动(Active),通常几分钟。
5.4 添加DNS记录
Cloudflare → 你的域名 → DNS → 记录,添加以下记录:
记录1:CNAME指向Vercel
| 类型 | 名称 | 内容 | 代理状态 | TTL |
|---|---|---|---|---|
| CNAME | @ | cname.vercel-dns.com | 🟠 已开启代理(橙色云朵) | Auto |
记录2(如果Vercel提示需要TXT验证):
如果Vercel显示"Verification Needed"和TXT记录要求,添加:
| 类型 | 名称 | 内容 | 代理状态 | TTL |
|---|---|---|---|---|
| TXT | _vercel | Vercel给你的vc-domain-verify=…值 | ⚪ 仅DNS(灰色云朵) | Auto |
记录3(可选):www子域名
| 类型 | 名称 | 内容 | 代理状态 | TTL |
|---|---|---|---|---|
| CNAME | www | cname.vercel-dns.com | 🟠 已开启代理 | Auto |
5.5 SSL配置(必须做!)
Cloudflare → SSL/TLS → 加密模式选Full(不要选Flexible,否则重定向循环)
5.6 开启优化(可选)
- Speed → Optimization:开启Auto Minify(JS/CSS/HTML全勾)、Brotli、HTTP/3
- Caching → Configuration:Browser Cache TTL设为4 hours
第六步:Vercel添加域名验证
- Vercel → 项目 → Settings → Domains
- 添加你的域名(如
ncbyteinterview.dpdns.org) - 等待验证通过(显示绿色✓ Valid Configuration)
- 如果验证不通过:确认TXT记录是灰色云朵,CNAME正确,等待几分钟后点Refresh
第七步:更新Supabase回调地址
Supabase → Authentication → URL Configuration:
- Site URL改为
https://你的域名 - Redirect URLs添加
https://你的域名/auth/callback - 保留localhost和Vercel默认域名的回调地址
- Save
第八步:创建管理员账号
- Supabase → Authentication → Users → Add user → Create new user
- 填写你的邮箱和密码,创建用户
- SQL Editor执行(换成你的邮箱):
INSERTINTOprofiles(id,email,nickname,role)SELECTid,email,split_part(email,'@',1),'admin'FROMauth.usersWHEREemail='你的邮箱@example.com'ONCONFLICT(id)DOUPDATESETrole='admin';- 用管理员账号登录网站,访问
/admin/invite-codes生成邀请码
🎉 部署完成!
访问你的域名测试,国内打开速度应该比Vercel默认域名快很多!
💻 本地开发
gitclone https://github.com/你的用户名/nanchang-it-interview.gitcdnanchang-it-interviewcp.env.local.example .env.local# 编辑.env.local填入三个Supabase密钥npminstallnpmrun dev打开 http://localhost:3000 访问。
推送更新:
gitadd.gitcommit-m"修改说明"gitpushVercel自动部署,1-2分钟线上更新。如果Cloudflare缓存没更新,去Cloudflare → Caching → Purge Everything清缓存。
🏢 扩充南昌企业数据
项目默认6家初始企业,执行 nanchang-companies-data.sql 可扩充到30+家,涵盖华勤、龙旗、欧菲光、华为、阿里、腾讯、科大讯飞、思创数码、泰豪等南昌本地IT企业。
❓ 常见问题FAQ
Q1:Cloudflare配置后重定向过多(ERR_TOO_MANY_REDIRECTS)?
A:SSL/TLS模式选了Flexible,改成Full即可。
Q2:Vercel域名验证一直失败?
A:
- 确认TXT验证记录是灰色云朵(DNS only),橙色云朵会拦截TXT查询
- 多等几分钟DNS传播
- 临时把CNAME也切灰色,验证通过再切回橙色
Q3:DigitalPlat找不到修改NS的地方?
A:My Domains → 点击你的域名进入详情页,找Nameservers或DNS Settings。截图发给我帮你找。
Q4:管理员页面跳回首页?
A:执行SQL:
INSERTINTOprofiles(id,email,nickname,role)SELECTid,email,split_part(email,'@',1),'admin'FROMauth.usersWHEREemail='你的邮箱'ONCONFLICT(id)DOUPDATESETrole='admin';退出重新登录。
Q5:免费域名dpdns.org靠谱吗?
A:DigitalPlat是非营利组织运营的免费域名服务,支持自定义NS,可以托管到Cloudflare,免费续期一年一次,轻量使用完全够用。博主推荐dpdns.org而不是qzz.io,证书申请更稳定。
Q6:更新后网站看不到变化?
A:Cloudflare缓存了旧版本,去Caching → Purge Everything清缓存。开发时可以开启Development Mode。
Q7:国内访问还是不够快?
A:
- 确认CNAME是橙色云朵(Proxied)
- 确认开启Auto Minify、Brotli、HTTP/3
- 添加Page Rule:
*你的域名/*→ Cache Level: Cache Everything,Edge Cache TTL: 1 hour - 进阶用户可以尝试Cloudflare SaaS回源优选IP方案(需要第二个域名+绑定支付方式,有封号风险)
✨ 技术亮点
- Cloudflare CDN免费加速:配合dpdns.org免费域名,零成本解决国内访问问题
- Row Level Security (RLS):数据库层面权限控制,安全可靠
- 邀请码机制:注册入口把关,保证社区质量
- 匿名发布:支持匿名分享,保护用户隐私
- Next.js SSR:服务端渲染,首屏快SEO友好
- TypeScript全栈:类型安全,减少bug
- 响应式设计:手机/平板/PC完美适配
- shadcn/ui极简UI:清爽专注内容
📜 开源协议
MIT License,可自由使用、修改、分发、商用。欢迎Fork做其他城市版本,给原仓库点个Star ⭐ 支持一下!
🙋 最后
如果这篇教程对你有帮助,欢迎点赞、收藏、关注三连!
有问题评论区留言,也可以去GitHub提Issue。
希望这个平台能帮助更多在南昌(或其他城市)找IT工作的朋友们,祝大家都拿到心仪的Offer!💪
相关链接:
- 项目GitHub:https://github.com/longzhu0725/nanchang-it-interview
- 线上地址:https://ncbyteinterview.dpdns.org
- DigitalPlat免费域名:https://dash.domain.digitalplat.org
