CodeRoadMap
首页路线题库资源库文章社区
CodeRoadMap

程序员的学习成长路线图。内容免费开放,登录后可同步路线图与课时进度。

由 程序员柏风 独立维护 · 关于作者

学习

  • 路线图
  • 课程
  • 面试题
  • 文章
  • 我

更多

  • 资源
  • 社区
  • 关于作者
  • 内容说明

© 2026 CodeRoadMap

津ICP备2026012044号-1·津公网安备12011002026155号·coderoadmap@126.com
Cloudflare 实战入门/课时/运维与集成
RawBlame
课时目录12 节

Cloudflare 实战入门

  1. 01边缘计算概览
  2. 02Wrangler 与本地开发
  3. 03Workers 核心
  4. 04Workers KV
  5. 05R2 对象存储
  6. 06D1 数据库
  7. 07Queues 消息队列
  8. 08Durable Objects
  9. 09Workers AI
  10. 10Stream 与媒体
  11. 11安全与防护
  12. 12运维与集成

运维与集成

CI/CD、Pages 与 Service Bindings。

30 分钟

运维与集成

这一课你将能做到

  1. 配置 GitHub Actions 实现代码推送后自动部署 Worker
  2. 使用 Workers Analytics、Logpush、Tail 日志构建可观测体系
  3. 集成 Pages Functions、Service Bindings、Cron Triggers 构建完整应用

为什么要学

写完代码只是开始。真正的工程化需要:代码推送自动部署、线上错误实时告警、性能数据可视化、定时任务自动执行。没有这些,你的 Worker 就是「能跑但不敢上生产」的玩具。

人话:运维与集成就是把「开发环境能跑」变成「生产环境稳定跑」。CI/CD 让你每次 git push 自动上线;监控让你第一时间知道哪里挂了;Service Bindings 让多个 Worker 像微服务一样互相调用;Cron Triggers 让你能跑定时任务。

先建立图像

开发工作流:
[git push] ──> [GitHub Actions] ──> [wrangler deploy] ──> [生产环境]
                                      │
                                      ├──> [部署到 staging]
                                      └──> [部署到 production]

可观测体系:
[Worker 运行] ──> [console.log] ──> [wrangler tail / Logpush]
                                      │
                                      ├──> [Datadog / Sentry]
                                      └──> [BigQuery / R2]

应用集成:
[Pages Functions] <──> [Service Bindings] <──> [其他 Worker]
        │                                          │
        └──> [KV / D1 / R2 / Queue] <──────────────┘
        
定时任务:
[Cron Trigger] ──> [每天 0 点] ──> [清理过期数据 / 生成报表]

跟着做

步骤 1:GitHub Actions 自动部署

创建 .github/workflows/deploy.yml:

name: Deploy Worker

on:
  push:
    branches: [main]

jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      
      - uses: actions/setup-node@v4
        with:
          node-version: '20'
      
      - run: npm ci
      
      - name: Deploy
        uses: cloudflare/wrangler-action@v3
        with:
          apiToken: ${{ secrets.CLOUDFLARE_API_TOKEN }}
          accountId: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }}

在 GitHub Repo → Settings → Secrets 中添加 CLOUDFLARE_API_TOKEN 和 CLOUDFLARE_ACCOUNT_ID。

步骤 2:多环境部署

- name: Deploy to Staging
  if: github.ref == 'refs/heads/develop'
  uses: cloudflare/wrangler-action@v3
  with:
    apiToken: ${{ secrets.CLOUDFLARE_API_TOKEN }}
    accountId: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }}
    command: deploy --env staging

- name: Deploy to Production
  if: github.ref == 'refs/heads/main'
  uses: cloudflare/wrangler-action@v3
  with:
    apiToken: ${{ secrets.CLOUDFLARE_API_TOKEN }}
    accountId: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }}
    command: deploy --env production

步骤 3:配置 Logpush 导出日志

Dashboard → Workers & Pages → 你的 Worker → Logs → Logpush:

  • 目的地:R2 / Datadog / S3 / BigQuery
  • 字段:选择 @timestamp、message、level、url
  • 过滤:level >= error(只导出错误日志)

步骤 4:Service Bindings 调用其他 Worker

wrangler.toml:

[[services]]
binding = "AUTH_SERVICE"
service = "auth-worker"
environment = "production"
export interface Env {
  AUTH_SERVICE: Fetcher;
}

export default {
  async fetch(request: Request, env: Env): Promise<Response> {
    // 直接调用另一个 Worker,不经过公网
    const authResponse = await env.AUTH_SERVICE.fetch('https://auth/verify', {
      method: 'POST',
      headers: request.headers,
    });
    
    if (!authResponse.ok) {
      return new Response('Unauthorized', { status: 401 });
    }
    
    return new Response('OK');
  },
} satisfies ExportedHandler<Env>;

步骤 5:Cron Triggers 定时任务

wrangler.toml:

[triggers]
crons = ["0 0 * * *"]  # 每天 0 点(UTC)
export default {
  async scheduled(event: ScheduledEvent, env: Env, ctx: ExecutionContext): Promise<void> {
    // 清理 30 天前的日志
    await env.DB.prepare('DELETE FROM logs WHERE created_at < ?')
      .bind(Date.now() - 30 * 24 * 3600 * 1000)
      .run();
    
    // 生成日报
    const report = await generateDailyReport(env);
    await env.REPORT_QUEUE.send(report);
  },
} satisfies ExportedHandler<Env>;

