Skip to content
Go back

使用 AWS Lambda 构建 Twikoo 静态网站评论系统并在 Icarus 主题中使用

| 0 Views Edit page

前言

看到篇用 AWS 部署 Twikoo 评论和说说系统帖子,恰巧博客的评论功能一直没有开启,而且最近在准备 AWS 相关的考试,正好动手实践下 AWS Lambda
暂时不开启图片评论功能。


方案概述

可行性

  • 数据库使用官方推荐的 MongoDB Atlas,数据容量在 500 MiB 内是免费的。
  • 后端使用 AWS Lambda,每月提供 100 万个免费请求和长达 320 万秒的计算时间。

流程

  1. 设置 Mongodb Atlas 数据库
  2. Twikoo 的 API 服务部署到 AWS Lambda
  3. Icarus 主题中启用 Twikoo 评论功能
  4. 测试评论功能

操作步骤

一、设置 Mongodb Atlas 数据库

官方文档:MongoDB Atlas

创建免费的集群,推荐地区选择 AWS 的 us-west-2,因为后面部署 AWS Lambda 也是在这个地区:
M0
设置用户名和密码:
认证信息
之后创建用户,后面是选择用什么方式连接数据库,一路下一步即可。
之后允许所有 IP 连接到该数据库:
0.0.0.0/0
之后回到数据库处,点击 Connect,选择 Connect your application,之后复制连接字符串:

mongodb+srv://mongodb:<db_password>@twikoo.<place>.mongodb.net/?retryWrites=true&w=majority&appName=Twikoo

二、将 Twikoo 的 API 服务部署到 AWS Lambda

官方文档:AWS Lambda 部署

因为没有什么经验,就用官方推荐的 Terraform CLI 方式进行部署。
关于 Terraform 详细的安装和 AWS 云服务提供商配置过程,可以参考我的另一片文章:Mac 下安装 Terraform 基础结构即代码工具,并添加 AWS 云服务提供商

当你确保你的环境可用后,下载部署 Twikoo 用的文件:twikoo/src/server/aws-lambda

git clone https://github.com/twikoojs/twikoo.git
cd twikoo/src/server/aws-lambda

然后进入到 terraform 目录,修改存放变量的 variables.tf 文件:

# === AWS Provider 相关 ===
variable "region" {
  description = "AWS region to deploy the function in."
  # AWS 区域,我这里也是 us-west-2 因此不用修改
  default     = "us-west-2"
}

# AWS 访问密钥
variable "access_key" {
  default = "AKIA5J2Z5J2Z5J2Z5J2Z"
}

# AWS 秘密密钥
variable "secret_key" {
  default = "cpt_jqc7TUG6mtg1avjzce*quq4BXQ8gec"
}

# === MongoDB 相关 ===
variable "mongodb_uri" {
  description = "MongoDB connection URI. The value will be passed to the Lambda function as environment variable MONGODB_URI."
  sensitive   = true
  # 之前复制的 MongoDB 连接字符串
  default     = "mongodb+srv://mongodb:<db_password>@twikoo.<place>.mongodb.net/?retryWrites=true&w=majority&appName=Twikoo"
}

然后修改下 main.tf 文件中的 provider 部分:

provider "aws" {
  region = var.region
  # 新增下面两行
  access_key = var.access_key
  secret_key = var.secret_key
}

之后就可以部署了:

terraform init
terraform apply

稍等片刻就部署完成了:
部署完成
在 AWS Lambda 控制台也可以看见新部署的代码

访问 API Gateway 的 URL,可以看到 Twikoo 的 API 服务已经部署成功了:

{"code":100,"message":"Twikoo 云函数运行正常,请参考 https://twikoo.js.org/frontend.html 完成前端的配置","version":"1.6.39"}

三、Icarus 主题中启用 Twikoo 评论功能

官方文档:Twikoo

修改下 _config.icarus.yml 文件:

# 评论系统
comment:
  type: twikoo
  # Twikoo 的 API 服务地址
  env_id: https://xxxxxxxxxxxxxxxxxxxxxxxxxxx.lambda-url.us-west-2.on.aws/ 
  lang: zh-CN

再次部署后,访问页面就能看到评论框了:
评论框

四、测试评论功能

输入下评论:
输入
评论成功

单条评论对于 MongoDB Atlas 数据库 500 MiB 免费容量的占用几乎可以忽略不计。
而消耗 AWS Lambda 1 次请求、2.1 秒左右的计算时间,对于免费的 100 万次请求和 320 万秒的计算时间来说也是微不足道的:
AWS Lambda 消耗

由于没有设置图床,因此无法上传图片:
未配置图床
开启的话大概会被灰产刷吧 🤦 就不开了。



Edit page