|
@@ -0,0 +1,815 @@
|
|
|
|
|
+# 部署架构
|
|
|
|
|
+
|
|
|
|
|
+<cite>
|
|
|
|
|
+**本文档引用的文件**
|
|
|
|
|
+- [wrangler.jsonc](file://wrangler.jsonc)
|
|
|
|
|
+- [.dev.vars](file://.dev.vars)
|
|
|
|
|
+- [package.json](file://package.json)
|
|
|
|
|
+- [src/index.ts](file://src/index.ts)
|
|
|
|
|
+- [src/command/index.ts](file://src/command/index.ts)
|
|
|
|
|
+- [src/scheduler/index.ts](file://src/scheduler/index.ts)
|
|
|
|
|
+- [worker-configuration.d.ts](file://worker-configuration.d.ts)
|
|
|
|
|
+- [src/command/handlers/login.ts](file://src/command/handlers/login.ts)
|
|
|
|
|
+- [src/client/cosmoe.ts](file://src/client/cosmoe.ts)
|
|
|
|
|
+</cite>
|
|
|
|
|
+
|
|
|
|
|
+## 目录
|
|
|
|
|
+1. [简介](#简介)
|
|
|
|
|
+2. [项目结构](#项目结构)
|
|
|
|
|
+3. [核心组件](#核心组件)
|
|
|
|
|
+4. [架构概览](#架构概览)
|
|
|
|
|
+5. [详细组件分析](#详细组件分析)
|
|
|
|
|
+6. [部署配置详解](#部署配置详解)
|
|
|
|
|
+7. [环境变量管理](#环境变量管理)
|
|
|
|
|
+8. [KV 命名空间配置](#kv-命名空间配置)
|
|
|
|
|
+9. [监控与日志配置](#监控与日志配置)
|
|
|
|
|
+10. [性能优化策略](#性能优化策略)
|
|
|
|
|
+11. [部署最佳实践](#部署最佳实践)
|
|
|
|
|
+12. [故障排除指南](#故障排除指南)
|
|
|
|
|
+13. [结论](#结论)
|
|
|
|
|
+
|
|
|
|
|
+## 简介
|
|
|
|
|
+
|
|
|
|
|
+Cosmoe Bot 是一个基于 Cloudflare Workers 的 Telegram 机器人应用,集成了摄影活动管理和用户交互功能。该系统通过 Cloudflare Workers 平台实现无服务器部署,利用 KV 存储进行数据持久化,并通过 Cron 触发器实现定时任务调度。
|
|
|
|
|
+
|
|
|
|
|
+本部署架构文档详细说明了 Cloudflare Workers 的部署配置和运行时环境,包括 wrangler.jsonc 配置选项、环境变量管理、Worker 脚本的部署流程,以及生产环境和开发环境的差异配置。
|
|
|
|
|
+
|
|
|
|
|
+## 项目结构
|
|
|
|
|
+
|
|
|
|
|
+该项目采用模块化的 TypeScript 架构,主要包含以下核心目录和文件:
|
|
|
|
|
+
|
|
|
|
|
+```mermaid
|
|
|
|
|
+graph TB
|
|
|
|
|
+subgraph "项目根目录"
|
|
|
|
|
+A[wrangler.jsonc] --> B[配置文件]
|
|
|
|
|
+C[package.json] --> D[依赖管理]
|
|
|
|
|
+E[.dev.vars] --> F[开发环境变量]
|
|
|
|
|
+G[worker-configuration.d.ts] --> H[类型定义]
|
|
|
|
|
+end
|
|
|
|
|
+subgraph "源代码结构"
|
|
|
|
|
+I[src/] --> J[主入口文件]
|
|
|
|
|
+K[src/command/] --> L[命令处理器]
|
|
|
|
|
+M[src/scheduler/] --> N[定时任务]
|
|
|
|
|
+O[src/client/] --> P[API 客户端]
|
|
|
|
|
+Q[src/index.ts] --> R[主控制器]
|
|
|
|
|
+end
|
|
|
|
|
+subgraph "命令处理器"
|
|
|
|
|
+S[start.ts] --> T[开始命令]
|
|
|
|
|
+U[login.ts] --> V[登录处理]
|
|
|
|
|
+W[events.ts] --> X[活动查询]
|
|
|
|
|
+Y[history.ts] --> Z[历史记录]
|
|
|
|
|
+end
|
|
|
|
|
+subgraph "定时任务"
|
|
|
|
|
+AA[index.ts] --> BB[事件通知]
|
|
|
|
|
+end
|
|
|
|
|
+subgraph "API 客户端"
|
|
|
|
|
+CC[cosmoe.ts] --> DD[Cosmoe API]
|
|
|
|
|
+end
|
|
|
|
|
+```
|
|
|
|
|
+
|
|
|
|
|
+**图表来源**
|
|
|
|
|
+- [wrangler.jsonc](file://wrangler.jsonc#L1-L31)
|
|
|
|
|
+- [package.json](file://package.json#L1-L24)
|
|
|
|
|
+- [src/index.ts](file://src/index.ts#L1-L47)
|
|
|
|
|
+
|
|
|
|
|
+**章节来源**
|
|
|
|
|
+- [wrangler.jsonc](file://wrangler.jsonc#L1-L31)
|
|
|
|
|
+- [package.json](file://package.json#L1-L24)
|
|
|
|
|
+- [src/index.ts](file://src/index.ts#L1-L47)
|
|
|
|
|
+
|
|
|
|
|
+## 核心组件
|
|
|
|
|
+
|
|
|
|
|
+### 主要组件概述
|
|
|
|
|
+
|
|
|
|
|
+该系统由以下几个核心组件构成:
|
|
|
|
|
+
|
|
|
|
|
+1. **Bot 核心引擎** - 基于 Grammy.js 框架的 Telegram 机器人
|
|
|
|
|
+2. **命令处理器系统** - 处理各种用户命令和交互
|
|
|
|
|
+3. **定时任务调度器** - 周期性检查新活动并发送通知
|
|
|
|
|
+4. **KV 存储适配器** - 提供对话状态和用户数据持久化
|
|
|
|
|
+5. **API 客户端** - 与 Cosmoe 系统进行数据交互
|
|
|
|
|
+
|
|
|
|
|
+### 组件关系图
|
|
|
|
|
+
|
|
|
|
|
+```mermaid
|
|
|
|
|
+classDiagram
|
|
|
|
|
+class Bot {
|
|
|
|
|
++string BOT_INFO
|
|
|
|
|
++string BOT_TOKEN
|
|
|
|
|
++KVNamespace COSMOE_CREDENTIALS
|
|
|
|
|
++KVNamespace COSMOE_STORAGE
|
|
|
|
|
++fetch(request, env, ctx) Response
|
|
|
|
|
++scheduled(controller, env, ctx) void
|
|
|
|
|
+}
|
|
|
|
|
+class CommandSystem {
|
|
|
|
|
++setupCommands(bot, env) void
|
|
|
|
|
++handleStartCommand(ctx) void
|
|
|
|
|
++handleLoginCommand(ctx) void
|
|
|
|
|
++handleEventsCommand(ctx) void
|
|
|
|
|
++handleHistoryCommand(ctx, env) void
|
|
|
|
|
+}
|
|
|
|
|
+class Scheduler {
|
|
|
|
|
++handleScheduledEvent(bot, controller, env, ctx) void
|
|
|
|
|
++handleNewEventNotifications() void
|
|
|
|
|
+}
|
|
|
|
|
+class KVAdapter {
|
|
|
|
|
++read(key) any
|
|
|
|
|
++write(key, value) void
|
|
|
|
|
++delete(key) void
|
|
|
|
|
+}
|
|
|
|
|
+class CosmoeClient {
|
|
|
|
|
++getToken(username, password) ApiResponse
|
|
|
|
|
++getEvents() ApiResponse
|
|
|
|
|
++getEventDetail(eventId) ApiResponse
|
|
|
|
|
++getMyBookings() ApiResponse
|
|
|
|
|
++bookEvent(bookingRequest) ApiResponse
|
|
|
|
|
+}
|
|
|
|
|
+Bot --> CommandSystem : "使用"
|
|
|
|
|
+Bot --> Scheduler : "使用"
|
|
|
|
|
+CommandSystem --> KVAdapter : "使用"
|
|
|
|
|
+Scheduler --> CosmoeClient : "使用"
|
|
|
|
|
+CommandSystem --> CosmoeClient : "使用"
|
|
|
|
|
+```
|
|
|
|
|
+
|
|
|
|
|
+**图表来源**
|
|
|
|
|
+- [src/index.ts](file://src/index.ts#L6-L11)
|
|
|
|
|
+- [src/command/index.ts](file://src/command/index.ts#L20-L52)
|
|
|
|
|
+- [src/scheduler/index.ts](file://src/scheduler/index.ts#L12-L17)
|
|
|
|
|
+- [src/client/cosmoe.ts](file://src/client/cosmoe.ts#L113-L170)
|
|
|
|
|
+
|
|
|
|
|
+**章节来源**
|
|
|
|
|
+- [src/index.ts](file://src/index.ts#L1-L47)
|
|
|
|
|
+- [src/command/index.ts](file://src/command/index.ts#L1-L110)
|
|
|
|
|
+- [src/scheduler/index.ts](file://src/scheduler/index.ts#L1-L88)
|
|
|
|
|
+
|
|
|
|
|
+## 架构概览
|
|
|
|
|
+
|
|
|
|
|
+### 整体架构设计
|
|
|
|
|
+
|
|
|
|
|
+该系统采用事件驱动的无服务器架构,通过 Cloudflare Workers 的边缘网络实现全球分布的高可用服务。
|
|
|
|
|
+
|
|
|
|
|
+```mermaid
|
|
|
|
|
+graph TB
|
|
|
|
|
+subgraph "客户端层"
|
|
|
|
|
+A[Telegram 用户] --> B[Telegram Bot API]
|
|
|
|
|
+end
|
|
|
|
|
+subgraph "Cloudflare 边缘网络"
|
|
|
|
|
+C[Workers Runtime] --> D[请求处理]
|
|
|
|
|
+E[Workers Runtime] --> F[定时任务]
|
|
|
|
|
+G[Workers Runtime] --> H[缓存层]
|
|
|
|
|
+end
|
|
|
|
|
+subgraph "数据存储层"
|
|
|
|
|
+I[KV 存储 - COSMOE_CREDENTIALS] --> J[用户凭证]
|
|
|
|
|
+K[KV 存储 - COSMOE_STORAGE] --> L[对话状态]
|
|
|
|
|
+M[Telegram API] --> N[消息发送]
|
|
|
|
|
+end
|
|
|
|
|
+subgraph "外部服务"
|
|
|
|
|
+O[Cosmoe API] --> P[活动数据]
|
|
|
|
|
+Q[Cosmoe API] --> R[用户数据]
|
|
|
|
|
+end
|
|
|
|
|
+A --> B --> C
|
|
|
|
|
+C --> D
|
|
|
|
|
+C --> F
|
|
|
|
|
+D --> I
|
|
|
|
|
+D --> K
|
|
|
|
|
+F --> O
|
|
|
|
|
+O --> P
|
|
|
|
|
+O --> R
|
|
|
|
|
+D --> M
|
|
|
|
|
+M --> N
|
|
|
|
|
+```
|
|
|
|
|
+
|
|
|
|
|
+**图表来源**
|
|
|
|
|
+- [wrangler.jsonc](file://wrangler.jsonc#L13-L17)
|
|
|
|
|
+- [src/index.ts](file://src/index.ts#L13-L46)
|
|
|
|
|
+- [src/scheduler/index.ts](file://src/scheduler/index.ts#L12-L17)
|
|
|
|
|
+
|
|
|
|
|
+### 请求处理流程
|
|
|
|
|
+
|
|
|
|
|
+```mermaid
|
|
|
|
|
+sequenceDiagram
|
|
|
|
|
+participant User as 机器人用户
|
|
|
|
|
+participant Telegram as Telegram API
|
|
|
|
|
+participant Worker as Cloudflare Worker
|
|
|
|
|
+participant Bot as Bot 核心
|
|
|
|
|
+participant Commands as 命令处理器
|
|
|
|
|
+participant KV as KV 存储
|
|
|
|
|
+User->>Telegram : 发送命令
|
|
|
|
|
+Telegram->>Worker : HTTP 请求
|
|
|
|
|
+Worker->>Bot : 初始化 Bot 实例
|
|
|
|
|
+Bot->>Commands : 设置命令处理器
|
|
|
|
|
+Commands->>KV : 读取对话状态
|
|
|
|
|
+KV-->>Commands : 返回状态数据
|
|
|
|
|
+Commands->>Commands : 处理命令逻辑
|
|
|
|
|
+Commands->>Telegram : 发送响应
|
|
|
|
|
+Telegram-->>User : 返回结果
|
|
|
|
|
+```
|
|
|
|
|
+
|
|
|
|
|
+**图表来源**
|
|
|
|
|
+- [src/index.ts](file://src/index.ts#L14-L35)
|
|
|
|
|
+- [src/command/index.ts](file://src/command/index.ts#L20-L52)
|
|
|
|
|
+
|
|
|
|
|
+## 详细组件分析
|
|
|
|
|
+
|
|
|
|
|
+### 主入口文件分析
|
|
|
|
|
+
|
|
|
|
|
+主入口文件负责初始化 Bot 实例、设置命令处理器和处理定时任务。
|
|
|
|
|
+
|
|
|
|
|
+```mermaid
|
|
|
|
|
+flowchart TD
|
|
|
|
|
+Start([Worker 启动]) --> InitBot["初始化 Bot 实例<br/>解析 BOT_INFO<br/>设置 BOT_TOKEN"]
|
|
|
|
|
+InitBot --> SetupCommands["设置命令处理器<br/>安装对话插件"]
|
|
|
|
|
+SetupCommands --> SetCommands["注册命令菜单<br/>setMyCommands"]
|
|
|
|
|
+SetCommands --> Webhook["设置 Webhook 回调"]
|
|
|
|
|
+Webhook --> Ready([就绪状态])
|
|
|
|
|
+Ready --> Request{"收到请求?"}
|
|
|
|
|
+Request --> |是| HandleRequest["处理 HTTP 请求"]
|
|
|
|
|
+Request --> |否| Scheduled{"定时触发?"}
|
|
|
|
|
+HandleRequest --> WebhookCallback["webhookCallback"]
|
|
|
|
|
+WebhookCallback --> TelegramResponse["返回 Telegram 响应"]
|
|
|
|
|
+Scheduled --> |是| HandleScheduled["处理定时任务"]
|
|
|
|
|
+HandleScheduled --> ProcessEvents["检查新活动"]
|
|
|
|
|
+ProcessEvents --> SendNotifications["发送通知给用户"]
|
|
|
|
|
+SendNotifications --> Complete([完成])
|
|
|
|
|
+```
|
|
|
|
|
+
|
|
|
|
|
+**图表来源**
|
|
|
|
|
+- [src/index.ts](file://src/index.ts#L13-L46)
|
|
|
|
|
+
|
|
|
|
|
+**章节来源**
|
|
|
|
|
+- [src/index.ts](file://src/index.ts#L1-L47)
|
|
|
|
|
+
|
|
|
|
|
+### 命令处理系统
|
|
|
|
|
+
|
|
|
|
|
+命令处理系统基于 @grammyjs/conversations 插件,提供了丰富的用户交互能力。
|
|
|
|
|
+
|
|
|
|
|
+#### 对话状态管理
|
|
|
|
|
+
|
|
|
|
|
+```mermaid
|
|
|
|
|
+classDiagram
|
|
|
|
|
+class ConversationStorage {
|
|
|
|
|
++read(key) Promise~any~
|
|
|
|
|
++write(key, value) Promise~void~
|
|
|
|
|
++delete(key) Promise~void~
|
|
|
|
|
+}
|
|
|
|
|
+class KvAdapter {
|
|
|
|
|
++read(key) Promise~string|undefined~
|
|
|
|
|
++write(key, value) Promise~void~
|
|
|
|
|
++delete(key) Promise~void~
|
|
|
|
|
+}
|
|
|
|
|
+class LoginConversation {
|
|
|
|
|
++handleInteractiveLogin(conversation, ctx, env) Promise~void~
|
|
|
|
|
++askUsername() Promise~string~
|
|
|
|
|
++askPassword() Promise~string~
|
|
|
|
|
++storeCredentials() Promise~void~
|
|
|
|
|
+}
|
|
|
|
|
+ConversationStorage --> KvAdapter : "使用"
|
|
|
|
|
+LoginConversation --> ConversationStorage : "使用"
|
|
|
|
|
+```
|
|
|
|
|
+
|
|
|
|
|
+**图表来源**
|
|
|
|
|
+- [src/command/index.ts](file://src/command/index.ts#L20-L52)
|
|
|
|
|
+- [src/command/handlers/login.ts](file://src/command/handlers/login.ts#L13-L75)
|
|
|
|
|
+
|
|
|
|
|
+**章节来源**
|
|
|
|
|
+- [src/command/index.ts](file://src/command/index.ts#L1-L110)
|
|
|
|
|
+- [src/command/handlers/login.ts](file://src/command/handlers/login.ts#L1-L75)
|
|
|
|
|
+
|
|
|
|
|
+### 定时任务调度器
|
|
|
|
|
+
|
|
|
|
|
+定时任务调度器每分钟检查一次新的摄影活动,并向已注册的用户发送通知。
|
|
|
|
|
+
|
|
|
|
|
+#### 事件通知流程
|
|
|
|
|
+
|
|
|
|
|
+```mermaid
|
|
|
|
|
+flowchart TD
|
|
|
|
|
+CronTrigger["Cron 触发器<br/>*/1 * * * *"] --> InitScheduler["初始化调度器"]
|
|
|
|
|
+InitScheduler --> LoadLatestEvent["加载最新事件ID"]
|
|
|
|
|
+LoadLatestEvent --> FetchEvents["获取所有活动"]
|
|
|
|
|
+FetchEvents --> FilterNewEvents{"有新活动?"}
|
|
|
|
|
+FilterNewEvents --> |否| Complete([完成])
|
|
|
|
|
+FilterNewEvents --> |是| ListUsers["列出所有用户"]
|
|
|
|
|
+ListUsers --> IterateUsers["遍历每个用户"]
|
|
|
|
|
+IterateUsers --> SendNotification["发送活动通知"]
|
|
|
|
|
+SendNotification --> VerifySuccess{"发送成功?"}
|
|
|
|
|
+VerifySuccess --> |是| UpdateLatest["更新最新事件ID"]
|
|
|
|
|
+VerifySuccess --> |否| LogError["记录错误"]
|
|
|
|
|
+UpdateLatest --> NextUser["下一个用户"]
|
|
|
|
|
+LogError --> NextUser
|
|
|
|
|
+NextUser --> IterateUsers
|
|
|
|
|
+UpdateLatest --> Complete
|
|
|
|
|
+LogError --> Complete
|
|
|
|
|
+```
|
|
|
|
|
+
|
|
|
|
|
+**图表来源**
|
|
|
|
|
+- [src/scheduler/index.ts](file://src/scheduler/index.ts#L12-L88)
|
|
|
|
|
+
|
|
|
|
|
+**章节来源**
|
|
|
|
|
+- [src/scheduler/index.ts](file://src/scheduler/index.ts#L1-L88)
|
|
|
|
|
+
|
|
|
|
|
+### API 客户端集成
|
|
|
|
|
+
|
|
|
|
|
+Cosmoe API 客户端提供了完整的摄影活动管理系统接口。
|
|
|
|
|
+
|
|
|
|
|
+#### API 接口分类
|
|
|
|
|
+
|
|
|
|
|
+```mermaid
|
|
|
|
|
+graph LR
|
|
|
|
|
+subgraph "认证相关"
|
|
|
|
|
+A[getToken] --> B[用户登录]
|
|
|
|
|
+C[getProfile] --> D[获取用户资料]
|
|
|
|
|
+E[getUserProfile] --> F[获取用户详情]
|
|
|
|
|
+end
|
|
|
|
|
+subgraph "活动相关"
|
|
|
|
|
+G[getEvents] --> H[获取活动列表]
|
|
|
|
|
+I[getEventDetail] --> J[获取活动详情]
|
|
|
|
|
+K[getAvailableCoupons] --> L[获取可用优惠券]
|
|
|
|
|
+end
|
|
|
|
|
+subgraph "预订相关"
|
|
|
|
|
+M[bookEvent] --> N[预订活动]
|
|
|
|
|
+O[getMyBookings] --> P[获取预订历史]
|
|
|
|
|
+Q[cancelBooking] --> R[取消预订]
|
|
|
|
|
+S[selfReschedule] --> T[重新安排时间]
|
|
|
|
|
+U[selfTransfer] --> V[转让预订]
|
|
|
|
|
+end
|
|
|
|
|
+subgraph "系统相关"
|
|
|
|
|
+W[changePassword] --> X[修改密码]
|
|
|
|
|
+Y[register] --> Z[用户注册]
|
|
|
|
|
+end
|
|
|
|
|
+```
|
|
|
|
|
+
|
|
|
|
|
+**图表来源**
|
|
|
|
|
+- [src/client/cosmoe.ts](file://src/client/cosmoe.ts#L113-L503)
|
|
|
|
|
+
|
|
|
|
|
+**章节来源**
|
|
|
|
|
+- [src/client/cosmoe.ts](file://src/client/cosmoe.ts#L1-L503)
|
|
|
|
|
+
|
|
|
|
|
+## 部署配置详解
|
|
|
|
|
+
|
|
|
|
|
+### Wrangler 配置文件分析
|
|
|
|
|
+
|
|
|
|
|
+Wrangler 配置文件定义了 Worker 的部署参数和运行时行为。
|
|
|
|
|
+
|
|
|
|
|
+#### 核心配置项
|
|
|
|
|
+
|
|
|
|
|
+| 配置项 | 类型 | 描述 | 默认值 |
|
|
|
|
|
+|--------|------|------|--------|
|
|
|
|
|
+| name | string | Worker 名称 | cosmoe-bot |
|
|
|
|
|
+| main | string | 主入口文件路径 | src/index.ts |
|
|
|
|
|
+| compatibility_date | string | 兼容性日期 | 2025-09-27 |
|
|
|
|
|
+| observability.enabled | boolean | 启用可观测性 | true |
|
|
|
|
|
+| triggers.crons | array | Cron 表达式数组 | */1 * * * * |
|
|
|
|
|
+
|
|
|
|
|
+#### KV 命名空间配置
|
|
|
|
|
+
|
|
|
|
|
+```mermaid
|
|
|
|
|
+erDiagram
|
|
|
|
|
+KV_NAMESPACES {
|
|
|
|
|
+string binding PK
|
|
|
|
|
+string id
|
|
|
|
|
+}
|
|
|
|
|
+KV_NAMESPACES {
|
|
|
|
|
+COSMOE_CREDENTIALS {
|
|
|
|
|
+string binding "COSMOE_CREDENTIALS"
|
|
|
|
|
+string id "668dab226bea4de6ab8ef8a5150b926c"
|
|
|
|
|
+}
|
|
|
|
|
+}
|
|
|
|
|
+KV_NAMESPACES {
|
|
|
|
|
+COSMOE_STORAGE {
|
|
|
|
|
+string binding "COSMOE_STORAGE"
|
|
|
|
|
+string id "a3d8a40e24b0469d8627171d4ce8e51d"
|
|
|
|
|
+}
|
|
|
|
|
+}
|
|
|
|
|
+```
|
|
|
|
|
+
|
|
|
|
|
+**图表来源**
|
|
|
|
|
+- [wrangler.jsonc](file://wrangler.jsonc#L21-L30)
|
|
|
|
|
+
|
|
|
|
|
+**章节来源**
|
|
|
|
|
+- [wrangler.jsonc](file://wrangler.jsonc#L1-L31)
|
|
|
|
|
+
|
|
|
|
|
+### 部署脚本配置
|
|
|
|
|
+
|
|
|
|
|
+项目使用 npm scripts 进行部署管理,提供了多种部署模式。
|
|
|
|
|
+
|
|
|
|
|
+#### 部署脚本对比
|
|
|
|
|
+
|
|
|
|
|
+| 脚本名称 | 命令 | 用途 | 特点 |
|
|
|
|
|
+|----------|------|------|------|
|
|
|
|
|
+| deploy | wrangler deploy | 生产部署 | 使用生产配置 |
|
|
|
|
|
+| dev | wrangler dev | 开发模式 | 启用热重载 |
|
|
|
|
|
+| start | wrangler dev | 启动服务 | 开发环境别名 |
|
|
|
|
|
+| cf-typegen | wrangler types | 类型生成 | 更新类型定义 |
|
|
|
|
|
+
|
|
|
|
|
+**章节来源**
|
|
|
|
|
+- [package.json](file://package.json#L5-L11)
|
|
|
|
|
+
|
|
|
|
|
+## 环境变量管理
|
|
|
|
|
+
|
|
|
|
|
+### 开发环境变量
|
|
|
|
|
+
|
|
|
|
|
+开发环境使用 `.dev.vars` 文件管理敏感配置信息。
|
|
|
|
|
+
|
|
|
|
|
+#### 开发环境配置
|
|
|
|
|
+
|
|
|
|
|
+```mermaid
|
|
|
|
|
+flowchart LR
|
|
|
|
|
+DevVars[".dev.vars 文件"] --> EnvVars["环境变量"]
|
|
|
|
|
+EnvVars --> BotToken["BOT_TOKEN<br/>8219164862:AAEIbExTBgH_8FsFCVAHqc3uZgpu4HxqRQY"]
|
|
|
|
|
+EnvVars --> DevMode["开发模式"]
|
|
|
|
|
+EnvVars --> LocalTesting["本地测试"]
|
|
|
|
|
+```
|
|
|
|
|
+
|
|
|
|
|
+**图表来源**
|
|
|
|
|
+- [.dev.vars](file://.dev.vars#L1-L2)
|
|
|
|
|
+
|
|
|
|
|
+#### 生产环境变量
|
|
|
|
|
+
|
|
|
|
|
+生产环境通过 Cloudflare Workers 控制台或 CLI 设置环境变量。
|
|
|
|
|
+
|
|
|
|
|
+**章节来源**
|
|
|
|
|
+- [.dev.vars](file://.dev.vars#L1-L2)
|
|
|
|
|
+- [src/index.ts](file://src/index.ts#L6-L11)
|
|
|
|
|
+
|
|
|
|
|
+### 变量绑定机制
|
|
|
|
|
+
|
|
|
|
|
+Worker 通过接口定义声明所需的环境变量,确保类型安全。
|
|
|
|
|
+
|
|
|
|
|
+```mermaid
|
|
|
|
|
+classDiagram
|
|
|
|
|
+class EnvInterface {
|
|
|
|
|
++string BOT_INFO
|
|
|
|
|
++string BOT_TOKEN
|
|
|
|
|
++KVNamespace COSMOE_CREDENTIALS
|
|
|
|
|
++KVNamespace COSMOE_STORAGE
|
|
|
|
|
+}
|
|
|
|
|
+class WorkerRuntime {
|
|
|
|
|
++EnvInterface env
|
|
|
|
|
++ExecutionContext ctx
|
|
|
|
|
++Request request
|
|
|
|
|
+}
|
|
|
|
|
+EnvInterface --> WorkerRuntime : "绑定"
|
|
|
|
|
+```
|
|
|
|
|
+
|
|
|
|
|
+**图表来源**
|
|
|
|
|
+- [src/index.ts](file://src/index.ts#L6-L11)
|
|
|
|
|
+- [worker-configuration.d.ts](file://worker-configuration.d.ts#L8-L11)
|
|
|
|
|
+
|
|
|
|
|
+**章节来源**
|
|
|
|
|
+- [src/index.ts](file://src/index.ts#L6-L11)
|
|
|
|
|
+- [worker-configuration.d.ts](file://worker-configuration.d.ts#L1-L800)
|
|
|
|
|
+
|
|
|
|
|
+## KV 命名空间配置
|
|
|
|
|
+
|
|
|
|
|
+### 命名空间设计原则
|
|
|
|
|
+
|
|
|
|
|
+系统使用两个独立的 KV 命名空间来分离不同类型的数据:
|
|
|
|
|
+
|
|
|
|
|
+1. **COSMOE_CREDENTIALS** - 存储用户认证凭证
|
|
|
|
|
+2. **COSMOE_STORAGE** - 存储对话状态和应用数据
|
|
|
|
|
+
|
|
|
|
|
+### 数据模型设计
|
|
|
|
|
+
|
|
|
|
|
+#### 用户凭证存储
|
|
|
|
|
+
|
|
|
|
|
+```mermaid
|
|
|
|
|
+erDiagram
|
|
|
|
|
+USERS {
|
|
|
|
|
+string telegram_user_id PK
|
|
|
|
|
+object credentials {
|
|
|
|
|
+number user_id
|
|
|
|
|
+string token
|
|
|
|
|
+number timestamp
|
|
|
|
|
+}
|
|
|
|
|
+}
|
|
|
|
|
+CREDENTIALS {
|
|
|
|
|
+string telegram_user_id PK
|
|
|
|
|
+json credentials
|
|
|
|
|
+}
|
|
|
|
|
+USERS ||--|| CREDENTIALS : "关联"
|
|
|
|
|
+```
|
|
|
|
|
+
|
|
|
|
|
+#### 对话状态存储
|
|
|
|
|
+
|
|
|
|
|
+```mermaid
|
|
|
|
|
+erDiagram
|
|
|
|
|
+CONVERSATIONS {
|
|
|
|
|
+string conversation_key PK
|
|
|
|
|
+json conversation_data
|
|
|
|
|
+datetime created_at
|
|
|
|
|
+datetime updated_at
|
|
|
|
|
+}
|
|
|
|
|
+STORAGE {
|
|
|
|
|
+string key PK
|
|
|
|
|
+string value
|
|
|
|
|
+datetime last_modified
|
|
|
|
|
+}
|
|
|
|
|
+CONVERSATIONS ||--|| STORAGE : "使用"
|
|
|
|
|
+```
|
|
|
|
|
+
|
|
|
|
|
+**章节来源**
|
|
|
|
|
+- [src/command/handlers/login.ts](file://src/command/handlers/login.ts#L50-L65)
|
|
|
|
|
+- [src/command/index.ts](file://src/command/index.ts#L20-L52)
|
|
|
|
|
+
|
|
|
|
|
+### KV 访问模式
|
|
|
|
|
+
|
|
|
|
|
+系统采用异步访问模式,确保操作的可靠性和性能。
|
|
|
|
|
+
|
|
|
|
|
+```mermaid
|
|
|
|
|
+sequenceDiagram
|
|
|
|
|
+participant Handler as 命令处理器
|
|
|
|
|
+participant KV as KV 存储
|
|
|
|
|
+participant Adapter as KV 适配器
|
|
|
|
|
+Handler->>Adapter : read(key)
|
|
|
|
|
+Adapter->>KV : get(key)
|
|
|
|
|
+KV-->>Adapter : value
|
|
|
|
|
+Adapter-->>Handler : parsed_value
|
|
|
|
|
+Handler->>Adapter : write(key, value)
|
|
|
|
|
+Adapter->>KV : put(key, serialized_value)
|
|
|
|
|
+KV-->>Adapter : success
|
|
|
|
|
+Adapter-->>Handler : void
|
|
|
|
|
+Handler->>Adapter : delete(key)
|
|
|
|
|
+Adapter->>KV : delete(key)
|
|
|
|
|
+KV-->>Adapter : success
|
|
|
|
|
+Adapter-->>Handler : void
|
|
|
|
|
+```
|
|
|
|
|
+
|
|
|
|
|
+**图表来源**
|
|
|
|
|
+- [src/command/index.ts](file://src/command/index.ts#L26-L49)
|
|
|
|
|
+
|
|
|
|
|
+## 监控与日志配置
|
|
|
|
|
+
|
|
|
|
|
+### 观测性配置
|
|
|
|
|
+
|
|
|
|
|
+系统启用了 Cloudflare Workers 的观测性功能,提供全面的监控能力。
|
|
|
|
|
+
|
|
|
|
|
+#### 观测性特性
|
|
|
|
|
+
|
|
|
|
|
+| 功能 | 描述 | 配置位置 |
|
|
|
|
|
+|------|------|----------|
|
|
|
|
|
+| 请求追踪 | 跟踪 HTTP 请求 | observability.enabled: true |
|
|
|
|
|
+| 性能指标 | 收集运行时指标 | 自动启用 |
|
|
|
|
|
+| 日志记录 | 控制台日志输出 | console.log() |
|
|
|
|
|
+| 错误报告 | 异常捕获和报告 | try-catch 包装 |
|
|
|
|
|
+
|
|
|
|
|
+### 日志记录策略
|
|
|
|
|
+
|
|
|
|
|
+系统在关键操作点记录详细日志,便于问题诊断和性能分析。
|
|
|
|
|
+
|
|
|
|
|
+#### 关键日志点
|
|
|
|
|
+
|
|
|
|
|
+```mermaid
|
|
|
|
|
+flowchart TD
|
|
|
|
|
+Start([操作开始]) --> LogStart["记录开始日志"]
|
|
|
|
|
+LogStart --> Process["执行业务逻辑"]
|
|
|
|
|
+Process --> Success{"操作成功?"}
|
|
|
|
|
+Success --> |是| LogSuccess["记录成功日志"]
|
|
|
|
|
+Success --> |否| LogError["记录错误日志<br/>包含错误详情"]
|
|
|
|
|
+LogSuccess --> Complete([操作完成])
|
|
|
|
|
+LogError --> Complete
|
|
|
|
|
+```
|
|
|
|
|
+
|
|
|
|
|
+**图表来源**
|
|
|
|
|
+- [src/scheduler/index.ts](file://src/scheduler/index.ts#L18-L87)
|
|
|
|
|
+
|
|
|
|
|
+**章节来源**
|
|
|
|
|
+- [wrangler.jsonc](file://wrangler.jsonc#L10-L12)
|
|
|
|
|
+- [src/scheduler/index.ts](file://src/scheduler/index.ts#L18-L87)
|
|
|
|
|
+
|
|
|
|
|
+## 性能优化策略
|
|
|
|
|
+
|
|
|
|
|
+### 冷启动优化
|
|
|
|
|
+
|
|
|
|
|
+针对 Cloudflare Workers 的冷启动特性,系统采用了多项优化策略:
|
|
|
|
|
+
|
|
|
|
|
+#### 初始化优化
|
|
|
|
|
+
|
|
|
|
|
+```mermaid
|
|
|
|
|
+flowchart LR
|
|
|
|
|
+subgraph "冷启动优化策略"
|
|
|
|
|
+A[延迟初始化] --> B[按需加载模块]
|
|
|
|
|
+C[预热机制] --> D[缓存常用数据]
|
|
|
|
|
+E[代码分割] --> F[减少初始包大小]
|
|
|
|
|
+G[静态资源] --> H[预编译和压缩]
|
|
|
|
|
+end
|
|
|
|
|
+subgraph "运行时优化"
|
|
|
|
|
+I[连接复用] --> J[重用 HTTP 连接]
|
|
|
|
|
+K[内存管理] --> L[及时释放资源]
|
|
|
|
|
+M[并发控制] --> N[限制同时请求数]
|
|
|
|
|
+end
|
|
|
|
|
+```
|
|
|
|
|
+
|
|
|
|
|
+#### 资源限制与调优
|
|
|
|
|
+
|
|
|
|
|
+| 资源类别 | 限制 | 优化建议 |
|
|
|
|
|
+|----------|------|----------|
|
|
|
|
|
+| CPU 时间 | 30 秒 | 优化算法复杂度 |
|
|
|
|
|
+| 内存 | 256 MB | 减少对象创建 |
|
|
|
|
|
+| 请求大小 | 1 MB | 分块传输 |
|
|
|
|
|
+| 响应大小 | 1 MB | 流式响应 |
|
|
|
|
|
+| 并发连接 | 100 | 连接池管理 |
|
|
|
|
|
+
|
|
|
|
|
+### 缓存策略
|
|
|
|
|
+
|
|
|
|
|
+系统通过 KV 存储实现多层缓存机制:
|
|
|
|
|
+
|
|
|
|
|
+```mermaid
|
|
|
|
|
+graph TB
|
|
|
|
|
+subgraph "缓存层次"
|
|
|
|
|
+A[请求级缓存] --> B[会话级缓存]
|
|
|
|
|
+B --> C[用户级缓存]
|
|
|
|
|
+C --> D[全局缓存]
|
|
|
|
|
+end
|
|
|
|
|
+subgraph "缓存策略"
|
|
|
|
|
+E[L1 缓存] --> F[内存缓存]
|
|
|
|
|
+G[L2 缓存] --> H[KV 存储]
|
|
|
|
|
+I[L3 缓存] --> J[外部 API 缓存]
|
|
|
|
|
+end
|
|
|
|
|
+A --> E
|
|
|
|
|
+B --> G
|
|
|
|
|
+C --> I
|
|
|
|
|
+D --> J
|
|
|
|
|
+```
|
|
|
|
|
+
|
|
|
|
|
+**章节来源**
|
|
|
|
|
+- [src/scheduler/index.ts](file://src/scheduler/index.ts#L27-L78)
|
|
|
|
|
+- [src/command/index.ts](file://src/command/index.ts#L20-L52)
|
|
|
|
|
+
|
|
|
|
|
+## 部署最佳实践
|
|
|
|
|
+
|
|
|
|
|
+### 开发环境配置
|
|
|
|
|
+
|
|
|
|
|
+开发环境强调快速迭代和调试能力:
|
|
|
|
|
+
|
|
|
|
|
+#### 开发环境特性
|
|
|
|
|
+
|
|
|
|
|
+```mermaid
|
|
|
|
|
+flowchart TD
|
|
|
|
|
+DevConfig["开发环境配置"] --> HotReload["热重载支持"]
|
|
|
|
|
+DevConfig --> LocalDebug["本地调试"]
|
|
|
|
|
+DevConfig --> DevKV["开发用 KV 空间"]
|
|
|
|
|
+DevConfig --> TestAPI["测试 API 端点"]
|
|
|
|
|
+HotReload --> FastIteration["快速迭代"]
|
|
|
|
|
+LocalDebug --> EasyDebug["易于调试"]
|
|
|
|
|
+DevKV --> SafeTesting["安全测试"]
|
|
|
|
|
+TestAPI --> APIValidation["API 验证"]
|
|
|
|
|
+```
|
|
|
|
|
+
|
|
|
|
|
+#### 开发工作流程
|
|
|
|
|
+
|
|
|
|
|
+```mermaid
|
|
|
|
|
+sequenceDiagram
|
|
|
|
|
+participant Dev as 开发者
|
|
|
|
|
+participant DevServer as 开发服务器
|
|
|
|
|
+participant TestEnv as 测试环境
|
|
|
|
|
+participant ProdEnv as 生产环境
|
|
|
|
|
+Dev->>DevServer : 修改代码
|
|
|
|
|
+DevServer->>DevServer : 自动重启
|
|
|
|
|
+Dev->>TestEnv : 部署到测试
|
|
|
|
|
+TestEnv->>TestEnv : 自动测试
|
|
|
|
|
+Dev->>ProdEnv : 部署到生产
|
|
|
|
|
+ProdEnv->>ProdEnv : 监控检查
|
|
|
|
|
+```
|
|
|
|
|
+
|
|
|
|
|
+### 生产环境配置
|
|
|
|
|
+
|
|
|
|
|
+生产环境强调稳定性和安全性:
|
|
|
|
|
+
|
|
|
|
|
+#### 生产环境特性
|
|
|
|
|
+
|
|
|
|
|
+```mermaid
|
|
|
|
|
+flowchart LR
|
|
|
|
|
+subgraph "稳定性保障"
|
|
|
|
|
+A[健康检查] --> B[自动恢复]
|
|
|
|
|
+C[流量控制] --> D[限流保护]
|
|
|
|
|
+E[备份策略] --> F[数据备份]
|
|
|
|
|
+end
|
|
|
|
|
+subgraph "安全措施"
|
|
|
|
|
+G[API 密钥管理] --> H[环境变量隔离]
|
|
|
|
|
+I[访问控制] --> J[权限验证]
|
|
|
|
|
+K[审计日志] --> L[操作记录]
|
|
|
|
|
+end
|
|
|
|
|
+```
|
|
|
|
|
+
|
|
|
|
|
+### 部署流程
|
|
|
|
|
+
|
|
|
|
|
+```mermaid
|
|
|
|
|
+flowchart TD
|
|
|
|
|
+Start([开始部署]) --> Validate["验证配置"]
|
|
|
|
|
+Validate --> Build["构建代码"]
|
|
|
|
|
+Build --> Test["运行测试"]
|
|
|
|
|
+Test --> Deploy["部署到目标环境"]
|
|
|
|
|
+Deploy --> Monitor["监控部署状态"]
|
|
|
|
|
+Monitor --> Rollback{"部署成功?"}
|
|
|
|
|
+Rollback --> |是| Complete([部署完成])
|
|
|
|
|
+Rollback --> |否| RollbackOps["回滚操作"]
|
|
|
|
|
+RollbackOps --> Complete
|
|
|
|
|
+```
|
|
|
|
|
+
|
|
|
|
|
+**章节来源**
|
|
|
|
|
+- [package.json](file://package.json#L5-L11)
|
|
|
|
|
+- [wrangler.jsonc](file://wrangler.jsonc#L1-L31)
|
|
|
|
|
+
|
|
|
|
|
+## 故障排除指南
|
|
|
|
|
+
|
|
|
|
|
+### 常见问题诊断
|
|
|
|
|
+
|
|
|
|
|
+#### KV 存储相关问题
|
|
|
|
|
+
|
|
|
|
|
+```mermaid
|
|
|
|
|
+flowchart TD
|
|
|
|
|
+KVError["KV 存储错误"] --> ReadError["读取失败"]
|
|
|
|
|
+KVError --> WriteError["写入失败"]
|
|
|
|
|
+KVError --> DeleteError["删除失败"]
|
|
|
|
|
+ReadError --> CheckKey["检查键是否存在"]
|
|
|
|
|
+ReadError --> CheckFormat["检查数据格式"]
|
|
|
|
|
+ReadError --> CheckPermissions["检查权限"]
|
|
|
|
|
+WriteError --> CheckSize["检查数据大小"]
|
|
|
|
|
+WriteError --> CheckType["检查数据类型"]
|
|
|
|
|
+WriteError --> CheckRateLimit["检查速率限制"]
|
|
|
|
|
+DeleteError --> CheckKeyExists["检查键存在"]
|
|
|
|
|
+DeleteError --> CheckPermissions
|
|
|
|
|
+```
|
|
|
|
|
+
|
|
|
|
|
+#### API 调用异常
|
|
|
|
|
+
|
|
|
|
|
+```mermaid
|
|
|
|
|
+flowchart TD
|
|
|
|
|
+APIError["API 调用异常"] --> NetworkError["网络错误"]
|
|
|
|
|
+APIError --> AuthError["认证失败"]
|
|
|
|
|
+APIError --> TimeoutError["超时错误"]
|
|
|
|
|
+APIError --> ValidationError["数据验证错误"]
|
|
|
|
|
+NetworkError --> Retry["重试机制"]
|
|
|
|
|
+AuthError --> RefreshToken["刷新令牌"]
|
|
|
|
|
+TimeoutError --> Backoff["指数退避"]
|
|
|
|
|
+ValidationError --> ValidateInput["验证输入"]
|
|
|
|
|
+```
|
|
|
|
|
+
|
|
|
|
|
+### 调试工具和技巧
|
|
|
|
|
+
|
|
|
|
|
+#### 日志分析
|
|
|
|
|
+
|
|
|
|
|
+系统提供了多层次的日志记录机制,便于问题定位:
|
|
|
|
|
+
|
|
|
|
|
+```mermaid
|
|
|
|
|
+graph TB
|
|
|
|
|
+subgraph "日志级别"
|
|
|
|
|
+A[错误日志] --> B[警告日志]
|
|
|
|
|
+B --> C[信息日志]
|
|
|
|
|
+C --> D[调试日志]
|
|
|
|
|
+end
|
|
|
|
|
+subgraph "日志内容"
|
|
|
|
|
+E[请求信息] --> F[响应信息]
|
|
|
|
|
+G[错误详情] --> H[堆栈跟踪]
|
|
|
|
|
+I[性能指标] --> J[执行时间]
|
|
|
|
|
+end
|
|
|
|
|
+A --> E
|
|
|
|
|
+B --> F
|
|
|
|
|
+C --> G
|
|
|
|
|
+D --> H
|
|
|
|
|
+```
|
|
|
|
|
+
|
|
|
|
|
+#### 性能监控
|
|
|
|
|
+
|
|
|
|
|
+```mermaid
|
|
|
|
|
+flowchart LR
|
|
|
|
|
+subgraph "性能指标"
|
|
|
|
|
+A[请求延迟] --> B[内存使用]
|
|
|
|
|
+C[CPU 使用率] --> D[错误率]
|
|
|
|
|
+E[吞吐量] --> F[缓存命中率]
|
|
|
|
|
+end
|
|
|
|
|
+subgraph "监控工具"
|
|
|
|
|
+G[Cloudflare Analytics] --> H[日志分析]
|
|
|
|
|
+I[自定义指标] --> J[告警系统]
|
|
|
|
|
+end
|
|
|
|
|
+A --> G
|
|
|
|
|
+B --> H
|
|
|
|
|
+C --> I
|
|
|
|
|
+D --> J
|
|
|
|
|
+```
|
|
|
|
|
+
|
|
|
|
|
+**章节来源**
|
|
|
|
|
+- [src/scheduler/index.ts](file://src/scheduler/index.ts#L30-L87)
|
|
|
|
|
+- [src/command/index.ts](file://src/command/index.ts#L30-L49)
|
|
|
|
|
+
|
|
|
|
|
+## 结论
|
|
|
|
|
+
|
|
|
|
|
+Cosmoe Bot 项目展示了如何在 Cloudflare Workers 平台上构建高性能、可扩展的 Telegram 机器人应用。通过合理的架构设计、完善的监控体系和严格的部署流程,该系统能够稳定地为用户提供摄影活动管理和预订服务。
|
|
|
|
|
+
|
|
|
|
|
+### 关键优势
|
|
|
|
|
+
|
|
|
|
|
+1. **无服务器架构** - 无需管理服务器基础设施
|
|
|
|
|
+2. **全球分布** - 利用 Cloudflare 边缘网络提供低延迟服务
|
|
|
|
|
+3. **成本效益** - 按需付费的计费模式
|
|
|
|
|
+4. **高可用性** - 自动扩缩容和故障恢复
|
|
|
|
|
+5. **安全可靠** - 环境变量管理和访问控制
|
|
|
|
|
+
|
|
|
|
|
+### 未来改进方向
|
|
|
|
|
+
|
|
|
|
|
+1. **增强监控** - 集成更详细的性能指标和业务指标
|
|
|
|
|
+2. **优化缓存** - 实现更智能的缓存策略和失效机制
|
|
|
|
|
+3. **扩展功能** - 支持更多第三方服务集成
|
|
|
|
|
+4. **用户体验** - 改进界面交互和响应速度
|
|
|
|
|
+5. **安全性加固** - 实施更严格的身份验证和授权机制
|
|
|
|
|
+
|
|
|
|
|
+通过遵循本文档的部署架构指导和最佳实践,开发者可以确保系统的稳定运行和持续发展。
|