前言
看到篇用 AWS 部署 Twikoo 评论和说说系统帖子,恰巧博客的评论功能一直没有开启,而且最近在准备 AWS 相关的考试,正好动手实践下 AWS Lambda。
暂时不开启图片评论功能。
方案概述
可行性
- 数据库使用官方推荐的
MongoDB Atlas,数据容量在 500 MiB 内是免费的。 - 后端使用
AWS Lambda,每月提供 100 万个免费请求和长达 320 万秒的计算时间。
流程
- 设置
Mongodb Atlas数据库 - 将
Twikoo的 API 服务部署到AWS Lambda - Icarus 主题中启用
Twikoo评论功能 - 测试评论功能
操作步骤
一、设置 Mongodb Atlas 数据库
官方文档:MongoDB Atlas
创建免费的集群,推荐地区选择 AWS 的 us-west-2,因为后面部署 AWS Lambda 也是在这个地区:

设置用户名和密码:

之后创建用户,后面是选择用什么方式连接数据库,一路下一步即可。
之后允许所有 IP 连接到该数据库:

之后回到数据库处,点击 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
稍等片刻就部署完成了:


访问 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 万秒的计算时间来说也是微不足道的:

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