Unkey项目Docker Compose部署架构深度解析
2025-07-08 04:56:05作者:史锋燃Gardner
项目概述
Unkey是一个分布式API密钥管理系统,通过Docker Compose提供了完整的本地开发和生产部署方案。本文将深入分析其docker-compose.yaml文件的设计架构,帮助开发者理解各组件的作用和交互关系。
核心服务架构
Unkey采用微服务架构设计,主要包含以下核心组件:
- 数据存储层:MySQL、Redis、ClickHouse
- 应用服务层:API服务、控制服务、中转服务
- 辅助服务:监控、对象存储、迁移工具
详细组件分析
1. 数据库服务
MySQL主数据库
mysql:
container_name: mysql
build:
context: ..
dockerfile: deployment/Dockerfile.mysql
environment:
MYSQL_ROOT_PASSWORD: root
MYSQL_DATABASE: unkey
MYSQL_USER: unkey
MYSQL_PASSWORD: password
command: ["--max_connections=1000"]
- 使用自定义Dockerfile构建MySQL镜像
- 配置了高连接数(1000)以适应API场景
- 持久化存储确保数据安全
PlanetScale模拟器
planetscale:
container_name: planetscale
build:
context: https://github.com/mattrobenolt/ps-http-sim.git
target: local
command:
[
"-listen-port=3900",
"-mysql-dbname=unkey",
"-mysql-addr=mysql",
]
- 模拟PlanetScale数据库的HTTP接口
- 作为MySQL的前置中转层
- 提供数据库连接池和查询优化功能
2. 缓存与数据分析
Redis缓存
redis:
image: redis:latest
ports:
- 6379:6379
- 标准Redis镜像
- 用于高频访问数据的缓存
- 支持API的快速响应
ClickHouse分析数据库
clickhouse:
image: bitnami/clickhouse:latest
environment:
CLICKHOUSE_ADMIN_USER: default
CLICKHOUSE_ADMIN_PASSWORD: password
- 用于存储和分析大量API访问日志
- 高性能列式存储数据库
- 支持复杂分析查询
3. 核心应用服务
API服务(v2)
apiv2:
command: ["run", "api"]
build:
context: ../go
dockerfile: ./Dockerfile
environment:
UNKEY_HTTP_PORT: 7070
UNKEY_REDIS_URL: "redis://redis:6379"
UNKEY_DATABASE_PRIMARY: "unkey:password@tcp(mysql:3306)/unkey?parseTime=true"
- 基于Go构建的高性能API服务
- 支持水平扩展(默认3个副本)
- 集成OpenTelemetry监控
- 连接Redis和MySQL
控制服务
ctrl:
command: ["run", "ctrl"]
environment:
UNKEY_HTTP_PORT: 7091
UNKEY_DATABASE_PRIMARY: "unkey:password@tcp(mysql:3306)/unkey?parseTime=true"
- 提供管理接口
- 独立于API服务的控制平面
- 使用专用认证令牌
4. 辅助服务
中转服务
agent:
command: ["/usr/local/bin/unkey", "agent", "--config", "config.docker.json"]
environment:
VAULT_S3_URL: "http://s3:3902"
CLICKHOUSE_URL: "clickhouse://default:password@clickhouse:9000"
- 处理密钥分发和验证
- 集成S3存储用于密钥保管
- 连接ClickHouse记录访问日志
监控系统
otel:
image: grafana/otel-lgtm:latest
prometheus:
image: prom/prometheus:latest
- OpenTelemetry收集应用指标
- Prometheus存储和查询监控数据
- 提供完整的可观测性解决方案
部署特点
- 服务发现:通过Docker网络自动发现依赖服务
- 配置管理:环境变量集中配置各服务
- 资源隔离:每个服务独立容器运行
- 持久化存储:关键数据卷确保数据持久性
- 健康检查:依赖关系控制启动顺序
最佳实践建议
-
生产环境调整:
- 增加资源限制(CPU/内存)
- 配置更安全的密码
- 启用TLS加密通信
-
扩展性考虑:
- API服务可轻松增加副本数
- 数据库可替换为云托管服务
-
监控优化:
- 配置告警规则
- 集成Grafana可视化
总结
Unkey的Docker Compose架构展示了现代分布式系统的典型设计:
- 清晰的职责分离
- 弹性的扩展能力
- 完善的可观测性
- 灵活的开发/生产一致性
通过理解这个部署架构,开发者可以更好地维护和扩展Unkey系统,或借鉴其设计理念构建类似的服务。