Cloudflare Workers + D1
将 Calends 部署到自己的 Cloudflare 账号,并配置 D1、定时任务和可选的邮件提醒。
Calends 是一个 Cloudflare Worker:前端是 Worker 的静态资源,数据在 D1(SQLite),提醒和汇率靠 Cron 触发器。个人使用量和费用取决于 Cloudflare 账号的当前套餐与配额。
- 一个 Cloudflare 账号;
- 命令行部署还需要 Node.js 22 和 git。
打开 Deploy to Cloudflare,按提示把仓库复制到你的 GitHub 账号并部署。
部署完成后,在 Cloudflare 控制台打开这个 Worker 的「设置 → 变量和密钥」,添加一个类型为「密钥」、名为 SETUP_TOKEN 的变量,值是一串足够长的随机字符串。没有它就无法设置密码。
-
克隆并安装依赖:
终端窗口 git clone https://github.com/imetn/calends && cd calendsnpm ci -
登录 Cloudflare,确认
npx wrangler whoami能显示你的账号:终端窗口 npx wrangler login -
设置初始化令牌:
终端窗口 npx wrangler secret put SETUP_TOKEN比如用
openssl rand -base64 24生成一串随机字符。 -
部署:
终端窗口 npm run deploy -
打开
https://calends.<你的子域>.workers.dev,输入初始化令牌并设置密码。
npm run deploy 依次做这些事:
- 生成迁移与多语言文件、类型检查、用 Vite 构建前端;
wrangler deploy部署 Worker。第一次部署时会自动创建名为calends的 D1 数据库,不需要手动填database_id;- 对远程数据库执行全部迁移。
Worker 自己也会在每个实例第一次处理请求时检查并补齐缺失的迁移,所以一键部署出来的实例同样能用。
wrangler.jsonc
Section titled “wrangler.jsonc”仓库里的 wrangler.jsonc 已经配好:
| 配置 | 作用 |
|---|---|
assets |
前端静态资源;/api/*、/cal/*、/mcp 先交给 Worker 处理,其余路径按单页应用回退。 |
d1_databases |
绑定名 DB,数据库名 calends。 |
triggers.crons |
5 * * * *:每小时第 5 分钟触发一次。到了设置里的提醒时刻才发送提醒;汇率超过 20 小时没更新时顺便刷新。 |
observability |
开启 Workers 日志,提醒发送结果、迁移记录都能在控制台看到。 |
邮件提醒使用 Cloudflare Email Sending。不需要邮件的话可以跳过这一节,其他通知渠道都不需要服务端配置。
-
在 Cloudflare 里为你的域名开启邮件发送,验证发件地址,比如
calends@example.com。 -
在
wrangler.jsonc里取消注释并修改这两段:"send_email": [{ "name": "EMAIL", "allowed_sender_addresses": ["calends@example.com"] }],"vars": { "SITE_URL": "https://calends.example.com", "MAIL_FROM": "calends@example.com", "MAIL_FROM_NAME": "Calends" }, -
重新部署:
npm run deploy。 -
在「设置 → 通知渠道」里添加一个邮件渠道,填收件邮箱,点「测试」。
用量包括 Workers 请求、D1 读写与存储、Cron,以及可选的邮件发送。请在 Cloudflare 控制台查看实际用量和当前配额。内置助手调用的 DeepSeek 按你自己的 DeepSeek 账户计费,和 Cloudflare 无关。