之前分享了开源的LDC商店https://github.com/chatgptuk/ldc-shop,有些佬友部署时遇到了一些困难,因此今天抽空写个详细的部署教程。刚把Cloudflare Workers版的代码重构了,现在和Vercel版功能及界面都一模一样,个人感觉Cloudflare Workers版访问速度更快,而且Cloudflare大善人的免费额度也更高,因此我现在比较推荐部署在Cloudflare上。下面演示一下部署过程,全程网页上部署,不用敲命令,无需自己的域名。
首先准备一个GitHub和一个Cloudflare账号,这个都有吧,先去fork我的GitHub仓库。然后去Cloudflare,如下图,创建一个D1数据库,取个名字,例如这里我命名为ldc-shop-next,建议用这个名字,和wrangler.json里目前默认值一致方便后面数据库自动绑定。
接下来去Workers&Pages页面选择Create application:
连接之前fork的仓库, Build command修改为:
npm install && npx opennextjs-cloudflare build接着点击Advanced settings,修改Path为_workers_next
这时部署就开始了,趁着没部署好,可以先去添加环境变量,需要添加7个环境变量:
| 变量名 | 类型 | 说明 |
|---|---|---|
OAUTH_CLIENT_ID |
Secret | Linux DO Connect Client ID |
OAUTH_CLIENT_SECRET |
Secret | Linux DO Connect Client Secret |
MERCHANT_ID |
Secret | EPay 商户 ID |
MERCHANT_KEY |
Secret | EPay 商户 Key |
AUTH_SECRET |
Secret | 随机字符串,例如可以随便手动打一串英文字母加数字 |
ADMIN_USERS |
Secret | 管理员用户名,如果多个管理员就用逗号分隔,填写你的 L 站 username |
NEXT_PUBLIC_APP_URL |
Text | 你的 Workers 域名(例如我的是 https://ldc-shop.supergpt.workers.dev) |
重要:
NEXT_PUBLIC_APP_URL 必须设置为 Text 类型,不能使用 Secret,否则支付签名会失败!
上面的环境变量有些还没拿到,接下来去https://connect.linux.do/dash/sso/new申请新接入,其中回调地址是你的Workers分配的那个域名后面加/api/auth/callback/linuxdo,保存后页面出现的 Client ID和Client Secret分别对应环境变量中的OAUTH_CLIENT_ID和OAUTH_CLIENT_SECRET。
接下来再去https://credit.linux.do/merchant这里创建一个应用,回调 URL填写为你Workers的URL后面加/callback,通知 URL填写为你Workers的URL后面加/api/notify,如下图:
创建应用后拿到Client ID和Client Secret,对应环境变量中的MERCHANT_ID和MERCHANT_KEY:
完成上面的步骤,所有环境变量都拿到了,填写以后Deploy即可。最后一步,绑定数据库,下图位置点击Add binding,选择D1数据库,变量名填写为DB,选择你最开始创建的数据库,Add Binding后就一切就绪了。这时你就可以访问商店,用自己的L站账号登录,进入后台添加商品和卡密,然后进行购买测试了(Linux do credit那里开启测试模式,就可以模拟付款给自己了)。
注意,如果GitHub仓库更新后触发重新部署,数据库会失去绑定状态,访问商店会报错,但是如果最前面你把数据库命名为ldc-shop-next,会自动绑定的。wrangler.json里数据库名字目前默认是这个值。如果你最开始数据库是别的名字,失去绑定状态的话需要再次手动绑定数据库,为了方便,可以在_workers_next/wrangler.json中指定自己的数据库名字或者id,这样就不用每次重新部署后再次绑定数据库了:
{
"name": "ldc-shop-next",
"main": ".open-next/worker.js",
"compatibility_date": "2025-11-12",
"compatibility_flags": ["nodejs_compat"],
"assets": {
"directory": ".open-next/assets",
"binding": "ASSETS"
},
"d1_databases": [
{
"binding": "DB",
"database_name": "你的数据库名字",
"database_id": "你的数据库ID"
}
],
"observability": {
"enabled": true
}
}
另外,如果不绑定自己的域名,支付回调异步通知似乎会失败,但当前版本系统会自动查询订单状态,支付成功状态也会正常更新,只是会延迟一秒左右,不影响使用。有条件的话可以绑定自己的域名。如有其他bug欢迎反馈。









