CloudFlare Workers快速使用攻略

CloudFlare Workers是众多Serverless服务中的一种,同样的还有Netlify,Vercel等大厂提供的各式后端服务,这些后端服务的特点是弹性扩容,无数据库,但是最重要的是免费

这些Serverless服务都能运行Node.js代码,并作为独立的接口运行,好消息是免费的额度基本够用,坏消息是因为并非完整的服务器环境,因此无法部署其他的服务,例如数据库等,由于Stateless特性,也无法用于保存数据,实现聊天系统等依赖上下文的功能,但是作为分发服务却十分好用,尤其是例如前端SSR项目,纯粹的API转发等,能够快速部署上线。

以CloudFlare Workers为例,它提供了许多免费Workers实例额度供个人开发者使用,并且相比起其他家的服务,它的API可访问性更高,在内地也能正常访问,因此更适合面向国内用户使用。

起步

要使用CloudFlare Workers首先需要注册一个CloudFlare账号,注册是完全免费的。

在CloudFlare管理后台,可以找到Workers & Pages栏目,在这里可以管理自己的所有Workers。

如果只是简单的Node.js项目,直接通过CloudFlare的管理后台上传服务代码即可。

javascript
addEventListener("fetch", (event) => {
  event.respondWith(new Response("hello cloudflare worker"));
});

可以看到Worker的核心代码是addEventListener("fetch") ,用于处理服务器收到的请求,这也是大多数Serverless服务都提供的功能,基于此我们就可以实现一个简单的Node.js服务器。

工程化

如果想要稍微正式点的对项目进行迭代,本地开发和Git管理必不可少,CloudFlare也提供了对应的工具协助进行本地开发,即Wrangler,这是一个命令行工具,可以模拟Workers的线上运行环境,在本地进行开发。

bash
# 新建项目
npx wrangler init my-worker

通过Wrangler新建项目后,会自动生成wrangler.toml配置文件,里面指定了当前Worker的名称、入口文件等。

第一次使用wrangler命令需要登录

Cloudflare Worker支持Typescript文件,因此你可以直接编写index.ts进行开发。

使用Hono

手动写路由处理函数会比较复杂,推荐使用Hono进行开发,它提供了类似于Koa.js的API抽象,并且提供了多家Serverless服务提供商的支持,抹平了一些不同环境的API差异。

环境变量

有时我们需要将密钥等敏感数据保存到环境变量中防止泄漏,可以使用wrangler自带的命令将变量传输到CloudFlare控制台中:

bash
wrangler secret put CLIENT_ID
wrangler secret put CLIENT_SECRET

如果想在本地开发时使用测试用的环境变量,需要使用.dev.vars文件

plaintext
CLIENT_ID=xxx
CLIENT_SECRET=xxxxxxx

可以在代码中这样调用环境变量:

typescript
// 直接使用
const client_id = CLIENT_ID;
const client_secret = CLIENT_SECRET;

// 使用Hono
app.get('/', (ctx) => {
	const { CLIENT_ID, CLIENT_SECRET } = ctx.env;
});

部署

开发完成后也可以使用wrangler一键部署

json
wrangler deploy

结合Github使用

有时会希望使用Github Actions来自动部署Workers,这当然也没问题。

要使用Github Actions部署项目,首先需要创建Actions配置文件

yaml
# .github/actions/deploy.yaml
name: Deploy Worker
on:
  push:
    branches:
      - main
jobs:
  deploy:
    runs-on: ubuntu-latest
    timeout-minutes: 60
    steps:
      - uses: actions/checkout@v4
      - name: Build & Deploy Worker
        uses: cloudflare/wrangler-action@v3
        with:
          apiToken: ${{ secrets.CLOUDFLARE_API_TOKEN }}
          accountId: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }}

然后需要在Github中配置对应的Action Secrets:CLOUDFLARE_API_TOKENCLOUDFLARE_ACCOUNT_ID

其中CLOUDFLARE_API_TOKEN 需要在Cloudflare控制台生成:新建API tokens

在生成token时,选择对应的模版即可(Workers & Pages),生成的token同样只能查看一次。

CLOUDFLARE_ACCOUNT_ID 则是你的Cloudflare账号ID,一般来说进入控制台首页后,网页链接末尾的一串数字就是账号ID,也可以在Workers & Pages首页的侧边栏找到

其他

部署完成后,通过控制台可以看到当前服务的运行情况,可以查看日志等,也可以重新调整Worker的访问链接。