拼多多福袋互助平台部署(命令行版):Cloudflare Workers + D1 全流程

摘要
拼多多福袋互助平台部署(命令行版):Node 22 + Wrangler 初始化、D1 建表、管理密钥、自定义域名与 Cron 时区坑逐条说明,约 20 分钟免费上线。
拼多多福袋互助平台,整个站点就是一个 src/index.js(3586 行、约 170 KB),跑在 Cloudflare Workers + D1 上——零服务器、零成本、不需要备案。这篇文章手把手带你部署上去,全程免费,15~20 分钟搞定。
版本对应:项目当前版本 0.9.2(更新日志见仓库的 CHANGELOG.md)。本文按这个版本核对过,其中有四处是照着做最容易翻车的地方,正文里都单独标了警示:
Node.js 必须是 22 及以上;
先部署、再设密钥,顺序反了会报
code: 10007;建表必须是 6 张,漏掉
visits首页会白屏;归属地走的是「本地优先」的新链路,不再依赖外部 IPv4 接口。
三个来源,按需取:
项目源码:https://github.com/jjsxjxj/pdd-fudai(推荐,
git clone或 Code → Download ZIP)夸克网盘打包下载(含源码、建表
schema.sql、配置模板wrangler.toml和部署 Skill 压缩包):https://pan.quark.cn/s/2c8555d9018b在线演示站:https://fudai.10087.eu.org(先看看成品长什么样,再决定要不要自己搭一个)
一、你需要准备什么
项目 | 是否必须 | 说明 |
|---|---|---|
电脑(Windows / Mac / Linux) | ✅ 必须 | 用来执行命令 |
Cloudflare 账号 | ✅ 必须 | 免费注册 |
Node.js 22+ | ✅ 必须 | 运行 Wrangler 工具(新版 Wrangler 要求 Node 22 及以上) |
Git | ❌ 可选 | 克隆项目用;没装可从 GitHub 下载 ZIP |
一个域名 | ❌ 可选 | 没有也能用,只是网址长一点 |
没有域名? 部署后会得到一个
xxx.workers.dev的网址,直接用就行。不过中国大陆可能无法访问workers.dev,建议有条件的绑一个自己的域名(第九步会讲)。
二、注册 Cloudflare 账号
打开浏览器,访问 https://dash.cloudflare.com/sign-up;
输入邮箱和密码,点 Create Account;
去邮箱收验证邮件,点验证链接;
登录成功,看到 Cloudflare 控制台首页。
已经有账号的直接登录就行。
三、安装工具并获取项目代码
3.1 安装 Node.js
下载 LTS(长期支持版),一路下一步安装;
安装完成后打开终端验证:
应该显示 v22.0.0 或更高(例如 v24.11.0)。
⚠️ 版本必须 ≥ 22:最新版 Wrangler 的
engines要求 Node 22+,装低了下一步会直接报EBADENGINE。如果你看到的是 v20 或更低,回官网下载最新 LTS 重装即可。
3.2 安装 Wrangler
Wrangler 是 Cloudflare 的命令行工具,用来部署代码:
如果提示权限错误(Mac / Linux),前面加 sudo。安装完验证:
应该显示类似 wrangler 4.x.x 的版本号。
如果这一步报
EBADENGINE ... Required: {"node":">=22.0.0"},说明 3.1 的 Node 版本太低,回去升级。
3.3 获取项目代码
方式一:命令行克隆(推荐)
方式二:没有 Git
打开 https://github.com/jjsxjxj/pdd-fudai → 绿色 Code → Download ZIP,解压后用 cd 进入解压出来的目录。
⚠️ 有个坑要先说:克隆下来的仓库里没有
wrangler.toml——它已经加入.gitignore(里面含你的私有 ID,不该入库),仓库里只放模板。第七步会教你从模板生成。
四、登录 Cloudflare
会自动打开浏览器,显示 Cloudflare 授权页面,点 Allow,看到 "You have granted authorization" 就成功了。如果浏览器没有自动弹出:终端里会显示一个网址,手动复制到浏览器打开就行。
五、创建 D1 数据库
D1 是 Cloudflare 的 SQLite 数据库,免费 5GB,用来存储邀请码、黑名单等数据:
输出大概长这样:
⚠️ 重要! 把 database_id(那一串 UUID)记下来,第七步要用。
六、初始化数据库表
进入项目目录,执行建表命令:
看到 ✅ Executed ... queries 就成功了。这会创建 6 张表:
表名 | 用途 |
|---|---|
| 邀请码(用户提交的互助码) |
| IP 黑名单 |
| 假码举报记录 |
| 提交日志(限流统计与审计) |
| 访问统计(首页「今日访问量」读它,漏建会让首页白屏) |
| 站点设置(公告、广告、QQ、识别模式等) |
以及 15 个索引。限流类查询都是 (ip, action, created_at) 三条件组合,所以用复合索引;schema.sql 里还显式写了一句 DROP INDEX IF EXISTS idx_logs_ip——那个单列索引已经被复合索引的最左前缀完全覆盖,留着只会增加写入放大。
整个
schema.sql的语句都带IF NOT EXISTS,重复执行是安全的。
七、部署到 Cloudflare Workers
7.1 从模板生成配置文件
打开 wrangler.toml,把这里替换成第五步记下的 database_id:
binding必须是DB——代码里用的是env.DB,写错就连不上数据库,首页会白屏。
模板里还有两个值得留意的段落:
[ai]+binding = "AI":给「识别截图」的 AI 兜底用的。不想要这层兜底,把这一段删掉也能正常部署,本地像素识别不受影响。routes = [...]:自定义域名路由。没绑定域名就把这一段整段删掉,否则wrangler deploy会因为 zone_id 是占位符而报错。
7.2 执行部署
看到类似输出就成功了(体积数字随版本变化):
把网址复制到浏览器打开,就能看到首页了。手机上打开是这个样子:

