项目地址
- 在线预览:frontend-ai-assistant-two.vercel.app/
- GitHub 源码:github.com/hewq/dify-c…
说明:当前在线版本部署在 Vercel,国内网络访问可能不稳定。如果打不开,可以直接查看 GitHub 源码并在本地启动。
前言
上一篇我们给项目加上了质量门禁:
ESLint
Prettier
TypeScript strict
Husky
lint-staged
到这里,项目已经比较完整了。
它不再只是一个能跑的 AI Demo,而是一个具备一定工程结构的 AI 知识库问答应用:
Dify RAG 知识库
DeepSeek 模型
Vite React 前端
Express BFF
SSE 流式输出
Markdown 渲染
引用来源展示
多会话管理
停止生成
自定义 Hook
服务端分层
质量门禁
接下来很自然会遇到一个问题:
项目要部署到哪里?
我们尝试和讨论过几个方案:
Vercel
Render
Railway
国内轻量应用服务器
这篇文章不急着写具体部署命令,而是先分析:
对这个项目来说,这几种部署方式分别适合什么场景?怎么选最划算?
先看项目的部署特点
在选平台之前,先看项目本身是什么结构。
当前项目是:
Vite React 前端
+ Express BFF 后端
+ Dify streaming 代理
本地开发时是:
Browser
↓
Vite Dev Server
↓
Express /api/chat/stream
↓
Dify API
↓
DeepSeek + Knowledge Base
生产部署时,理想结构是:
用户浏览器
↓
Node / Express 服务
├─ 返回 React dist 静态文件
└─ /api/chat/stream 代理 Dify SSE
也就是说,这个项目并不是一个纯静态前端项目。
它有几个关键要求:
1. 需要服务端保存 Dify API Key
2. 需要后端代理 Dify API
3. 最好支持 SSE 流式响应
4. 最好不要把前后端拆得太复杂
5. 如果面向国内用户,访问稳定性要考虑
所以它和普通 Vite 静态站不完全一样。
方案一:Vercel
Vercel 对前端开发者非常友好。
尤其是 Vite / React / Next.js 这类项目,部署体验很好。
优点
1. 上手非常简单
2. GitHub 连接方便
3. 免费 Hobby 计划适合个人项目
4. Vite 静态前端部署体验好
5. 自动生成线上预览地址
6. 适合作品展示
如果项目是纯前端,比如:
Vite React 静态页面
调用公开 API
无自定义 Node 服务
Vercel 非常合适。
缺点
但我们的项目有 Express BFF 和 SSE streaming。
Vercel 更适合 Serverless / Edge Functions,而不是长期运行的完整 Express 服务。
所以如果直接用 Vercel,需要做一些改造:
1. 把 Express 接口改成 Vercel API Route
2. 或者把线上版本降级成 blocking 模式
3. SSE 流式代理需要额外适配
4. 本地 Express 结构和线上 Serverless 结构不完全一致
另外,Vercel 默认的 *.vercel.app 域名在国内访问经常不稳定。
可能出现:
页面打不开
加载很慢
API 请求超时
流式响应不稳定
所以如果你的主要用户在国内,不能完全依赖 Vercel 默认域名。
当前项目怎么用 Vercel?
我最终的做法是:
Vercel 用作作品展示
线上版本可以先使用 blocking API
本地保留完整 Express streaming 版本
也就是说,Vercel 适合:
给面试官看项目链接
放 README 在线预览
快速验证前端页面
但不一定适合:
国内用户长期稳定访问
完整保留 Express streaming 生产能力
方案二:Render
Render 更像传统 PaaS。
它适合部署一个完整的 Node / Express Web Service。
对当前项目来说,Render 的结构非常匹配:
Express 服务
├─ 托管 Vite dist
└─ 提供 /api/chat/stream
优点
1. 适合完整 Node / Express 服务
2. 可以保留 SSE streaming
3. 前后端可以合并成一个服务
4. 不用改成 Serverless
5. 配置 Build Command / Start Command 很直观
如果能顺利创建服务,Render 部署方式很清晰:
Build Command: npm install && npm run build
Start Command: npm run start
然后配置环境变量:
DIFY_API_KEY=xxx
DIFY_API_URL=https://api.dify.ai/v1/chat-messages
DIFY_USER=frontend-ai-assistant-prod
缺点
我们实际尝试时遇到一个问题:Render 要求绑定银行卡/信用卡。
页面提示会做 1 美元临时验证授权。
如果你不想绑卡,Render 就不太适合继续。
另外,Render 免费服务也可能有冷启动问题。
所以 Render 更适合:
可以接受绑卡验证
想部署完整 Node 服务
不想自己买服务器
项目只是个人作品或小型服务
方案三:Railway
Railway 和 Render 类似,也适合部署完整 Node 服务。
相比 Vercel,它更适合当前项目的 Express streaming 结构。
优点
1. 适合完整 Express 服务
2. 可以保留 streaming 版本
3. GitHub 导入比较方便
4. 环境变量配置简单
5. 比 Vercel 更接近本地运行方式
部署后结构仍然可以是:
Node Express
├─ 静态托管 dist
└─ /api/chat/stream
不需要把 Express 改成 Vercel API Route。
缺点
Railway 不是永久免费。
它可能有试用额度,但长期使用要考虑费用。
另外,它在国内访问也不一定稳定,只是比 vercel.app 的问题稍微不同。
所以 Railway 适合:
想保留 Express streaming
不想自己维护服务器
接受平台用量计费
先试部署流程
方案四:国内轻量应用服务器
如果主要考虑国内访问稳定性,国内轻量服务器是最稳的方案。
比如:
腾讯云轻量应用服务器
阿里云轻量应用服务器
华为云云耀服务器
部署结构是:
用户浏览器
↓
Nginx :80 / :443
↓
Express :3001
├─ React dist
└─ Dify streaming proxy
优点
1. 国内访问稳定
2. 可以完整保留 Express streaming
3. 可以自己控制 Nginx / PM2 / Node
4. 更接近真实生产部署
5. 可以学习 Linux、Nginx、PM2、CI/CD
如果你想继续提升全栈工程能力,服务器非常有学习价值。
你会接触到:
SSH 登录
Linux 命令
Node 运行环境
Nginx 反向代理
PM2 进程守护
防火墙端口
域名解析
HTTPS 证书
部署脚本
自动化发布
日志排查
这些都是前端往全栈 / 架构方向成长很有用的能力。
缺点
但如果只是为了部署这个 Demo,买服务器可能不划算。
它会带来额外成本:
服务器费用
时间成本
运维成本
安全配置
域名备案
如果只用 IP 访问,可以暂时不用备案。
但如果绑定国内域名正式对外访问,通常需要备案。
所以国内服务器更适合:
项目已经比较完整
想长期运行
想练 Linux / Nginx / PM2 / CI/CD
主要用户在国内
接受一定费用和运维成本
不太适合:
只是想临时展示一下 Demo
还不确定项目要不要继续做
不想花钱和维护服务器
为什么最后没有马上买服务器?
一开始我们确实准备买腾讯云轻量应用服务器。
推荐配置大概是:
Ubuntu 22.04
2 核 2G
40G SSD
3Mbps 带宽
这对当前项目完全够用,因为模型计算不在服务器上,服务器只负责:
静态页面
Express API
Dify SSE 转发
但后来重新判断了一下:
如果只是为了部署这个 Demo,暂时买服务器不划算。
因为后续学习还有很多内容可以先在本地完成:
数据库
用户系统
服务端会话存储
文件上传
知识库管理
监控
日志
Docker
CI/CD
等项目进一步完善后,再买服务器统一部署,性价比更高。
所以当前阶段更合理的选择是:
短期:Vercel 做作品展示
本地:继续完整开发 Express streaming 版本
后续:数据库、登录、文件上传完成后,再考虑国内服务器部署
这几个方案怎么选?
可以按目标来选。
只是想快速有个在线地址
选:
Vercel
适合:
作品展示
README 放链接
快速上线前端页面
但要接受:
国内访问不稳定
Express streaming 需要改造
想部署完整 Express 服务,又不想买服务器
选:
Railway 或 Render
适合:
保留 Express BFF
保留 streaming
不用自己运维 Linux
但要接受:
平台费用或绑卡验证
国内访问不一定稳定
想让国内稳定访问,并练部署运维
选:
国内轻量服务器
适合:
长期运行
完整部署链路
学习 Linux / Nginx / PM2
后续做 CI/CD
但要接受:
服务器费用
运维成本
域名备案问题
当前项目的推荐策略
我对这个项目的推荐策略是:
第一阶段:Vercel 展示 + 本地开发
第二阶段:本地接入 SQLite / Prisma
第三阶段:加入登录和服务端会话存储
第四阶段:再考虑国内轻量服务器
第五阶段:做 Docker + CI/CD 自动部署
这样学习路径更自然。
不要为了“部署”过早买服务器。
更合理的是:等项目真正需要长期运行、需要数据库、需要用户系统时,再把服务器当成完整工程能力的一部分来学。
不同平台对当前项目的适配总结
可以简单总结成一张表:
Vercel
- 优点:免费、简单、适合作品展示
- 缺点:国内访问不稳,Express streaming 需要改造
- 适合:展示版、前端页面、临时预览
Render
- 优点:适合完整 Node 服务,能保留 Express streaming
- 缺点:可能要求绑卡,免费服务有冷启动
- 适合:能接受绑卡的小型 Node 服务
Railway
- 优点:适合完整 Express 服务,部署体验简单
- 缺点:不是永久免费,国内访问不一定稳定
- 适合:想快速部署完整后端服务
国内轻量服务器
- 优点:国内访问稳定,完整可控,适合学习部署运维
- 缺点:要花钱,要维护,绑定域名需备案
- 适合:长期运行、完整生产化练习
如果用国内服务器,部署链路大概是什么?
虽然当前阶段先不买服务器,但可以先了解完整链路。
服务器上一般会安装:
Node.js
Git
Nginx
PM2
部署流程大概是:
# 拉代码
git clone https://github.com/hewq/dify-chat-demo.git
# 安装依赖
npm install
# 配置环境变量
nano .env
# 构建前端
npm run build
# 用 PM2 启动服务
pm2 start npm --name frontend-ai-assistant -- run start
# 配置 Nginx 反向代理
# 80 -> 127.0.0.1:3001
Nginx 里还要注意 SSE:
proxy_buffering off;
proxy_cache off;
否则流式输出可能被缓冲成一次性返回。
这部分可以等真正部署时单独写一篇。
当前线上版本为什么放 Vercel?
当前项目的在线地址是:
https://frontend-ai-assistant-two.vercel.app/
这是为了方便展示项目效果。
但需要说明:
1. Vercel 国内访问可能不稳定
2. 在线版本不一定完全等同本地完整 Express streaming 版本
3. 更推荐通过 GitHub 源码本地运行体验完整功能
所以 README 和文章开头都加了说明:
当前在线版本部署在 Vercel,国内网络访问可能不稳定。如果打不开,可以直接查看 GitHub 源码并在本地启动。
本篇总结
这一篇主要分析了当前项目的部署方案选择。
结论是:
Vercel:适合作品展示,但国内访问不稳定,Express streaming 要改造
Render:适合完整 Node 服务,但可能要求绑卡
Railway:适合完整 Express 服务,但不是永久免费
国内轻量服务器:最稳定、最可控,但有费用和运维成本
对当前阶段来说,最合理的选择是:
先不急着买服务器
继续用 Vercel 做展示
本地保留完整开发环境
先把数据库、用户系统等核心能力补上
等项目更完整后,再统一做国内服务器部署
下一篇我们回到功能开发主线:
从 localStorage 迁移到数据库,用 SQLite + Prisma 保存会话和消息。