保健品DTC独立站技术栈分析报告
> 日期:2026-07-04
> 目标:以开源工具为主,尽快搭建保健品DTC独立站并上线
一、你提出的技术栈分析
原始方案:Next.js 15 + Strapi + PostgreSQL + Stripe + Cloudflare
┌──────────────────────────────────────────┐
│\ \ Next\.js\ 15\ \(App\ Router\ \+\ RSC\)\ \ \ \ \ \ \ \ \ \ \ │\ \ ←\ 前端\ \+\ SSR
│\ \ Cloudflare\ CDN\ \+\ DNS\ \+\ Edge\ 缓存\ \ \ \ \ \ \ \ │\ \ ←\ 全球加速
├──────────────────────────────────────────┤
│\ \ Strapi\ \(Headless\ CMS\)\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ │\ \ ←\ 内容管理
│\ \ PostgreSQL\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ │\ \ ←\ 数据存储
├──────────────────────────────────────────┤
│\ \ Stripe\ Checkout\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ │\ \ ←\ 支付
└──────────────────────────────────────────┘
评估
优点:
- Next.js 15 + RSC 是目前前端性能最优选择之一
- Strapi 开源、社区大、可视化内容建模
- PostgreSQL 稳定可靠
- Stripe 支付集成最简单
- Cloudflare 全球 CDN + 边缘缓存
核心问题:
- Strapi 不是电商系统 — 没有购物车、订单、库存、SKU、促销等电商核心功能,你需要自己从零写
- Strapi 做 CMS 可以,做 Commerce 很勉强 — 它的 Content API 不是为了高频电商查询设计的
- 开发量巨大 — 用 Strapi 搭建电商,等于把 Medusa/Shopify 的功能重做一遍
- Strapi 的权限/审计/多语言 虽好,但对保健品独立站来说不是刚需
- 使用 Judge.me 或集成 Medusa Reviews 插件
- 支持带图评价
- 自动邀请已购买用户留评
- 用 Medusa 做电商核心 — 不要自己写购物车/订单/库存
- Stripe Checkout 做支付 — 最省事的方案,PCI合规不用管
- Vercel 部署前端 + Railway 部署后端 — 免费额度够起步
- Cloudflare 做 DNS + CDN — 免费套餐够用
- 博客用 Strapi 或直接用 Next.js MDX — 如果内容不多,MDX 更简单
- Strapi CMS — 如果博客内容少,先用 Next.js MDX,后续再迁移
- 多语言 — 上线后再加
- 多仓库库存 — 初期一个仓库足够
- 复杂促销规则 — 先用折扣码,后期再加
- 用 Strapi 自建电商 — 重复造轮子,开发周期翻倍
- 自建支付系统 — Stripe 已经完美解决
- 过度自定义 Medusa — 先用官方 Starter,按需改
- [DTC独立站开发与运营指南]
- [全栈开发知识体系与数学原理]
- [主流开发语言框架与工具演化史]
结论:Strapi 作为 CMS 用于产品详情页的内容管理可以,但不应承担电商核心功能。
二、更好的开源方案推荐
推荐方案:Next.js 15 + Medusa + PostgreSQL + Stripe + Cloudflare
┌──────────────────────────────────────────┐
│\ \ Next\.js\ 15\ \(App\ Router\ \+\ RSC\)\ \ \ \ \ \ \ \ \ \ \ │\ \ ←\ 前端\ Storefront
│\ \ Cloudflare\ CDN\ \+\ DNS\ \+\ Edge\ 缓存\ \ \ \ \ \ \ \ │\ \ ←\ 全球加速
├──────────────────────────────────────────┤
│\ \ Medusa\ \(Open\-Source\ Headless\ Commerce\)\ \ │\ \ ←\ 电商核心\ ⭐
│\ \ PostgreSQL\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ │\ \ ←\ 订单/产品/库存
├──────────────────────────────────────────┤
│\ \ Stripe\ \(Payments\)\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ │\ \ ←\ 支付
│\ \ Strapi\ \(可选,仅用于博客/内容\)\ \ \ \ \ \ \ \ \ \ │\ \ ←\ 内容管理
└──────────────────────────────────────────┘
为什么选 Medusa 而不是 Strapi Commerce
| 维度 | Medusa | Strapi (自建电商) |
| ---- | ------------------------ | ------------------- |
| 电商功能 | 开箱即用(产品/库存/订单/促销/订阅) | 需要从零开发 |
| 订阅模式 | 内置 Recharge 替代方案 | 需自建 |
| 结账流程 | 完整 Checkout 流程 | 需自建 |
| 库存管理 | 多仓/批次/SKU变体 | 需自建 |
| 促销系统 | 折扣码/满减/捆绑 | 需自建 |
| 管理后台 | 自带 Admin Dashboard | 需自建或使用 Strapi Admin |
| 社区模板 | 官方 Next.js Starter(开箱即用) | 无电商模板 |
| 开发时间 | 2-4周可上线 MVP | 3-6个月 |
| 许可证 | MIT(完全免费) | MIT(但电商功能要自己写) |
备选方案对比
| 方案 | 电商引擎 | 前端 | 适合场景 |
|------|---------|------|---------|
| ⭐ 推荐 | Medusa | Next.js | 开源、灵活、保健品订阅 |
| 备选A | Shopify Headless | Next.js | 最快上线、付费方案 |
| 备选B | Vendure | Next.js | TypeScript原生、复杂场景 |
| 备选C | Saleor | Next.js | Python/Django后端 |
| 自建CMS | Strapi | Next.js | 不需要电商,纯内容站 |
为什么不选 Shopify? 虽然最快,但有月费+交易费+闭源限制。你的目标是开源方案。
为什么不选 Vendure? 更强大但学习曲线陡,Node.js + NestJS + GraphQL,团队小初期不值得。
三、Medusa + Next.js 完整技术栈
核心组件
前端\ Storefront:
\ \ ├──\ Next\.js\ 15\ \(App\ Router\ \+\ React\ Server\ Components\)
\ \ ├──\ TypeScript
\ \ ├──\ Tailwind\ CSS\ \+\ shadcn/ui
\ \ ├──\ Next\.js\ Image\ \(配合\ Cloudflare\)
\ \ ├──\ Stripe\ Checkout\ \(服务端集成\)
\ \ ├──\ Medusa\ JS\ Client\ \(前端调用\)
\ \ ├──\ React\ Hook\ Form\ \+\ Zod\ \(表单验证\)
\ \ └──\ Sentry\ \(错误监控\)
后端\ Commerce:
\ \ ├──\ Medusa\ Server\ \(Node\.js\)
\ \ ├──\ PostgreSQL\ \(数据库\)
\ \ ├──\ Redis\ \(缓存\ \+\ 队列\)
\ \ ├──\ Stripe\ Plugin\ \(支付\)
\ \ ├──\ Medusa\ Subscribers\ \(订阅/复购\)
\ \ └──\ Medusa\ Promotions\ \(促销/折扣\)
CMS\ \(可选\):
\ \ └──\ Strapi\ \(仅用于博客/内容\)
\ \ \ \ \ \ └──\ 通过\ API\ 供\ Next\.js\ 读取
部署:
\ \ ├──\ Next\.js\ →\ Vercel\ \(前端\ SSR\)
\ \ ├──\ Medusa\ →\ Railway\ /\ Fly\.io\ /\ DigitalOcean\ \(后端\)
\ \ ├──\ PostgreSQL\ →\ 各平台托管或\ Supabase
\ \ ├──\ Redis\ →\ Upstash\ \(Serverless\ Redis\)
\ \ ├──\ 图片\ →\ Cloudflare\ R2\ 或\ Medusa\ File\ Module
\ \ └──\ Cloudflare\ →\ DNS\ \+\ CDN\ \+\ SSL
费用估算(月)
| 项目 | 方案 | 费用 |
|------|------|------|
| 前端部署 | Vercel Hobby | $0 |
| 后端部署 | Railway Starter | $5 |
| PostgreSQL | Railway / Supabase | $0-5 |
| Redis | Upstash Free | $0 |
| 图片存储 | Cloudflare R2 | $0 (首10万请求免费) |
| Stripe | 按交易抽成 | 2.9% + $0.30/笔 |
| Strapi CMS | 自建 | $0 |
| 合计 | | $5-15/月 |
四、开发步骤(从0到上线)
Phase 0:环境搭建(第1天)
\#\ 1\.\ 安装\ Medusa
npm\ install\ medusa\-cli\ \-g
medusa\ new\ medusa\-backend
\#\ 2\.\ 配置\ PostgreSQL
\#\ Railway\ 创建\ PostgreSQL\ 实例
\#\ 或本地\ docker\ run\ postgres
\#\ 3\.\ 配置\ Stripe
\#\ Stripe\ Dashboard\ 创建账号
\#\ 获取\ publishable_key\ \+\ secret_key
\#\ 4\.\ 初始化\ Medusa
cd\ medusa\-backend
medusa\ develop
\#\ 访问\ http://localhost:9000\ 确认运行
Phase 1:Medusa 后端配置(第2-3天)
\#\ 1\.\ 安装必要插件
npm\ install\ @medusajs/medusa\ stripe\ @medusajs/payment\-stripe
\#\ 2\.\ 配置支付
\#\ medusa\-backend/config/env/\.env
STRIPE_API_KEY=sk_live_xxx
STRIPE_WEBHOOK_SECRET=whsec_xxx
\#\ 3\.\ 创建产品类别(保健品分类)
\#\ 通过\ Medusa\ Admin\ 或\ API\ 创建:
\#\ \ \ /categories\ →\ 维生素\ /\ 蛋白质\ /\ 益生菌
\#\ \ \ /product\-types\ →\ 胶囊\ /\ 粉末\ /\ 液体
\#\ 4\.\ 创建促销规则
\#\ \ \ /discounts\ →\ 首次订阅8折\ /\ 买2送1
\#\ \ \ /shipping\-options\ →\ 标准快递\ /\ 加急
\#\ 5\.\ 配置订阅(复购)
\#\ Medusa\ 内置\ subscription\ 模块
\#\ 或安装\ @medusajs/medusa\-plugin\-subscription
Phase 2:Next.js Storefront 开发(第4-14天)
\#\ 1\.\ 使用官方\ Starter(最快路径)
git\ clone\ https://github\.com/medusajs/nextjs\-starter\-medusa\.git
cd\ nextjs\-starter\-medusa
npm\ install
cp\ \.env\.local\.example\ \.env\.local
\#\ 2\.\ 配置环境变量
\#\ MEDUSA_BACKEND_URL=http://localhost:9000
\#\ NEXT_PUBLIC_MEDUSA_BACKEND_URL=https://api\.yourdomain\.com
\#\ STRIPE_PUBLIC_KEY=pk_live_xxx
\#\ NEXT_PUBLIC_DEFAULT_REGION=us
\#\ 3\.\ 运行开发服务器
npm\ run\ dev
\#\ 访问\ http://localhost:8000
需要自定义的部分:
app/
├──\ \(shop\)/\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \#\ 商店页面
│\ \ \ ├──\ page\.tsx\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \#\ 首页(Hero\ \+\ 明星产品)
│\ \ \ ├──\ products/
│\ \ \ │\ \ \ ├──\ page\.tsx\ \ \ \ \ \ \ \ \ \ \ \#\ 产品列表
│\ \ \ │\ \ \ └──\ \[slug\]/page\.tsx\ \ \ \ \#\ 产品详情
│\ \ \ ├──\ cart/\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \#\ 购物车
│\ \ \ ├──\ checkout/\ \ \ \ \ \ \ \ \ \ \ \ \ \ \#\ 结账
│\ \ \ └──\ account/\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \#\ 用户账户
├──\ blog/\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \#\ 博客(从\ Strapi\ 读取)
├──\ legal/\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \#\ 法律页面
│\ \ \ ├──\ privacy/
│\ \ \ ├──\ terms/
│\ \ \ └──\ disclaimer/\ \ \ \ \ \ \ \ \ \ \ \ \#\ FDA\ 免责声明
└──\ api/\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \#\ API\ Routes
\ \ \ \ ├──\ stripe/webhook/route\.ts
\ \ \ \ └──\ subscribe/route\.ts\ \ \ \ \ \#\ 订阅管理
Phase 3:保健品定制开发(第15-21天)
1. 产品详情页定制
//\ 保健品产品页需要额外字段:
//\ \-\ Supplement\ Facts\ 面板(成分剂量表)
//\ \-\ 使用方法
//\ \-\ 警告/禁忌
//\ \-\ 认证徽章(GMP,\ Non\-GMO,\ USDA\ Organic)
//\ \-\ 客户评价(带图片)
//\ \-\ 订阅选项(一次性购买\ vs\ 定期配送)
2. 订阅购买流程
产品页\ →\ 选择规格\ →\ 选择频率(每周/每两周/每月)→\
加入购物车\ →\ 结账(Stripe)→\ 订阅管理(用户后台)
3. FDA 免责声明组件
每个产品页底部固定显示:
"These\ statements\ have\ not\ been\ evaluated\ by\ the\ Food\ and\ Drug\ Administration\.
This\ product\ is\ not\ intended\ to\ diagnose,\ treat,\ cure,\ or\ prevent\ any\ disease\."
4. 评价系统
Phase 4:SEO 优化(第22-25天)
//\ 1\.\ 动态\ metadata(Next\.js\ 15)
export\ async\ function\ generateMetadata\(\{\ params\ \}\)\ \{
\ \ const\ product\ =\ await\ getProduct\(params\.slug\)
\ \ return\ \{
\ \ \ \ title:\ `\$\{product\.name\}\ \|\ JulyDeer\ Supplements`,
\ \ \ \ description:\ product\.meta_description,
\ \ \ \ openGraph:\ \{
\ \ \ \ \ \ images:\ \[product\.main_image\],
\ \ \ \ \},
\ \ \}
\}
//\ 2\.\ 结构化数据(Product\ Schema)
//\ 3\.\ 博客内容(从\ Strapi\ 读取,SSR\ 渲染)
//\ 4\.\ sitemap\.xml\ 自动生成
//\ 5\.\ robots\.txt\ 配置
Phase 5:部署上线(第26-28天)
\#\ 1\.\ Medusa\ 后端部署到\ Railway
\#\ \-\ 创建\ Railway\ 项目
\#\ \-\ 添加\ PostgreSQL\ 服务
\#\ \-\ 添加\ Redis\ 服务
\#\ \-\ 部署\ Medusa
\#\ \-\ 配置环境变量
\#\ \-\ 设置\ Stripe\ Webhook\ 指向\ Railway\ URL
\#\ 2\.\ Next\.js\ 前端部署到\ Vercel
\#\ \-\ 连接\ GitHub\ 仓库
\#\ \-\ 配置环境变量
\#\ \-\ 一键部署
\#\ 3\.\ Cloudflare\ 配置
\#\ \-\ DNS\ 记录指向\ Vercel\ \+\ Railway
\#\ \-\ 开启\ CDN\ 缓存
\#\ \-\ 配置\ SSL(Full\ Strict)
\#\ \-\ 配置\ Page\ Rules(缓存静态资源)
\#\ \-\ 配置\ Workers(可选,边缘逻辑)
\#\ 4\.\ 自定义域名
\#\ \-\ 购买\ domain\.com
\#\ \-\ Cloudflare\ 添加域名
\#\ \-\ 更新\ DNS\ CNAME
Phase 6:内容填充与测试(第29-35天)
□\ 上传\ 5\-10\ 款产品(含\ Supplement\ Facts)
□\ 撰写\ 5\-10\ 篇博客文章(成分科普)
□\ 配置支付测试(Stripe\ Test\ Mode)
□\ 完整购物流程测试(浏览→加购→结账→支付)
□\ 订阅流程测试
□\ 移动端适配检查
□\ Lighthouse\ 性能测试(目标\ >90)
□\ SEO\ 预检(Meta\ Tags\ /\ Schema\ /\ Sitemap)
□\ 法律页面完善(隐私政策/条款/FDA声明)
□\ 客服配置(Gorgias\ /\ Tidio\ Live\ Chat)
五、整体时间线
Week\ 1:\ \ 环境搭建\ \+\ Medusa\ 后端配置\ \+\ 产品类目创建
Week\ 2:\ \ Next\.js\ Storefront\ 基础开发(首页/产品页/购物车)
Week\ 3:\ \ 保健品定制(订阅/评价/FDA声明/法律页面)
Week\ 4:\ \ SEO\ 优化\ \+\ 博客内容\ \+\ 结构化数据
Week\ 5:\ \ 部署上线\ \+\ 支付测试\ \+\ 性能优化
Week\ 6:\ \ 内容填充\ \+\ 完整测试\ \+\ 正式上线
Week\ 7\-8:\ 营销启动(Google\ Ads\ \+\ SEO内容\ \+\ 社媒)
最快上线时间:4-6周(如果已有产品图片和文案)
六、关键决策建议
必须做的
可以暂缓的
不建议做的
七、如果追求最快上线(2周方案)
方案:Shopify\ \+\ 自定义主题(非开源,但最快)
时间:1\-2周
成本:\$39/月\ \+\ 交易费
优势:无需开发电商核心功能,App\ 生态丰富
方案:Medusa\ \+\ 官方\ Next\.js\ Starter\ \+\ Vercel
时间:3\-4周
成本:\$0\-15/月
优势:完全开源,无月费,数据自主