edgeKey 是一套用 Vike 框架写的全栈卡密商城系统(卡密商城即买家下单后自动发放卡密/兑换码的网店程序),前端页面、SSR 渲染、后端 API 在同一份代码里,整体运行在 Cloudflare Workers 上,数据落在 D1。MIT 协议,约 290+ star,TypeScript。它解决的痛点很具体:不想为一个小商城买服务器和域名。

是什么
功能面覆盖:分类与商品上下架、库存模式(有限/无限)、最小/最大购买数;卡密批量导入、支付后自动发货、库存实时预警;订单列表、手动补发、自动关闭过期订单、支付日志;邮件通知分 SMTP / API / Cloudflare Email 三条通道;管理后台带账号体系和可选的双重认证。支付内置 BEpusdt(USDT 收款网关)和 Epay(聚合支付),文档里还列了支付宝、Stripe、HashPay 等接法。要做的事是收款发货,它不自己做收单,只对接别人的收款渠道。另有一点 README 写明了:作者的新功能已转向基于新技术栈的姊妹项目,edgeKey 转轻量化维护,只修 bug 不再大迭代——选型时把这个算进去。
技术栈与部署
TypeScript + Vike + Vue(vike-vue),服务端经 vike-photon + Hono 跑在 Workers;ORM 是 Prisma 7,schema 里 datasource 用的 sqlite provider,配 @prisma/adapter-d1 驱动 D1。本地开发推荐 Bun,也可换 npm/pnpm/yarn,Node 版本要求 README 没写,得自己试。本地起服务:
bun install
bun run db:generate # 生成 Prisma Client
bun run db:migrations:local # 把迁移应用到本地 Wrangler 模拟器
bun run db:seed # 管理员账号和种子数据
bun run dev
线上有一条按钮式的一键部署:点 Cloudflare 官方部署向导(deploy.workers.cloudflare.com 带仓库参数),授权 Git 账号后自动 fork 仓库;不绑已有 D1 就自动建库并初始化数据,产物是 edgekey.账号.workers.dev 这样的域名,后台在 /admin,默认账号 admin / admin123456。手动路线则是 wrangler d1 create edgekey-db,把 database_id 填进 wrangler.jsonc,再依次 bun run db:migrations:remote、db:seed:remote、wrangler secret put AUTH_SECRET、bun run up(等价 vike build 加 wrangler deploy)。wrangler.jsonc 里 main 指向 Photon 的 Cloudflare 虚拟入口,还配了 */5 * * * * 的 cron 触发器,过期订单关闭之类的定时活就挂在这。

值得抄的三点
一、库存不用 KV,直接进 D1 表。schema 里 Card 表一张卡密一行:productId、status(默认 UNUSED)、orderId、batchNo、soldAt,索引建在 (productId, status) 上。库存就是数 UNUSED 的行,发货是把行改成已售并写上 orderId,批量导入靠 batchNo 归批、好追。Product 上再挂 stockMode(有限/无限)、minBuy/maxBuy 和 deliveryType,实体商品另走 physicalStock 加 OrderDelivery 表记物流,卡密和实物在表结构层面就分开了。
二、订单表的防改价与查询设计。Order 用 orderNo 唯一键加 queryToken(买家免登录查单的令牌),商品名、单价做快照字段(productNameSnapshot、unitPrice),金额存整数分;status、paymentStatus、deliveryStatus 三条状态各配一个 (状态, createdAt) 复合索引,对账和超时关单的范围查询都吃这个索引。PaymentConfig 按 provider 唯一键存配置,PaymentLog 记回调流水,加网关就是加一条 provider。
三、一键部署为什么能成立。部署向导只负责 fork 和构建,真正的自动化在仓库里:迁移脚本以 0001~0009 编号的 SQL 提交在 prisma/migrations,deploy 脚本一条命令先迁移再播种最后发布,云端建库初始化全自动。连支付适配器都有校验脚本(verify:payments)可以跑。这套「迁移进仓库、初始化进脚本」的做法,换成任何 Serverless 项目都直接可用。
别踩的坑
一、一键部署和手动命令有配置冲突:README 明说向导部署后 wrangler.jsonc 里 database_id 是注释掉的,本地跑 npm run up 或 db: 开头的 wrangler d1 命令会报错,得手工把 database_id 补上。
二、账号恢复强依赖数据库权限。生产不配 AUTH_SECRET 会直接禁止管理员登录;忘了密码或丢了双重认证验证码,办法是进 Cloudflare Dashboard 的 D1 Console 执行 UPDATE 语句改哈希或关掉 2FA。没有 D1 管理权限的人会被锁死,提前留好通道。
三、Turnstile 登录验证要 SITE_KEY 和 SECRET_KEY 两个环境变量都配齐,只配一个系统按未启用处理。免费额度在真实流量下够不够跑,README 没写具体数字,得自己试。
许可证
MIT。可以商用、修改、闭源集成,条件是保留作者的版权声明和许可文本;分发时别把 LICENSE 和文件头声明删掉。上游已转轻量维护,要拿它做二次开发的,建议先读 README 里那份与新版的功能对比说明。



















- 最新
- 最热
只看作者