部署配置
本文引用的文件
- wrangler.jsonc
- .dev.vars
- package.json
- worker-configuration.d.ts
- src/index.ts
- src/command/index.ts
- src/command/handlers/login.ts
- src/command/handlers/history.ts
- src/scheduler/index.ts
- src/client/cosmoe.ts
目录
- 简介
- 项目结构
- 核心组件
- 架构总览
- 详细组件分析
- 依赖关系分析
- 性能考量
- 故障排查指南
- 结论
- 附录
简介
本文件面向 Cosmoe Bot 的部署与运维人员,系统化解读 wrangler.jsonc 配置文件的各项参数,说明 KV 命名空间的配置与绑定、环境变量的配置方法(尤其是 BOT_INFO 的格式与内容)、本地开发与生产部署流程,并提供配置验证与调试建议,帮助快速、稳定地完成从本地到生产的全流程部署。
项目结构
Cosmoe Bot 是一个基于 Cloudflare Workers 的 Telegram Bot,采用 TypeScript 编写,通过 Wrangler 进行本地开发与生产部署。项目主要由以下部分组成:
- 配置层:wrangler.jsonc 定义 Worker 名称、入口文件、兼容性日期、可观测性、定时触发器、KV 命名空间与变量等。
- 运行时层:src/index.ts 作为 Worker 入口,处理 HTTP 请求与计划任务;src/command/index.ts 注册命令与会话;src/scheduler/index.ts 处理定时任务。
- 数据层:通过 KV 命名空间 COSMOE_CREDENTIALS 存储用户凭证,COSMOE_STORAGE 存储会话与状态数据。
工具层:.dev.vars 提供本地开发所需的 BOT_TOKEN;package.json 提供脚本与依赖;worker-configuration.d.ts 为类型生成文件。
graph TB
subgraph "配置层"
WJ["wrangler.jsonc"]
DV[".dev.vars"]
PJ["package.json"]
end
subgraph "运行时层"
IDX["src/index.ts"]
CMD["src/command/index.ts"]
SCH["src/scheduler/index.ts"]
end
subgraph "数据层"
KV1["KV: COSMOE_CREDENTIALS"]
KV2["KV: COSMOE_STORAGE"]
end
subgraph "工具层"
WT["worker-configuration.d.ts"]
end
WJ --> IDX
WJ --> CMD
WJ --> SCH
WJ --> KV1
WJ --> KV2
DV --> IDX
PJ --> IDX
WT --> IDX
CMD --> KV2
SCH --> KV1
SCH --> KV2
图表来源
- wrangler.jsonc
- src/index.ts
- src/command/index.ts
- src/scheduler/index.ts
章节来源
- wrangler.jsonc
- package.json
核心组件
- Worker 入口与路由:src/index.ts 负责初始化 Bot、注册命令、设置命令菜单,并通过 webhookCallback 将请求交由 grammY 处理;同时实现 scheduled 回调用于定时任务。
- 命令系统与会话:src/command/index.ts 使用 @grammyjs/conversations 插件,结合 KV 命名空间 COSMOE_STORAGE 实现对话状态持久化。
- 定时任务:src/scheduler/index.ts 每分钟检查新活动并通知已注册用户。
- KV 命名空间:COSMOE_CREDENTIALS 用于存储用户的 Cosmoe 凭证(用户 ID 与令牌),COSMOE_STORAGE 用于存储会话与状态(如最新活动 ID)。
- 环境变量:BOT_INFO 为 Bot 信息(JSON 字符串),BOT_TOKEN 为 Telegram Bot 访问令牌(本地开发使用)。
章节来源
- src/index.ts
- src/command/index.ts
- src/scheduler/index.ts
架构总览
下图展示了从请求进入 Worker 到 KV 存取与定时任务执行的整体流程。
sequenceDiagram
participant TG as "Telegram"
participant WR as "Worker 入口<br/>src/index.ts"
participant CMD as "命令注册<br/>src/command/index.ts"
participant KV1 as "KV : COSMOE_CREDENTIALS"
participant KV2 as "KV : COSMOE_STORAGE"
participant SCH as "定时任务<br/>src/scheduler/index.ts"
TG->>WR : "HTTP 请求webhook"
WR->>CMD : "setupCommands(bot, env)"
CMD->>KV2 : "读取/写入会话状态"
WR-->>TG : "响应消息"
SCH->>KV2 : "读取最新活动 ID"
SCH->>KV1 : "枚举已注册用户"
SCH-->>TG : "发送新活动通知"
图表来源
- src/index.ts
- src/command/index.ts
- src/scheduler/index.ts
详细组件分析
wrangler.jsonc 配置详解
- schema 与名称:$schema 指向 Wrangler 配置校验文件;name 为 "cosmoe-bot"。
- 入口与兼容性:main 指向 src/index.ts;compatibility_date 设为 2025-09-27,确保运行时 API 的稳定性。
- 可观测性:observability.enabled=true 开启可观测性(日志、追踪等)。
- 定时触发器:triggers.crons 设置为每分钟一次("*/1 * * * *"),对应 Worker 的 scheduled 回调。
- 环境变量 vars:BOT_INFO 为 Bot 信息的 JSON 字符串,包含机器人元数据(如 id、username、是否支持内联查询等)。
- KV 命名空间:kv_namespaces 定义两个命名空间
- COSMOE_CREDENTIALS:用于存储用户凭证(键为 Telegram 用户 ID,值为包含 user_id、token、timestamp 的 JSON)。
- COSMOE_STORAGE:用于存储会话状态与系统状态(如 latestEventId)。
章节来源
KV 命名空间配置与绑定
- 绑定名称:COSMOE_CREDENTIALS、COSMOE_STORAGE 在 wrangler.jsonc 中定义,并在运行时通过 Env 接口暴露给 Worker。
使用场景:
- 登录流程:用户输入用户名/密码后,调用 Cosmoe API 获取 token,然后以 Telegram 用户 ID 为键存入 COSMOE_CREDENTIALS。
- 历史查询:根据 Telegram 用户 ID 从 COSMOE_CREDENTIALS 读取凭证,构造 CosmoeClient 并查询预约历史。
定时通知:从 COSMOE_STORAGE 读取 latestEventId,遍历 COSMOE_CREDENTIALS 中所有已注册用户,逐个发送新活动通知,并更新最新活动 ID。
flowchart TD
Start(["开始"]) --> ReadLatest["读取 COSMOE_STORAGE 中的 latestEventId"]
ReadLatest --> FetchEvents["调用 Cosmoe API 获取活动列表"]
FetchEvents --> FilterNew{"筛选新活动"}
FilterNew --> |是| ListUsers["枚举 COSMOE_CREDENTIALS 所有用户"]
FilterNew --> |否| End(["结束"])
ListUsers --> Notify["逐个用户发送新活动通知"]
Notify --> UpdateId["更新 COSMOE_STORAGE 中的 latestEventId"]
UpdateId --> End
图表来源
章节来源
- wrangler.jsonc
- src/command/handlers/login.ts
- src/command/handlers/history.ts
- src/scheduler/index.ts
环境变量配置
- BOT_INFO:在 wrangler.jsonc 的 vars 中配置,为 JSON 字符串,包含机器人元数据(如 id、username、是否支持内联查询等)。运行时通过 env.BOT_INFO 读取并解析为对象传入 Bot 初始化。
- BOT_TOKEN:在 .dev.vars 中配置,用于本地开发时的 Telegram Bot 访问令牌。生产环境建议通过 Wrangler 的 secrets 或环境变量注入,避免明文保存在仓库中。
章节来源
- wrangler.jsonc
- .dev.vars
- src/index.ts
本地开发环境配置
- .dev.vars:包含 BOT_TOKEN=your_token,用于本地开发服务器启动时注入。
- 启动命令:package.json 提供 dev 与 start 脚本,均指向 wrangler dev,启动本地开发服务器。
类型生成:cf-typegen 脚本用于生成 worker-configuration.d.ts,确保 Env 接口与实际绑定一致。
sequenceDiagram
participant Dev as "开发者"
participant Wr as "Wrangler 开发服务器"
participant Bot as "Bot 实例"
participant KV as "KV 命名空间"
Dev->>Wr : "npm run dev/start"
Wr->>Bot : "加载 .dev.vars 注入 BOT_TOKEN"
Bot->>KV : "读取/写入会话与凭证"
Wr-->>Dev : "本地可访问的 Webhook 地址"
图表来源
- package.json
- .dev.vars
- src/index.ts
章节来源
- package.json
- .dev.vars
- worker-configuration.d.ts
生产环境部署流程
- 代码构建:项目为纯前端/运行时代码,无需额外编译;wrangler 会自动打包 main 指向的入口文件。
- 部署命令:package.json 提供 deploy 脚本,直接执行 wrangler deploy。
- 环境变量注入:
- BOT_INFO:已在 wrangler.jsonc 中配置。
- BOT_TOKEN:建议通过 Wrangler secrets 或环境变量注入,避免明文提交。
- KV 命名空间:确保在 Cloudflare 控制台中创建并绑定 COSMOE_CREDENTIALS 与 COSMOE_STORAGE,且与 wrangler.jsonc 中的 id 一致。
章节来源
- package.json
- wrangler.jsonc
依赖关系分析
- 配置到运行时:wrangler.jsonc 决定 Worker 的入口、触发器、KV 绑定与变量;src/index.ts 作为入口文件,依赖这些配置。
- 运行时到数据:src/command/index.ts 与 src/scheduler/index.ts 通过 KV 命名空间进行数据持久化与共享。
类型与配置:worker-configuration.d.ts 由 wrangler types 生成,确保 Env 接口与实际绑定一致。
graph LR
WJ["wrangler.jsonc"] --> IDX["src/index.ts"]
WJ --> CMD["src/command/index.ts"]
WJ --> SCH["src/scheduler/index.ts"]
IDX --> CMD
CMD --> KV["KV 命名空间"]
SCH --> KV
WT["worker-configuration.d.ts"] --> IDX
图表来源
- wrangler.jsonc
- src/index.ts
- src/command/index.ts
- src/scheduler/index.ts
- worker-configuration.d.ts
章节来源
- wrangler.jsonc
- worker-configuration.d.ts
性能考量
- 定时任务频率:当前设置为每分钟一次,适合高频推送场景;若活动更新不频繁,可考虑降低频率以减少 KV 查询与 Telegram API 调用开销。
- KV 访问模式:登录与历史查询均按用户 ID 键访问;定时任务遍历用户列表时注意 KV list 的性能与配额限制。
- 会话存储:对话状态通过 KVAdapter 写入 COSMOE_STORAGE,建议控制单条会话数据大小,避免超限。
[本节为通用指导,不直接分析具体文件]
故障排查指南
- 配置校验
- 使用 wrangler 的类型生成与校验:运行 cf-typegen 生成 worker-configuration.d.ts,确保 Env 接口与 KV 绑定一致。
- 检查 wrangler.jsonc 的 compatibility_date 是否与目标运行时匹配。
- KV 读写问题
- 登录失败:确认 COSMOE_CREDENTIALS 的键为 Telegram 用户 ID,值为包含 user_id、token、timestamp 的 JSON。
- 历史查询失败:确认 COSMOE_CREDENTIALS 中存在该用户的凭证,且凭证有效。
- 定时通知未发送:检查 COSMOE_STORAGE 中的 latestEventId 是否正确更新,以及 COSMOE_CREDENTIALS 中是否存在用户。
- 环境变量问题
- BOT_INFO 解析失败:确认其为合法 JSON 字符串,字段齐全。
- BOT_TOKEN 未生效:确认在本地开发时 .dev.vars 正确注入,在生产环境通过 secrets 注入。
- 日志与可观测性
- 启用 observability 后,可在 Cloudflare Workers 控制台查看日志与追踪,定位异常。
章节来源
- worker-configuration.d.ts
- wrangler.jsonc
- src/command/handlers/login.ts
- src/command/handlers/history.ts
- src/scheduler/index.ts
结论
通过合理配置 wrangler.jsonc、规范使用 KV 命名空间与环境变量、遵循本地开发与生产部署流程,Cosmoe Bot 可以稳定运行于 Cloudflare Workers 平台。建议在生产环境中严格管理密钥与变量,优化定时任务频率,并持续关注可观测性输出以提升运维效率。
[本节为总结性内容,不直接分析具体文件]
附录
配置参数速查表
- 项目基本信息
- name:cosmoe-bot
- main:src/index.ts
- compatibility_date:2025-09-27
- 可观测性
- observability.enabled:true
- 定时触发器
- triggers.crons:*/1 * * * *
- 环境变量
- vars.BOT_INFO:JSON 字符串,包含机器人元数据
- vars.BOT_TOKEN:本地开发令牌(建议生产环境通过 secrets 注入)
- KV 命名空间
- COSMOE_CREDENTIALS:存储用户凭证(键为 Telegram 用户 ID,值为 JSON)
- COSMOE_STORAGE:存储会话与系统状态(如 latestEventId)
章节来源
- wrangler.jsonc
- src/index.ts