中国大陆用户注意:
workers.dev域名在中国大陆可能打不开,请看第九步绑定自己的域名。
八、设置管理密钥(必须在部署之后)
管理密钥是进后台的密码,一定要设一个复杂的:
终端会提示 Enter a secret value:,输入你自己想好的密码,回车,看到 ✅ Success 即可。
⚠️ 顺序很重要:这一步必须在第七步部署成功之后执行。
wrangler secret put要求目标 Worker 已经存在。如果还没部署就直接执行,会报一个很难看懂的错: ``✘ [ERROR] A request to the Cloudflare API (/accounts/xxx/workers/scripts/pdd-fudai/secrets) failed. workers.api.error.script_not_found [code: 10007]`遇到这个报错,回第七步先wrangler deploy`,再回来设密钥。
设完不用再部署:
wrangler secret put会自动创建新版本并立即上线,效果等同于执行一次deploy。
请牢记这个密码! 后台登录、API 管理都需要它,丢了只能重新设置(Worker 已在线上,直接再跑一次 wrangler secret put ADMIN_KEY 覆盖即可)。
九、绑定自定义域名(推荐)
有自己的域名体验会好很多,网址短好记,全球可访问。
9.1 域名接入 Cloudflare
如果你的域名不在 Cloudflare 管理:
Cloudflare Dashboard → Add a Site,输入你的域名;
选择 Free(免费)计划;
Cloudflare 会给你 2 个 NS 地址;
去你的域名注册商(阿里云 / 腾讯云 / GoDaddy 等),把 DNS 的 NS 记录改成 Cloudflare 给的那两个;
等待生效(通常几分钟到几小时)。
9.2 添加 DNS 记录
进入你的域名 → DNS → Records → Add record;
填写:
Type:
AName:
fudai(或者你想要的子域名前缀)IPv4 address:
192.0.2.1(占位地址,Workers 会自动接管)Proxy status:🟠 Proxied(橙色云朵,必须开)
9.3 在配置里加路由并重新部署
Zone ID 在 Cloudflare Dashboard → 你的域名 → Overview 右侧边栏最下方。改完再执行一次 wrangler deploy,输出里就会显示你的自定义域名。
十、Cron 定时任务的时区坑
项目内置了每天 23:59 自动清空互助码的定时任务:
为什么是 59 15 而不是 59 23? 因为 Cron 用的是 UTC 时间,中国时间 = UTC + 8,所以 23:59 CST = 15:59 UTC。改成其他时间的换算表:
中国时间 | UTC 时间 | Cron 表达式 |
|---|---|---|
23:59 | 15:59 |
|
00:00 | 16:00 |
|
06:00 | 22:00 |
|
12:00 | 04:00 |
|
Cron 最多延迟几分钟触发属正常现象;即使没触发,用户下次访问也会触发懒清理兜底。
十一、后台管理
打开 https://你的域名/admin,输入第八步设置的 ADMIN_KEY 即可进入后台。
站点设置里能改的东西(改完即时生效,不必重新部署):
设置项 | 说明 |
|---|---|
公告 / 广告条 | 首页顶部公告、提交框上方广告,留空则不显示 |
弹窗广告标题 / 副标题 | 留空则整个标题栏不渲染 |
QQ 群号 / 站长 QQ | 「建议·反馈·申诉·加入组织」弹窗里的联系方式 |
智能直达 | 开关,开启后首页显示「一键直达」按钮 |
刷新间隔 | 列表自动刷新秒数(3~30) |
识别截图模式 |
|
iOS 快捷指令地址 | 首页 iOS 按钮指向的链接,留空则隐藏该按钮 |
每分钟 / 每日提交上限 | 限流阈值,默认 5 次 / 分钟、30 次 / 天 |
功能页:数据统计、邀请码管理(可看完整码与归属地)、IP 黑名单(封禁 24h / 1 月 / 1 年 / 永久,过期自动解禁)、举报管理、提交日志(分页审计,保留 30 天)。
项目内置的几条自动规则,用之前值得知道:
自动拉黑:某个提交者的 IP 在 24 小时内被 3 个以上不同举报人举报,系统自动拉黑该 IP(默认 24 小时);
举报防武器化:不能举报自己提交的码;同一举报人 10 分钟内只能举报一次;计票用
COUNT(DISTINCT ip)去重;列表容量:首页最多展示 50 条活跃码,用完的码 30 秒后自动从列表里轮换掉;
登录态:后台密钥存在
sessionStorage里,刷新页面不会掉登录,关掉标签页即清除——密钥不会长期留在浏览器中。
顺手做一下 SEO(可选)
src/index.js 顶部的 CONFIG 里有几个占位:
SITE_ORIGIN 默认预置的是官方演示站地址,部署后记得改成你自己的域名——canonical、og:url、sitemap.xml、robots.txt 都统一引用它,换域名只改这一处。填了对应验证串,首页 head 就会输出验证 meta,方便在站长平台提交站点。
十二、懒人方案:装个 Skill 让 AI 帮你部署
如果你在用支持 Skill 的 AI 助手(比如 WorkBuddy),还有第三种更省事的部署方式——这套流程被打包成了 cloudflare-workers-deploy Skill,装好后让 AI 全程引导你完成部署,出错了它还能帮你排查。
12.1 安装 Skill
方式一:对话安装(推荐)
在对话框直接输入:
助手会自动搜索并完成安装,Skill 存放在 ~/.workbuddy/skills/cloudflare-workers-deploy/。
方式二:手动安装
从 GitHub 或 Skill 市场拿到 cloudflare-workers-deploy 包后,解压到 ~/.workbuddy/skills/cloudflare-workers-deploy/,重启会话即可被发现。
12.2 Skill 里有什么
12.3 怎么用
安装后直接说:
帮我把这个项目部署到 Cloudflare Workers
或者更直白一些:
我不用命令行,能在网页上部署到 Cloudflare 吗?
AI 会自动加载 Skill,然后依次问你:选哪条部署路径(命令行 / 网页)、是否已有 Cloudflare 账号、要不要绑自定义域名、要不要配定时任务——按回答给出对应步骤,遇到报错把错误信息丢给它就行。
十三、常见问题
Q: 部署后打开网站是白屏?
按顺序检查:
wrangler.toml里的database_id有没有换成自己的;第六步建表有没有执行成功——特别是有没有
visits表(首页「今日访问量」要读它,缺了会让/api/config报错,页面直接白屏);D1 绑定的
binding是不是DB;重新执行一次
wrangler deploy;还不行就看
wrangler tail的实时日志。
Q: 执行 wrangler secret put 报 script_not_found?
说明这个 Worker 还没部署过——密钥只能给已存在的 Worker 设置。先 wrangler deploy,再设密钥(顺序见第七、八步)。
Q: workers.dev 打不开?
中国大陆网络环境下可能被屏蔽。绑定自己的域名(第九步),或者挂代理访问。
Q: 后台进不去,提示密码错误?
直接重新设置即可(Worker 已在线上):
输入新密码后回车就生效,不需要再执行一次 wrangler deploy。
Q: IP 归属地显示英文?
归属地是按这个顺序取的:
本地优先:如果访客是 IPv6 或内网地址,直接跳过外部查询(百度和 ipwho.is 都是 IPv4 库,对 IPv6 只能返回空或限流报错),改用 Cloudflare 自带数据;
百度开放数据 API(全中文)——首选;
ipwho.is(HTTPS,中文地名)——备用;
Cloudflare
request.cf——兜底,且会经过内置的中文城市 / 省份映射表转成中文。
所以现在显示英文的情况已经很少;即便走到兜底分支,也基本是中文字样。失败结果会进 10 分钟负缓存,不会每次提交都白跑十秒——归属地只影响展示,不影响功能。
Q: 点「识别截图」没反应 / 识别失败?
识别算法是内联在代码里的像素模板匹配,不下载任何模型、不上传图片、毫秒级出结果,命令行版和网页版都能用。失败时按这个顺序看:
确认是拼多多福袋分享图或手机整屏截图,码清晰、没被裁掉边缘;
图片别太大(走服务端 AI 通道时上限 4MB);
本地没认出会提示手动输入;想让系统自动改用 AI 再试一次,需要绑定 Workers AI,并在后台把识别截图模式设成「本地识别 + AI 兜底」;
弹窗里的识别结果可以手动改——上面就是裁出来的码区原图,对着改完再点确认提交。
Q: 提示「提交过于频繁」?
防刷规则生效了:同一 IP 1 分钟内最多提交 5 次、1 天内最多 30 次。等一会儿再试;管理员可以在 CONFIG 里调这两个值。
Q: 邀请码每天什么时候清空?
每天 23:59(中国时间)自动清空所有互助码,零点开始新一天。黑名单、举报记录、设置不受影响。
Q: 怎么修改网站的颜色 / 文字?
所有前端代码都内联在 src/index.js 里。搜索关键词找到位置改完,wrangler deploy 即可。
Q: 怎么查看数据库里的数据?
Q: 免费额度够用吗?
Workers 免费计划每天 100,000 次请求,D1 免费 5GB 存储,Cron Trigger 免费。个人互助平台完全够用;流量大了再考虑 $5 / 月的付费计划。
附录:完整部署命令速查
写在最后
部署这条路上最容易绊倒人的其实只有三处:database_id 忘了替换、密钥设置的顺序反了、Cron 时区没换算。这三处都在正文里单独标了警示,希望你能一次过。
不想装任何软件的话,另一篇 网页版教程 全程只要点鼠标和粘贴,功能完全一致。
