跳转到内容

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 的变量,值是一串足够长的随机字符串。没有它就无法设置密码。

  1. 克隆并安装依赖:

    终端窗口
    git clone https://github.com/imetn/calends && cd calends
    npm ci
  2. 登录 Cloudflare,确认 npx wrangler whoami 能显示你的账号:

    终端窗口
    npx wrangler login
  3. 设置初始化令牌:

    终端窗口
    npx wrangler secret put SETUP_TOKEN

    比如用 openssl rand -base64 24 生成一串随机字符。

  4. 部署:

    终端窗口
    npm run deploy
  5. 打开 https://calends.<你的子域>.workers.dev,输入初始化令牌并设置密码。

npm run deploy 依次做这些事:

  1. 生成迁移与多语言文件、类型检查、用 Vite 构建前端;
  2. wrangler deploy 部署 Worker。第一次部署时会自动创建名为 calends 的 D1 数据库,不需要手动填 database_id;
  3. 对远程数据库执行全部迁移。

Worker 自己也会在每个实例第一次处理请求时检查并补齐缺失的迁移,所以一键部署出来的实例同样能用。

仓库里的 wrangler.jsonc 已经配好:

配置 作用
assets 前端静态资源;/api/*、/cal/*、/mcp 先交给 Worker 处理,其余路径按单页应用回退。
d1_databases 绑定名 DB,数据库名 calends。
triggers.crons 5 * * * *:每小时第 5 分钟触发一次。到了设置里的提醒时刻才发送提醒;汇率超过 20 小时没更新时顺便刷新。
observability 开启 Workers 日志,提醒发送结果、迁移记录都能在控制台看到。

邮件提醒使用 Cloudflare Email Sending。不需要邮件的话可以跳过这一节,其他通知渠道都不需要服务端配置。

  1. 在 Cloudflare 里为你的域名开启邮件发送,验证发件地址,比如 calends@example.com。

  2. 在 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" },
  3. 重新部署:npm run deploy。

  4. 在「设置 → 通知渠道」里添加一个邮件渠道,填收件邮箱,点「测试」。

见自定义域名与 HTTPS。

用量包括 Workers 请求、D1 读写与存储、Cron,以及可选的邮件发送。请在 Cloudflare 控制台查看实际用量和当前配额。内置助手调用的 DeepSeek 按你自己的 DeepSeek 账户计费,和 Cloudflare 无关。