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 免费空间。