新增三种部署方式(原有 docker-compose 不受影响): 1. Docker embed 单容器 (docker-compose.embed.yml): - go:embed 前端嵌入后端二进制 - 不需要 nginx 容器,3容器→2容器 - 镜像仅 54.8MB (vs 原来 1.16GB) - 用法: make docker-embed 2. 二进制部署 (deploy/binary/): - make build-binary 生成单二进制 - install.sh 自动创建 systemd 服务 - 适合无 Docker 环境 - 用法: scp aiops + install.sh, bash install.sh install 3. Kubernetes 部署 (deploy/k8s/): - devops 命名空间全套 yaml - MySQL StatefulSet + Redis StatefulSet + Backend Deployment - ConfigMap + Secret + Ingress - 用法: kubectl apply -f deploy/k8s/ 核心改动: - backend/cmd/embed.go: go:embed 前端 + SPA fallback 路由 - backend/Dockerfile.embed: 四阶段构建 (前端→后端embed→agent→runtime) - Makefile: build-binary + docker-embed 目标 - deploy/README.md: 四种部署方式对比文档
79 lines
2.6 KiB
YAML
79 lines
2.6 KiB
YAML
# configmap.yaml — 后端配置 (ConfigMap) + 敏感信息 (Secret)
|
||
# ----------------------------------------------------------------------------
|
||
# ConfigMap aiops-config:
|
||
# - 内含 config.yaml,DB/Redis 连接信息以环境变量占位(${VAR})。
|
||
# - 后端 Deployment 将其挂载到 /app/configs/config.yaml(viper 搜索路径 ./configs)。
|
||
#
|
||
# Secret aiops-secret:
|
||
# - 存放 MySQL 密码与 JWT 密钥(明文敏感信息不放 ConfigMap)。
|
||
# - 由 backend Deployment / mysql StatefulSet 以环境变量注入。
|
||
#
|
||
# 部署: kubectl apply -f configmap.yaml
|
||
# ----------------------------------------------------------------------------
|
||
---
|
||
apiVersion: v1
|
||
kind: ConfigMap
|
||
metadata:
|
||
name: aiops-config
|
||
namespace: devops
|
||
labels:
|
||
app.kubernetes.io/name: aiops
|
||
app.kubernetes.io/component: backend
|
||
data:
|
||
config.yaml: |
|
||
# AIOps 后端配置
|
||
# DB/Redis 连接通过环境变量注入(见 backend Deployment 的 env 段)。
|
||
# 敏感字段 (password / jwt) 由 Secret aiops-secret 提供。
|
||
# 注意: viper.AutomaticEnv 默认不替换嵌套键中的点(.),如需 DATABASE_HOST ->
|
||
# database.host 生效,请在 backend 启动时设置:
|
||
# viper.SetEnvKeyReplacer(strings.NewReplacer(".", "_"))
|
||
mode: release
|
||
port: "8080"
|
||
log_level: info
|
||
|
||
# ---- 数据库 (MySQL) ----
|
||
database:
|
||
driver: mysql
|
||
host: "${DB_HOST}" # -> mysql (k8s Service)
|
||
port: 3306
|
||
user: "${DB_USER}" # -> aiops
|
||
password: "${DB_PASSWORD}" # <- Secret aiops-secret (database-password)
|
||
dbname: "${DB_NAME}" # -> aiops
|
||
charset: utf8mb4
|
||
max_conn: 100
|
||
max_idle: 10
|
||
|
||
# ---- Redis ----
|
||
redis:
|
||
driver: redis # redka(内嵌) / redis(外部)
|
||
host: "${REDIS_HOST}" # -> redis (k8s Service)
|
||
port: 6379
|
||
password: "${REDIS_PASSWORD}" # 本环境 Redis 无密码,留空
|
||
db: 0
|
||
|
||
# ---- JWT ----
|
||
jwt:
|
||
secret: "${JWT_SECRET}" # <- Secret aiops-secret (jwt-secret)
|
||
expire_hour: 24
|
||
|
||
# ---- WebSocket ----
|
||
websocket:
|
||
read_buffer_size: 1024
|
||
write_buffer_size: 1024
|
||
---
|
||
apiVersion: v1
|
||
kind: Secret
|
||
metadata:
|
||
name: aiops-secret
|
||
namespace: devops
|
||
labels:
|
||
app.kubernetes.io/name: aiops
|
||
type: Opaque
|
||
stringData:
|
||
# MySQL 业务账号密码
|
||
database-password: "aiops_pass_2026"
|
||
# MySQL root 密码(StatefulSet 初始化用)
|
||
mysql-root-password: "aiops_root_2026"
|
||
# JWT 签名密钥(生产请替换为强随机值)
|
||
jwt-secret: "aiops-jwt-secret-change-in-production-2026"
|