skillhub/docs/09-deployment.md
2026-03-11 20:24:01 +08:00

3.7 KiB
Raw Blame History

Astron Skills 部署架构与运维

1 K8s 部署拓扑

                    ┌─────────────┐
                    │   Ingress   │
                    │  (Nginx)    │
                    └──────┬──────┘
                           │
              ┌────────────┴────────────┐
              │ /api/*                  │ /*
              ▼                         ▼
    ┌──────────────────┐    ┌──────────────────┐
    │  Spring Boot     │    │  Nginx / CDN     │
    │  replicas: 2+    │    │  静态资源          │
    └────────┬─────────┘    └──────────────────┘
             │
    ┌────────┴──────────────────────┐
    │            │                  │
    ▼            ▼                  ▼
┌────────┐  ┌────────┐    ┌──────────────┐
│ MySQL  │  │ Redis  │    │ S3 / MinIO   │
│ (主从)  │  │        │    │              │
└────────┘  └────────┘    └──────────────┘

2 服务配置

  • 无状态设计,所有状态存储在 MySQL / Redis / S3
  • 健康检查:/actuator/healthliveness + readiness 分离)
  • 优雅停机:spring.lifecycle.timeout-per-shutdown-phase=30s
  • JVM-XX:MaxRAMPercentage=75.0

3 环境 Profile

Profile 用途 特点
local 本地开发 本地 MySQL/MinIOMock OAuth见下方说明
dev 开发环境 共享基础设施GitHub OAuth 测试应用
staging 预发布 与生产同构
prod 生产 多 Pod完整基础设施

本地开发 Mock 登录

local profile 下提供两种开发登录方式:

  1. MockAuthFilter(默认):通过 X-Mock-User-Id Header 模拟登录,自动创建 Session无需真实 OAuth 流程
  2. GitHub OAuth 测试应用:配置 OAUTH2_GITHUB_CLIENT_ID / OAUTH2_GITHUB_CLIENT_SECRET 后可走真实 OAuth 流程GitHub 支持 http://localhost 回调)

MockAuthFilter 仅在 local profile 激活,通过 @Profile("local") 注解保证不会泄漏到其他环境。

4 配置管理

  • 敏感配置K8s Secret数据库/Redis/S3 凭证、OAuth2 Client ID/Secret
  • 非敏感配置K8s ConfigMap文件大小限制、Session TTL 等)

5 可观测性

维度 方案
日志 JSON 格式 stdout包含 traceId/requestId
指标 Actuator + Micrometer → Prometheus
链路追踪 一期 requestId 透传,后续接 Jaeger/Zipkin
告警 基于 Prometheus5xx 率、延迟 P99、Pod 重启)

requestId 透传Ingress 注入 → Spring Filter 读取放入 MDC → 日志自动携带 → 响应 Header 回传。

6 构建与发布

代码提交 → CI Pipeline
    ├── server: mvn package → JAR
    └── web: pnpm build → dist/
         │
         ▼
    Docker 多阶段构建
    ├── server → openjdk:21-jre-slim
    └── web → nginx:alpine
         │
         ▼
    推送镜像 → K8s 滚动更新

Makefile 顶层命令:make dev-server, make dev-web, make build, make docker, make generate-api

7 数据库迁移

Flyway 管理 schema 变更:

  • 脚本路径:server/astron-skills-app/src/main/resources/db/migration/
  • 命名:V{version}__{description}.sql
  • 多 Pod 安全Flyway 自带数据库锁