在Cloudflare Workers上搭建自己的LDC商店详细教程

之前分享了开源的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

:warning: 重要
NEXT_PUBLIC_APP_URL 必须设置为 Text 类型,不能使用 Secret,否则支付签名会失败!

上面的环境变量有些还没拿到,接下来去https://connect.linux.do/dash/sso/new申请新接入,其中回调地址是你的Workers分配的那个域名后面加/api/auth/callback/linuxdo,保存后页面出现的 Client IDClient 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欢迎反馈。

365 个赞

细节!mark了再看

4 个赞

感谢分享

3 个赞

前排前排

4 个赞

哇塞感谢大佬分享!

4 个赞

感谢大佬分享,关注了

2 个赞

冲冲冲冲冲冲

7 个赞

感谢 gpt 大佬分享

2 个赞

感谢大佬的教程

3 个赞

感谢分享 很详细

3 个赞

感谢佬的教程,很详细

3 个赞

已严肃收藏

2 个赞

已收藏学习

码 等下看!

强无敌啊!!!

3 个赞

CF方便多了,可以绑定免费的二级域名

佬友太厉害了

1 个赞

狠狠地收藏了,说不定以后会用到

佬,这一步在哪里搞得啊,前面都学会了,这一步无从下手:tieba_028: ,求指教

到你自己Fork的GitHub仓库,找到_workers_next文件夹下wrangler.json这个文件,把代码粘贴进去保存就行了。数据库名字和id替换为你自己真实的值。