无服务上云【Cloudflare + FaaS(lambda)】


ZrLog 从 3.2 适配了 AWS 的 Lambda 服务,基于 Lambda 搭建的博客程序会更加的简单,同时基本不用关心服务器相关的环境了,本文用于帮助大家在 Lambda 环境上运行 ZrLog

前置准备工作

  • 一张可以国际付款的信用卡(可能会产生费用,避免无法支付账单导致的服务被挂起)
  • 已经完成 AWS 帐号的注册
  • 已经完成 Cloudflare 帐号的注册

选择区域

通常优先选择离自己较进的区域,比如 亚太,或者是选择美国的区域(及离自己落地比较进区域),减少网络跳的次数

提示:选择非中国区域可单个帐号可以获得 100gb 的出口流量(覆盖 aws 所有产品)

开始

Cloudflare D1

创建数据库过程通常比较简单,只是我们还需要让这个 D1 数据库能够通过 webapi 的方式能让 ZrLog 程序正常的完成数据库的连接,及通过 worker 的方式去访问 D1 数据库

创建 worker

编辑 worker 的 index.js

https://github.com/zrlog-extensions/faas-deploy/blob/main/cloudflare/d1-database-worker/index.js

注:可以直接复制

Auth

为了方便 worker 的使用,配置环境变量可以避免将敏感的变量硬编码到代码中

  • DB_NAME
  • DB_USERNAME
  • DB_PASSWORD (推荐使用随机密码,且在 cf 的面板将这个值的类型设置为密钥)

上面三个变量都可以是 cf 允许的任何字符串,分别对于安装是需要的 数据库名称,及数据库帐号和密码

将 d1 数据库绑定到 worker 上

简单测试以下 https://xxx.xxxx.workers.dev/_region

输出 worker 运行的区域就表示, D1 数据完成搭建了

这里的 xxx 表示为 cf 的 worker 名称, xxxx 为用户名,xxx.xxxx.workers.dev 就是后面安装引导需要填写的数据库主机地址

Lambda

稳定 faas.zip 包 https://dl.zrlog.com/release/zrlog-Linux-amd64-faas.zip
预览 faas.zip 包 https://dl.zrlog.com/preview/zrlog-Linux-amd64-faas.zip

创建 Lambda 函数

使用界面创建 Lambda 的方法,推荐函数方法名称为为实际部署的域名关联,比如 demo.zrlog.com -> demo-zrlog-com

创建 S3 仓库

由于包文件超过了 50mb 了,无法通过 web 界面上传,需要创建一个 S3 的仓库,同时后续更新程序也需要这个仓库作为临时的文件存储服务,推荐仓库名为 demo-zrlog-com-update-bucket

CloudShell 快速创建

替换环境为刚才创建的
export LAMBDA_S3_REPO_NAME="zrlog-update-bucket"
export AWS_LAMBDA_FUNCTION_NAME="demo-zrlog-com"
上传安装包到 S3,并完成 Lambda 函数的初始化
UA="Mozilla/5.0 (X11; Ubuntu; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Safari/537.36"
wget --user-agent="${UA}" -O "/tmp/zrlog-Linux-amd64-latest.zip" "https://dl.zrlog.com/release/zrlog-Linux-amd64-faas.zip"
aws s3 cp /tmp/zrlog-Linux-amd64-latest.zip s3://${LAMBDA_S3_REPO_NAME}/zrlog-Linux-amd64-latest.zip
aws lambda update-function-code \
  --function-name ${AWS_LAMBDA_FUNCTION_NAME} \
  --s3-bucket ${LAMBDA_S3_REPO_NAME} \
  --s3-key zrlog-Linux-amd64-latest.zip

访问外网地址

在 Lambda 控制面板主页获取到 Function Url,并访问,完成数据的初始化,同时按照引导完成环境变量的配置

配置 Lambda 超时

Lambda 默认超时时间较短,若开启全站静态化需要将超时时间改长一点,推荐配置为最大的 900 秒,避免极端情况下无法完成静态页面的同步

扩展

到这里基本就完成了基础无服务博客了,如果还需要将公开内容,还需绑定域名,完成静态页面的托管,以加速访问速度
请参考这篇文章,无服务上云 Cloudflare Pages 篇

最后

  • 感谢 aws lambda 免费提供 400000GB/s 的免费内存
  • 感谢 cloudflare d1 免费提供 10gb 的 sqlite 数据库容量和 pages 服务