Skip to main content

概述

Kira CMS (Kira OP) 是 Kira 的运营后台系统,基于 Payload CMS 构建,用于管理用户数据和执行运营操作。

技术栈

类别技术说明
CMS 框架Payload CMS 3.xHeadless CMS
运行时BunJavaScript 运行时
前端框架Next.js 15React 全栈框架
数据库PostgreSQL通过 Neon 托管
存储S3媒体文件存储
邮件Resend邮件发送服务
部署Fly.io容器化部署

项目结构

kira-cms
src
payload.config.ts
payload-types.ts
app
(payload)
admin
api
cached
home-cards
route.ts
announcements
route.ts
translate
route.ts
lark-notify
route.ts
layout.tsx
(frontend)
collections
Users.ts
Media.ts
DeletionLogs.ts
operation
Announcements.ts
HomeCards.ts
lib
lark.ts
components
NavLinks.tsx
Logo.tsx
Icon.tsx
views
DeleteAccount.tsx
DeleteAccountForm.tsx
目录说明
payload.config.tsPayload CMS 主配置
collections/数据集合定义 (Collections)
operation/运营数据定义 (Globals — 全局单例,区别于 Collections 的多记录集合)
lib/工具库 (lark.ts — Lark webhook 通知)
components/自定义 Admin UI 组件
components/views/自定义视图页面
app/(payload)/Payload Admin 路由
app/(frontend)/前端公开页面

数据集合

Users

管理员用户账户,用于登录 CMS 后台。
{
  slug: 'users',
  auth: true,
  fields: []
}

Media

媒体文件管理,存储到 S3。

DeletionLogs

用户删除操作日志记录。
{
  slug: 'deletion-logs',
  fields: [
    { name: 'userId', type: 'text' },
    { name: 'email', type: 'text' },
    { name: 'nickname', type: 'text' },
    { name: 'plan', type: 'text' },
    { name: 'credit', type: 'number' },
    { name: 'deletedAt', type: 'date' },
    { name: 'deletedBy', type: 'relationship', relationTo: 'users' }
  ]
}

架构图

功能模块

运营功能 (Operation)

功能说明
Home Cards首页功能卡片管理,配置 AI 功能入口
Announcements首页公告横幅管理
Delete Account用户账户删除

通用能力

自动翻译:所有多语言内容支持一键从英文翻译为 11 种语言(中文简繁体、日韩德法西意俄葡马来语) Arcade 教程引导:Home Cards 支持配置 Arcade 教程链接,用户可通过 ?guide={cardId} 访问交互式教程

部署

  • 运行在 Fly.io
  • 使用 Dockerfile 构建
  • 环境变量:
    • DATABASE_URL - PostgreSQL 连接
    • PAYLOAD_SECRET - Payload 密钥
    • S3_* - S3 存储配置
    • RESEND_API_KEY - 邮件服务
    • RESEND_FROM_EMAIL - 邮件发送地址
    • NEXT_PUBLIC_API_URL - Kira Backend URL
    • REDIS_URL - Redis KV 缓存 (kira-dragonfly)
    • OPENAI_API_KEY - 翻译 API (gpt-5.2)

Redis KV 缓存

使用 @payloadcms/kv-redis 实现 Redis KV 缓存,连接 kira-dragonfly 实例。

缓存策略

策略说明
Write-through数据变更时通过 Payload afterChange hooks 自动写入 Redis 缓存
Read-through/api/cached/* 路由优先从 Redis 读取,缓存未命中时查询数据库并回填缓存

缓存路由

路由说明
/api/cached/home-cards首页功能卡片数据
/api/cached/announcements首页公告数据

工作流程

相关文档