首页
/ Unkey项目Docker Compose部署架构深度解析

Unkey项目Docker Compose部署架构深度解析

2025-07-08 04:56:05作者:史锋燃Gardner

项目概述

Unkey是一个分布式API密钥管理系统,通过Docker Compose提供了完整的本地开发和生产部署方案。本文将深入分析其docker-compose.yaml文件的设计架构,帮助开发者理解各组件的作用和交互关系。

核心服务架构

Unkey采用微服务架构设计,主要包含以下核心组件:

  1. 数据存储层:MySQL、Redis、ClickHouse
  2. 应用服务层:API服务、控制服务、中转服务
  3. 辅助服务:监控、对象存储、迁移工具

详细组件分析

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存储和查询监控数据
  • 提供完整的可观测性解决方案

部署特点

  1. 服务发现:通过Docker网络自动发现依赖服务
  2. 配置管理:环境变量集中配置各服务
  3. 资源隔离:每个服务独立容器运行
  4. 持久化存储:关键数据卷确保数据持久性
  5. 健康检查:依赖关系控制启动顺序

最佳实践建议

  1. 生产环境调整

    • 增加资源限制(CPU/内存)
    • 配置更安全的密码
    • 启用TLS加密通信
  2. 扩展性考虑

    • API服务可轻松增加副本数
    • 数据库可替换为云托管服务
  3. 监控优化

    • 配置告警规则
    • 集成Grafana可视化

总结

Unkey的Docker Compose架构展示了现代分布式系统的典型设计:

  • 清晰的职责分离
  • 弹性的扩展能力
  • 完善的可观测性
  • 灵活的开发/生产一致性

通过理解这个部署架构,开发者可以更好地维护和扩展Unkey系统,或借鉴其设计理念构建类似的服务。