步骤 6:Pages Functions 与 Next.js 集成

Pages Functions 允许你在 Cloudflare Pages 上运行 Worker 代码。适合把 Next.js 的 API Routes 迁移到边缘:

// functions/api/hello.ts
export const onRequest: PagesFunction = async (context) => {
  return Response.json({ message: 'Hello from Pages Functions!' });
};

部署后,https://your-site.pages.dev/api/hello 就能访问。

讲清楚要点

  1. CI/CD 是工程化的基础:手动 wrangler deploy 适合学习,生产环境必须自动化。GitHub Actions + Wrangler Action 是官方推荐方案。
  2. 多环境隔离:staging 和 production 用不同的 wrangler.toml 配置(不同的数据库、KV、队列),通过 --env 参数切换。
  3. Service Bindings 是内部调用:不经过公网,延迟更低、更安全。适合微服务架构:auth-worker、api-worker、notification-worker 互相调用。
  4. Cron Triggers 有精度限制:最小粒度是 1 分钟,且可能有几秒延迟。不适合秒级定时任务。
  5. Logpush 是生产必备:console.log 只适合本地调试。生产环境用 Logpush 导出到专业日志平台(Datadog、Sentry、BigQuery),支持告警、分析、长期存储。

你可能会懵的地方

  • GitHub Actions 的 API Token 怎么生成? Dashboard → My Profile → API Tokens → Create Token → Edit Cloudflare Workers 模板。权限:Account.Workers Scripts:Edit、Account.Workers Routes:Edit。

  • Service Bindings 和直接 fetch 有什么区别? Service Bindings 走 Cloudflare 内部网络,不经过公网,延迟更低(<1ms vs 几十 ms),且不产生外部请求费用。直接 fetch 会走公网,有延迟和费用。

  • Cron Triggers 错过了执行时间怎么办? Cloudflare 会尽量补执行,但不保证。关键任务建议用 Queues + 定时检查,确保至少执行一次。

  • Pages Functions 和 Workers 怎么选? Pages Functions 适合「静态站点 + 少量 API」的场景(如博客评论、表单提交);Workers 适合「纯 API 服务」的场景。Pages Functions 可以访问 KV、D1、R2,但功能比 Workers 少。

  • 怎么监控 Worker 的性能? Dashboard → Workers & Pages → 你的 Worker → Metrics。可以看到请求数、错误率、CPU 时间、内存使用。也可以集成第三方 APM(如 Datadog、New Relic)。

错法对照

错法问题正解
生产环境手动 wrangler deploy容易出错,无审计记录用 GitHub Actions 自动部署
在代码里硬编码环境差异部署到错误环境用 wrangler.toml 的 [env.xxx] 隔离
用 console.log 做生产日志无法检索、无告警、有性能开销用 Logpush 导出到专业平台
用 fetch 调用同账号的其他 Worker走公网,延迟高、有费用用 Service Bindings 内部调用
Cron 表达式写错导致任务不执行任务静默失败用 crontab.guru 验证表达式;加日志确认执行

卡点急救

  1. GitHub Actions 部署失败 Authentication error:检查 API Token 权限是否足够;检查 Token 是否过期;检查 Account ID 是否正确。
  2. Service Bindings 返回 404:检查 service 和 environment 是否匹配目标 Worker 的部署;检查目标 Worker 是否已部署到对应环境。
  3. Cron Triggers 不执行:检查 crons 表达式格式;检查 Worker 是否已部署;用 Dashboard 的「触发器」面板查看下次执行时间。

面试常问

  • Workers 的 CI/CD 最佳实践? GitHub Actions + Wrangler Action 自动部署;多环境隔离(staging/production);部署前跑类型检查和单元测试;部署后自动跑冒烟测试。

  • Service Bindings 的底层原理? 基于 Cloudflare 的内部服务发现机制。两个 Worker 在同一个 Account 下,通过 Service Binding 建立直接的网络连接,不经过公网,延迟极低。

  • 怎么实现 Worker 的蓝绿部署? 用 wrangler deploy --env blue 和 wrangler deploy --env green 部署两个版本,通过 Cloudflare Load Balancer 或 Worker 路由切换流量。验证无误后下线旧版本。

自测三问

  1. 为什么生产环境要用 GitHub Actions 而不是手动部署?
  2. Service Bindings 和直接 fetch 调用其他 Worker 的核心区别是什么?
  3. 如果要在每天凌晨 3 点清理过期数据,你会怎么配置 Cron Trigger?

小结一句话

运维与集成是 Workers 工程化的最后一公里:CI/CD 自动化部署、Logpush 构建可观测体系、Service Bindings 实现微服务通信、Cron Triggers 处理定时任务,四者结合让边缘应用真正具备生产级能力。

延伸

  • Wrangler Action 官方文档
  • Logpush 官方文档
  • Service Bindings 官方文档
  • Cron Triggers 官方文档
  • 至此,Cloudflare Essentials 系列课程全部完成。建议结合实际项目,把本站 Next.js 前端的某个 API 迁移到 Workers,体验完整的边缘开发流程。
加载本节练习…
← 上一课安全与防护