技术栈概览¶
KanjiIQ以自托管、开源优先的理念构建。每个组件都运行在我们控制的基础设施上,无供应商锁定。
技术摘要¶
| 层级 | 技术 | 用途 |
|---|---|---|
| 前端 | Flutter Web | 跨平台UI框架 |
| 后端 | Dart Frog | 轻量级REST API服务器 |
| 数据库 | PostgreSQL 15 | 主数据存储,支持JSONB |
| 翻译 | OpenAI API | 动态内容翻译 |
| 编排 | k3s (Kubernetes) | 容器编排 |
| Ingress | Traefik | 反向代理、TLS终止、速率限制 |
| TLS | cert-manager + Let's Encrypt | 自动化SSL证书管理 |
| CI/CD | Forgejo Actions | 构建、推送和部署自动化 |
| 容器仓库 | Forgejo Container Registry | Docker镜像存储 |
| 版本控制 | Forgejo(Gitea分支) | 自托管Git平台 |
| 托管 | Hetzner专用服务器 | 基础设施提供商 |
| 管理后台 | Flutter Web | 区域/分析管理后台 |
为什么选择这些技术?¶
全栈Dart¶
最具特色的架构选择是前后端都使用Dart:
- Flutter(Dart)用于前端
- Dart Frog(Dart)用于后端
这带来了:
- 客户端和服务器之间共享模型定义
- 整个团队只需掌握一种语言
- 一致的工具链(Dart分析器、格式化器、测试框架)
- 潜在的共享业务逻辑包
自托管技术栈¶
KanjiIQ刻意避免托管云服务,转而采用自托管替代方案:
| 托管服务 | KanjiIQ使用 | 优势 |
|---|---|---|
| GitHub/GitLab | Forgejo | 完全控制,无按用户收费 |
| Docker Hub | Forgejo Container Registry | 与源码同一平台 |
| GitHub Actions | Forgejo Actions | 相同的YAML语法,自托管运行器 |
| AWS RDS | 在k8s上运行PostgreSQL | 无按小时计费的数据库费用 |
| AWS ALB | Traefik | 内置于k3s,免费 |
| AWS ACM | cert-manager + Let's Encrypt | 免费TLS证书 |
成本效率¶
整个生产环境运行在一台Hetzner专用服务器上,月度成本可预测,显著低于同等的云托管服务。详见基础设施了解详情。
架构原则¶
- 容器优先:每个组件都通过多阶段Docker构建容器化
- 基础设施即代码:所有Kubernetes清单都纳入版本控制
- 非root执行:所有容器以UID 1000运行,确保安全
- 健康检查:每个容器都有存活和就绪探针
- 离线能力:前端通过本地SQLite缓存实现无网络工作
- 隐私意识:符合GDPR/CCPA的分析,支持自动匿名化