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的管理后台上传服务代码即可。
addEventListener("fetch", (event) => {
event.respondWith(new Response("hello cloudflare worker"));
});
可以看到Worker的核心代码是addEventListener("fetch")
,用于处理服务器收到的请求,这也是大多数Serverless服务都提供的功能,基于此我们就可以实现一个简单的Node.js服务器。
工程化
如果想要稍微正式点的对项目进行迭代,本地开发和Git管理必不可少,CloudFlare也提供了对应的工具协助进行本地开发,即Wrangler,这是一个命令行工具,可以模拟Workers的线上运行环境,在本地进行开发。
# 新建项目
npx wrangler init my-worker
通过Wrangler新建项目后,会自动生成wrangler.toml配置文件,里面指定了当前Worker的名称、入口文件等。
第一次使用wrangler命令需要登录
Cloudflare Worker支持Typescript文件,因此你可以直接编写index.ts进行开发。
使用Hono
手动写路由处理函数会比较复杂,推荐使用Hono进行开发,它提供了类似于Koa.js的API抽象,并且提供了多家Serverless服务提供商的支持,抹平了一些不同环境的API差异。
环境变量
有时我们需要将密钥等敏感数据保存到环境变量中防止泄漏,可以使用wrangler自带的命令将变量传输到CloudFlare控制台中:
wrangler secret put CLIENT_ID
wrangler secret put CLIENT_SECRET
如果想在本地开发时使用测试用的环境变量,需要使用.dev.vars
文件
CLIENT_ID=xxx
CLIENT_SECRET=xxxxxxx
可以在代码中这样调用环境变量:
// 直接使用
const client_id = CLIENT_ID;
const client_secret = CLIENT_SECRET;
// 使用Hono
app.get('/', (ctx) => {
const { CLIENT_ID, CLIENT_SECRET } = ctx.env;
});
部署
开发完成后也可以使用wrangler一键部署
wrangler deploy
结合Github使用
有时会希望使用Github Actions来自动部署Workers,这当然也没问题。
要使用Github Actions部署项目,首先需要创建Actions配置文件
# .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_TOKEN
和CLOUDFLARE_ACCOUNT_ID
其中CLOUDFLARE_API_TOKEN
需要在Cloudflare控制台生成:新建API tokens
在生成token时,选择对应的模版即可(Workers & Pages),生成的token同样只能查看一次。
CLOUDFLARE_ACCOUNT_ID
则是你的Cloudflare账号ID,一般来说进入控制台首页后,网页链接末尾的一串数字就是账号ID,也可以在Workers & Pages首页的侧边栏找到
其他
部署完成后,通过控制台可以看到当前服务的运行情况,可以查看日志等,也可以重新调整Worker的访问链接。