使用 Cloudflare Workers 创建 Hono 服务,结合 Drizzle ORM 配置 D1 数据库,Pages 部署静态页面

Cloudflare 提供了较多的免费资源,结合 Hono 、Drizzle ORM 框架试用了一下它的 Workers、Pages、D1 服务。

创建项目

https://hono.dev/docs/getting-started/cloudflare-workers

根据文档创建项目。然后将 wrangler.toml 配置成对应的 workers 名称即可。

登录及部署

输入命令登录,会弹出窗口到浏览器登录。

npx wrangler login

登录后执行部署命令即可。

npm run deploy

配置域名

需要将域名放到 cloudflare 管理才可以为 workers 绑定自定义域名。

在 cloudflare 中绑定域名,并在域名注册商将 DNS 服务器换成 cloudflare 提供的服务器地址。

到阿里云的域名列表,点右侧管理,找到 DNS 管理 - DNS 修改,修改成以上地址即可。

等待域名绑定成功后,就可以到 workers 设置中绑定自定义的二级域名了。

另外还需要到 SSL/TLS 设置里,把加密模式从“灵活” 改为或 “完全”模式,否则可能会触发重定向。

通过 drizzle 设置 D1 数据库

https://orm.drizzle.team/docs/get-started/d1-new

https://developers.cloudflare.com/d1/

创建一个 D1 数据库,根据 drizzle 文档中的配置。

在 wrangler.toml 中配置:

[[ d1_databases ]]
binding = "DB"
database_name = "YOUR DB NAME"
database_id = "YOUR DB ID"
migrations_dir = "drizzle"

使用 wrangler 应用数据库迁移。

数据库迁移:

  • 通过 drizzle-kit generate 生成迁移文件。
  • 本地应用迁移 wrangler d1 migrations apply test-db-1
  • 远程应用迁移 wrangler d1 migrations apply test-db-1 --remote
  • 本地文件可在 .wrangler/state/v3/d1 目录下找到,可使用 DataGrip 等工具进行连接

数据库生效后,就可以连接了。结合 wrangler.toml 中的 binding 字段,可绑定在 hono 的 env 变量中。

https://developers.cloudflare.com/d1/reference/migrations/

type Bindings = {
  DB: D1Database;
};

const app = new Hono<{ Bindings: Bindings }>();

app.get('/', async (c) => {
  const db = drizzle(c.env.DB);

  const result = await db.select().from(userTable).all();

  return c.json({ data: result });
})

静态网站部署

创建 Pages 进行部署静态网站。

只需要关联 Github 仓库,填写构建命令、输出目录,即可自动构建,非常方便。

对于 monorepo ,也可以很容易地配置子项目的打包和输出。

  • 打包命令: pnpm --filter client run build
  • 输出目录: apps/client/dist

其他资源

Cloudflare Workers 可结合 Backblaze B2 私密桶实现图片存储服务,有 10gb 免费空间。