歌词尚未加载
这篇文章记录一下我部署 GMShop Edge 的完整过程。
项目本身是一个运行在 Cloudflare Workers 上的数字商品商城,公开商城、客户中心、订单、库存、交付和管理后台都放在同一个 Worker 中。对我来说,最大的好处是不需要单独准备服务器,也不用维护 Nginx、数据库和 Docker 容器。
项目仓库:
1 | https://github.com/GMWalletApp/gmshop-edge |
我最终使用的商城域名是:
1 | https://shop.mcpq.cc |
本文是我实际部署过程的记录。方便我后续维护已经部署的它。
一、GMShop Edge 会创建哪些 Cloudflare 资源
一键部署并不是只创建一个 Worker,它还会创建或绑定一组 Cloudflare 服务。
我这次使用的资源如下:
| 类型 | 名称 | 作用 |
|---|---|---|
| Worker | gmshop-edge |
运行商城前台、客户中心和管理后台 |
| D1 | gmshop-edge |
保存用户、商品、订单、库存、权限和系统配置 |
| KV | gmshop-edge-cache |
保存短期缓存和带版本的读取数据 |
| R2 | gmshop-edge-files |
保存私有下载文件、商品媒体、导出文件和自动化制品 |
| Queue | gmshop-edge-commerce |
异步处理交易、交付、重试等任务 |
| 死信 Queue | gmshop-edge-commerce-dlq |
保存多次重试后仍失败的任务 |
| Cron Trigger | * * * * * |
每分钟执行一次定时维护任务 |
| Send Email | EMAIL |
可选的 Cloudflare 邮件发送绑定 |
其中 D1 是主要数据源,R2 用来保存文件,KV 主要负责缓存,Queue 和 Cron 则把耗时任务从网页请求中拆出去。
需要注意,EMAIL 是可选能力。如果暂时不使用 Cloudflare Send Email,可以先不配置,后面也可以在后台接入 SMTP、Resend、Postmark、SendGrid 或 Mailgun。
二、部署前准备
开始之前需要准备:
- 一个 Cloudflare 账户
- 一个 GitHub 账户
- 已经接入 Cloudflare 的域名
- 已启用 R2
我使用的是 Cloudflare 官方的一键部署入口:
1 | https://deploy.workers.cloudflare.com/?url=https://github.com/GMWalletApp/gmshop-edge |
进入后登录 Cloudflare,并授权 GitHub。
三、配置一键部署页面
在部署页面中,我勾选了“创建专用 Git 存储库”。这样 Cloudflare 会在自己的 GitHub 账户里创建一份私有仓库,并连接到 Worker。以后对生产分支的提交也可以自动触发部署。
1. 项目名称
1 | gmshop-edge |
2. KV 命名空间
选择“新建”,名称填写:
1 | gmshop-edge-cache |
3. D1 数据库
选择“新建”,名称填写:
1 | gmshop-edge |
数据库位置选择亚太区域即可,读取复制暂时关闭。个人商城前期没有必要额外开启读取复制。
4. R2 存储桶
选择“新建”,名称填写:
1 | gmshop-edge-files |
5. Commerce Queue
选择“新建”,名称填写:
1 | gmshop-edge-commerce |
死信队列:
1 | gmshop-edge-commerce-dlq |
由项目配置自动创建,不需要在部署表单里单独选择。
6. 构建和部署命令
保持项目默认值:
1 | bun run build |
1 | bun run deploy |
确认没有复用其他项目的 D1、KV、R2 和 Queue 后,点击“部署”。
四、确认部署是否成功
部署成功后,日志中应该能看到 Worker 及其绑定资源,并出现类似下面的地址:
1 | https://gmshop-edge.963107397.workers.dev |
项目还会启用每分钟一次的 Cron,并同时注册 Queue 的生产者和消费者。
如果日志里出现关于 workers_dev 或 Preview URLs 默认开启的警告,一般不影响运行。它只是提示项目配置中没有显式关闭这些入口。
五、初始化商城
第一次部署完成后,访问:
1 | https://gmshop-edge.963107397.workers.dev/install |
安装页面会要求创建第一个管理员账号。这个账号会成为受保护的 root 管理员,因此密码不要和其他网站共用。
初始化完成后,管理后台地址是:
1 | https://gmshop-edge.963107397.workers.dev/admin |
安装过程会创建:
- 第一位 root 管理员
- 内置角色和权限数据
- 运行时密钥
- 必需的系统设置
它不会自动创建虚假商品、库存或支付渠道,这些内容需要后续自己配置。
六、绑定自定义域名
我最终给商城绑定的是:
1 | shop.mcpq.cc |
进入 Cloudflare:
1 | Workers 和 Pages |
填写:
1 | shop.mcpq.cc |
等待证书和路由生效后,访问:
1 | https://shop.mcpq.cc |
七、处理 Misdirected Request
我第一次绑定自定义域名后,页面返回了:
1 | Misdirected Request |
这不是域名解析错误,而是 GMShop Edge 有严格的主机访问控制。新域名没有被加入 Allowed Hosts 时,程序会拒绝请求。
解决方法是在后台修改两项配置。
1. 修改应用地址
进入:
1 | 系统设置 |
把应用地址改成:
1 | https://shop.mcpq.cc |
2. 修改 Allowed Hosts
进入:
1 | 系统设置 |
一行填写一个主机名:
1 | shop.mcpq.cc |
这里不要填写协议,也不要写路径。保存后重新打开自定义域名,商城即可正常访问。
保留 workers.dev 主机名的好处是:自定义域名配置出现问题时,仍然可以通过原始 Worker 地址进入后台修复。
八、后台还需要配置什么
商城可以打开并不代表已经适合正式营业。至少还需要完成下面这些内容:
1. 品牌和站点信息
设置站点名称、说明、Logo、背景图和默认语言。
2. 注册与认证
决定是否允许注册、是否允许游客购买,以及是否启用邮箱验证或第三方登录。
3. 邮件服务
根据需要配置 SMTP、Resend、Postmark、SendGrid、Mailgun 或 Cloudflare Send Email。
4. 商品和交付
创建商品、售卖项,并根据商品类型配置:
- 卡密或账号库存
- R2 私有下载文件
- 自动化交付
- 上游供货平台
5. 支付渠道
GMShop Edge 是商城,不是支付网关。它不会自己扫描区块链,需要接入外部支付服务,例如 Stripe、GMpay、EPay、支付宝或微信支付。
我后续使用的是单独部署的 GMPay Edge,用于接收 USDT TRC20 和 USDC Base。对应部署过程放在另一篇文章中。
https://blog.mcpq.cc/posts/gmpay-edge-cloudflare-deployment
九、部署后的完整结构
1 | 访问者 |
十、费用和免费额度
这个项目可以先使用 Cloudflare 免费套餐部署。个人站点和低订单量使用时,通常可以在免费额度内运行,但并不等于所有资源永远免费。
需要重点观察:
- Workers 每日请求量
- D1 读取、写入和存储
- KV 读写次数
- Queues 操作次数
- R2 存储和请求次数
R2 属于按量计费产品,超过免费额度后可能产生费用。正式使用前建议在 Cloudflare Billing 中检查用量和账单设置。具体额度以 Cloudflare 官方最新价格页面为准。
十一、备份和安全建议
正式添加商品和订单前,建议做好这些事情:
- 定期导出 D1 数据库。
- 备份 R2 中的重要商品文件。
- 保存后台运行时配置,但不要把密钥提交到 GitHub。
- root 账号使用独立强密码,并开启二次验证。
- 正式开放前完成一次真实支付和自动交付测试。
- 更新项目之前先备份,不要直接在生产环境盲目升级。
十二、总结
GMShop Edge 的部署本身并不复杂,一键部署会把 Worker、D1、KV、R2、Queue 和 Cron 一起准备好。实际最容易遇到的问题反而是自定义域名绑定后的 Allowed Hosts 配置。
这次最终完成了:
1 | 商城地址:https://shop.mcpq.cc |
接下来只需要继续配置商品、邮件、支付渠道和交付方式,就可以把它作为自己的数字商品商城使用。
评论