保健品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\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ │\ \ ←\ 支付
└──────────────────────────────────────────┘

评估

优点:

核心问题:

  1. Strapi 不是电商系统 — 没有购物车、订单、库存、SKU、促销等电商核心功能,你需要自己从零写
  2. Strapi 做 CMS 可以,做 Commerce 很勉强 — 它的 Content API 不是为了高频电商查询设计的
  3. 开发量巨大 — 用 Strapi 搭建电商,等于把 Medusa/Shopify 的功能重做一遍
  4. Strapi 的权限/审计/多语言 虽好,但对保健品独立站来说不是刚需
  5. 结论: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)
    
    \{
    \ \ "@context":\ "https://schema\.org/",
    \ \ "@type":\ "Product",
    \ \ "name":\ "\.\.\.",
    \ \ "image":\ "\.\.\.",
    \ \ "description":\ "\.\.\.",
    \ \ "offers":\ \{
    \ \ \ \ "@type":\ "Offer",
    \ \ \ \ "price":\ "29\.99",
    \ \ \ \ "priceCurrency":\ "USD"
    \ \ \},
    \ \ "aggregateRating":\ \{
    \ \ \ \ "@type":\ "AggregateRating",
    \ \ \ \ "ratingValue":\ "4\.8",
    \ \ \ \ "reviewCount":\ "234"
    \ \ \}
    \}
    
    
    //\ 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周(如果已有产品图片和文案)


    六、关键决策建议

    必须做的

    1. 用 Medusa 做电商核心 — 不要自己写购物车/订单/库存
    2. Stripe Checkout 做支付 — 最省事的方案,PCI合规不用管
    3. Vercel 部署前端 + Railway 部署后端 — 免费额度够起步
    4. Cloudflare 做 DNS + CDN — 免费套餐够用
    5. 博客用 Strapi 或直接用 Next.js MDX — 如果内容不多,MDX 更简单
    6. 可以暂缓的

      1. Strapi CMS — 如果博客内容少,先用 Next.js MDX,后续再迁移
      2. 多语言 — 上线后再加
      3. 多仓库库存 — 初期一个仓库足够
      4. 复杂促销规则 — 先用折扣码,后期再加
      5. 不建议做的

        1. 用 Strapi 自建电商 — 重复造轮子,开发周期翻倍
        2. 自建支付系统 — Stripe 已经完美解决
        3. 过度自定义 Medusa — 先用官方 Starter,按需改

        4. 七、如果追求最快上线(2周方案)

          
          方案:Shopify\ \+\ 自定义主题(非开源,但最快)
          时间:1\-2周
          成本:\$39/月\ \+\ 交易费
          优势:无需开发电商核心功能,App\ 生态丰富
          
          方案:Medusa\ \+\ 官方\ Next\.js\ Starter\ \+\ Vercel
          时间:3\-4周
          成本:\$0\-15/月
          优势:完全开源,无月费,数据自主
          

          相关概念

          • [DTC独立站开发与运营指南]
          • [全栈开发知识体系与数学原理]
          • [主流开发语言框架与工具演化史]

          延伸阅读