架构图
服务清单
| 服务 | 技术栈 | 部署平台 | 数据库 | 用途 |
|---|
| kira-be | Bun + Hono + AI SDK | Fly.io (sjc/fra) | Supabase | 后端 API |
| kira-web | Next.js 16 + React 19 | Fly.io (sjc/fra) | - | Web 前端 |
| kira-queue | Bun + PGMQ | Fly.io (sjc) | Supabase | 后台任务 |
| kira-cms | Payload CMS 3.x | Fly.io (sjc) | Neon | 内容管理 |
| kira-imgproxy | imgproxy | Fly.io (sjc) | - | 图片处理 |
| kira-infisical | Infisical | Fly.io (sjc) | Neon | 密钥管理 |
| kira-video-worker | Bun | Fly.io (sjc) | Supabase | 视频生成任务处理(via NATS) |
| kira-centrifugo | Centrifugo | Fly.io (sjc/fra) | - | WebSocket 实时消息 |
| kira-nats | NATS JetStream | Fly.io (sjc) | - | 消息队列 |
| kira-dragonfly | Dragonfly DB | Fly.io (sjc/fra) | - | Redis 缓存 |
数据库 & 存储
Supabase (PostgreSQL)
kira-be, kira-web, kira-queue 使用的主数据库,提供:
- PostgreSQL 数据库
- 实时订阅 (Realtime)
- 用户认证 (Auth)
- 对象存储 (Storage)
- PGMQ 消息队列
主要表:
threads - 对话容器
messages - 用户和 AI 消息
thread_version - 生成图片快照
user_profiles - 用户信息和订阅
feed - 公开分享的作品
user_liked_feeds - 用户点赞
Neon (PostgreSQL)
kira-cms, kira-infisical 使用的 Serverless PostgreSQL:
- CMS 内容数据
- Infisical 密钥存储
- 按需扩展
Dragonfly (Redis 缓存)
双区域部署 (sjc/fra) 的高性能缓存:
- signed_url 缓存
- 速率限制
- 临时数据
- 内部访问:
kira-dragonfly.internal:6379
LanceDB
向量数据库:
- 图片 embedding 存储
- 相似度搜索(防止重复发布)
AWS S3
CMS 媒体存储:
AI 服务
LLM 提供商
| 提供商 | 模型 | 用途 | 价格 ($/M tokens) |
|---|
| Novita | pa/grok-4-1-fast-reasoning | lite/nova/crazy 模式 | 0.20/0.50 |
| Novita | pa/grok-4-1-fast-reasoning | ultra 模式 | 0.20/0.50 |
图片生成
| 服务 | 模型/功能 | 用途 |
|---|
| BytePlus/Seedream | seedream | 图片生成、编辑、背景替换 |
| FAL.ai | Flux-Pro, Kontext | 高质量图片生成 |
| Illustrious | 自定义模型 | 插画风格 |
| OpenAI | gpt-image-1 | 图片编辑 |
| Google Gemini | Flash Image | 图片生成(备用) |
Replicate | 多模型 | 通用图片处理 (Legacy - 未使用,保留为历史依赖) |
图片处理工具
| 工具 | 功能 |
|---|
generateImageWithAI | AI 生图 |
imageEdit | 图片编辑 |
redux | 图片微调(Seedream) |
replaceBackgroundWithImage | 用图片替换背景(Seedream) |
replaceBackgroundWithPrompt | 用提示词替换背景(Seedream) |
upscale | 图片放大 |
removeBackground | 移除背景 |
inpaint | 局部重绘 |
expand | 图片扩展 |
图片处理
| 组件 | 用途 |
|---|
| Sharp | 图片缩放、格式转换、压缩 |
| imgproxy | 动态图片处理和 CDN 优化 |
| blurhash | 图片模糊占位符 |
监控 & 遥测
BetterStack
OpenTelemetry 集成,收集:
- Logs - 应用日志
- Traces - 请求追踪
- Metrics - 性能指标
覆盖服务:kira-be, kira-imgproxy
错误追踪 (Sentry 兼容)
使用 BetterStack 的 Sentry 兼容层:
- 异常捕获
- 性能监控
- 用户上下文关联
- 与日志/指标统一管理
覆盖服务:kira-be, kira-web
PostHog
产品分析:
覆盖服务:kira-be, kira-web, supabase functions
Stripe
- 订阅管理 (Basic/Pro/Max 计划)
- 一次性购买 (Booster)
- Webhook 集成
- 客户门户
Booster Pack (加油包)
加油包是一次性购买的额外积分,存储在 user_profiles.addon_credits 字段中,独立于订阅积分 (credit)。
| 档位 | 积分 | 购买模式 |
|---|
| Small | 5,000 | 一次性支付 (Stripe payment mode) |
| Medium | 10,000 | 一次性支付 |
| Large | 20,000 | 一次性支付 |
购买条件
- 仅订阅用户可购买:
plan 不能为 free 或空
- 未订阅用户调用会返回
403 Subscription required to purchase booster pack
积分使用
系统在检查积分余额时合并计算两个池:
// 计费检查
if (data.credit + data.addon_credits < creditsCost) {
return { eligible: false, reason: "insufficient_credits" };
}
扣费通过 PostgreSQL RPC deduct_credits 原子执行,自动从 credit 和 addon_credits 中扣除。
Webhook 处理
加油包购买通过 checkout.session.completed 事件处理(mode === "payment"),与订阅的 mode === "subscription" 区分:
Stripe checkout.session.completed (mode=payment)
→ 获取 line items → 匹配 price ID
→ 查找用户 → 累加 addon_credits
→ PostHog booster_purchase 事件
账号删除
账号删除采用 30 天延迟执行 机制,通过 PGMQ 队列实现定时触发,用户在倒计时期间可以随时取消。
API 端点
| 端点 | 方法 | 说明 |
|---|
/support/delete-account | POST | 发起删除请求,启动 30 天倒计时 |
/support/deletion-status | GET | 查询删除状态和预计删除时间 |
/support/cancel-delete-account | POST | 取消已排程的删除 |
/support/hash | GET | 获取 Front Chat 身份验证 hash |
删除流程
队列配置
| 队列名 | 延迟 | 说明 |
|---|
account_deletion | 30 天 (2,592,000 秒) | 实际删除触发 |
account_deletion_reminder | 27 天 (2,332,800 秒) | 删除前 3 天提醒邮件 |
删除内容
执行删除时,系统按以下顺序清理数据:
| 步骤 | 操作 | 说明 |
|---|
| 1 | 删除 Stripe Customer | 取消所有订阅和支付方式 |
| 2 | 删除 PostHog Person | GDPR 合规,delete_events=true |
| 3 | 删除 Auth User | supabase.auth.admin.deleteUser(),级联删除关联数据 |
| 4 | 删除消息图片/视频 | agent_message bucket 下 {userId}/ 所有文件 |
| 5 | 删除 Feed 图片 | agent_message bucket 下 feed/{userId}/ |
| 6 | 删除头像 | public_material bucket 下 avatars/{userId}/ |
Auth User 删除会通过 Supabase 级联机制自动删除 user_profiles、threads、messages、thread_version、feed、user_liked_feeds 等关联表数据。
Resend
其他服务
Serper API
Google 搜索功能,用于 Agent 的 googleSearch 工具。
Front Chat
客服聊天组件,集成在 kira-web。
Voyage AI
图片 embedding (multimodal) 生成,使用 voyage-multimodal-3.5,用于向量搜索。
Tinify
图片压缩 API。
环境变量汇总
数据库 & 存储
# Supabase (kira-be/web/queue)
SUPABASE_URL
SUPABASE_KEY
POSTGRES_URL
# Dragonfly (缓存)
REDIS_URL # redis://:password@kira-dragonfly.internal:6379
# LanceDB (向量)
LANCEDB_URI
LANCEDB_API_KEY
AI 提供商
# LLM
OPENAI_API_KEY
GOOGLE_GENERATIVE_AI_API_KEY
XAI_API_KEY
MISTRAL_API_KEY
# 图片生成
FAL_API_KEY
REPLICATE_API_TOKEN
ILLUSTRIOUS_API_KEY
BYTEPLUS_API_KEY
IDEOGRAM_API_KEY
RECRAFT_API_KEY
# 其他
SERPER_API_KEY
VOYAGE_API_KEY
消息队列 & 服务
# NATS
NATS_URL
NATS_AUTH_TOKEN
# CMS
CMS_URL
# Front Chat
FRONT_CHAT_SECRET
# BetterStack (日志/指标)
BETTERSTACK_HOST
BETTERSTACK_TOKEN
# BetterStack Sentry 兼容层 (错误追踪)
SENTRY_DSN # https://xxx@o.betterstack.com/xxx
# PostHog (分析)
POSTHOG_API_KEY
POSTHOG_PROJECT_ID
支付 & 邮件
STRIPE_SECRET_KEY
STRIPE_WEBHOOK_SECRET
RESEND_API_KEY
图片处理
IMGPROXY_URL
IMGPROXY_KEY
IMGPROXY_SALT
部署架构
所有服务部署在 Fly.io,核心服务双区域部署 (sjc/fra)。
┌─────────────────────────────────────────────────────────────┐
│ Fly.io (sjc + fra) │
├─────────────────────────────────────────────────────────────┤
│ ┌──────────┐ ┌──────────┐ ┌───────────────┐ │
│ │ kira-be │ │ kira-web │ │kira-dragonfly │ │
│ │ sjc+fra │ │ sjc+fra │ │ sjc+fra │ │
│ └──────────┘ └──────────┘ └───────────────┘ │
│ │
│ ┌──────────┐ ┌──────────┐ ┌────────────────────┐ │
│ │ kira-cms │ │kira-queue│ │ kira-infisical │ │
│ │ sjc │ │ sjc │ │ infisical.kira.art │ │
│ └──────────┘ └──────────┘ └────────────────────┘ │
│ │
│ ┌────────────────┐ │
│ │ kira-imgproxy │ │
│ │ img.kira.art │ │
│ └────────────────┘ │
└─────────────────────────────────────────────────────────────┘
测试环境
kira-be 和 kira-web 有独立的测试环境,用于验证 develop 分支的功能。
测试环境服务
| 服务 | Fly App | 域名 |
|---|
| 后端 | kira-be-dev | kira-be-dev.fly.dev |
| 前端 | kira-web-dev | kira-web-dev.fly.dev |
部署流程
分支策略
| 分支 | 部署目标 | 说明 |
|---|
develop | kira-be-dev, kira-web-dev | 开发测试 |
main | kira-be, kira-web | 生产环境 |
共享基础设施
测试环境与生产环境共享以下服务:
- Dragonfly:
kira-dragonfly.internal:6379
- imgproxy:
img.kira.art
- Infisical:
infisical.kira.art
测试环境使用独立的 Supabase 项目,与生产数据隔离。