feat: 三种部署方式 — embed单容器 + 二进制部署 + K8s
新增三种部署方式(原有 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: 四种部署方式对比文档
This commit is contained in:
1 parent
24f955832e
commit
4631b02f13
15 files changed
+1218
-3
No files matched your search
@@ -0,0 +1,116 @@
|
||||
# backend.yaml — AIOps 后端 (Deployment + Service)
|
||||
# ----------------------------------------------------------------------------
|
||||
# - 镜像 aiops-backend:latest(前端通过 go:embed 内嵌进同一二进制)
|
||||
# - 暴露两个端口:
|
||||
# 8080 = API + WebSocket
|
||||
# 80 = go:embed 前端 (SPA 静态资源)
|
||||
# - 配置: ConfigMap aiops-config 挂载到 /app/configs/config.yaml
|
||||
# - 密码: Secret aiops-secret 以环境变量注入(DB_PASSWORD / JWT_SECRET)
|
||||
# - Service: ClusterIP,对外暴露 80 与 8080
|
||||
#
|
||||
# 部署: kubectl apply -f backend.yaml
|
||||
# ----------------------------------------------------------------------------
|
||||
---
|
||||
apiVersion: apps/v1
|
||||
kind: Deployment
|
||||
metadata:
|
||||
name: aiops-backend
|
||||
namespace: devops
|
||||
labels:
|
||||
app.kubernetes.io/name: aiops
|
||||
app.kubernetes.io/component: backend
|
||||
spec:
|
||||
replicas: 1
|
||||
strategy:
|
||||
type: RollingUpdate
|
||||
rollingUpdate:
|
||||
maxSurge: 1
|
||||
maxUnavailable: 0
|
||||
selector:
|
||||
matchLabels:
|
||||
app.kubernetes.io/name: aiops
|
||||
app.kubernetes.io/component: backend
|
||||
template:
|
||||
metadata:
|
||||
labels:
|
||||
app.kubernetes.io/name: aiops
|
||||
app.kubernetes.io/component: backend
|
||||
spec:
|
||||
containers:
|
||||
- name: aiops-backend
|
||||
image: aiops-backend:latest
|
||||
imagePullPolicy: IfNotPresent
|
||||
env:
|
||||
# ---- 数据库连接参数(对应 config.yaml 的 ${DB_*} 占位)----
|
||||
- {name: DB_HOST, value: mysql}
|
||||
- {name: DB_PORT, value: "3306"}
|
||||
- {name: DB_USER, value: aiops}
|
||||
- {name: DB_NAME, value: aiops}
|
||||
- name: DB_PASSWORD
|
||||
valueFrom:
|
||||
secretKeyRef:
|
||||
name: aiops-secret
|
||||
key: database-password
|
||||
# ---- Redis 连接参数(本环境无密码)----
|
||||
- {name: REDIS_HOST, value: redis}
|
||||
- {name: REDIS_PORT, value: "6379"}
|
||||
- {name: REDIS_PASSWORD, value: ""}
|
||||
# ---- JWT ----
|
||||
- name: JWT_SECRET
|
||||
valueFrom:
|
||||
secretKeyRef:
|
||||
name: aiops-secret
|
||||
key: jwt-secret
|
||||
- {name: TZ, value: Asia/Shanghai}
|
||||
ports:
|
||||
- {name: api, containerPort: 8080} # API + WebSocket
|
||||
- {name: web, containerPort: 80} # go:embed 前端
|
||||
resources:
|
||||
requests:
|
||||
cpu: 100m
|
||||
memory: 512Mi
|
||||
limits:
|
||||
cpu: 500m
|
||||
memory: 1Gi
|
||||
livenessProbe:
|
||||
httpGet:
|
||||
path: /health
|
||||
port: api
|
||||
initialDelaySeconds: 20
|
||||
periodSeconds: 30
|
||||
timeoutSeconds: 3
|
||||
failureThreshold: 3
|
||||
readinessProbe:
|
||||
httpGet:
|
||||
path: /health
|
||||
port: api
|
||||
initialDelaySeconds: 10
|
||||
periodSeconds: 10
|
||||
timeoutSeconds: 3
|
||||
failureThreshold: 3
|
||||
volumeMounts:
|
||||
- name: config
|
||||
mountPath: /app/configs
|
||||
readOnly: true
|
||||
volumes:
|
||||
- name: config
|
||||
configMap:
|
||||
name: aiops-config
|
||||
---
|
||||
# Service — 对内暴露 80 (前端) 与 8080 (API)
|
||||
apiVersion: v1
|
||||
kind: Service
|
||||
metadata:
|
||||
name: aiops-backend
|
||||
namespace: devops
|
||||
labels:
|
||||
app.kubernetes.io/name: aiops
|
||||
app.kubernetes.io/component: backend
|
||||
spec:
|
||||
type: ClusterIP
|
||||
selector:
|
||||
app.kubernetes.io/name: aiops
|
||||
app.kubernetes.io/component: backend
|
||||
ports:
|
||||
- {name: api, port: 8080, targetPort: 8080}
|
||||
- {name: web, port: 80, targetPort: 80}
|
||||
Reference in new issue
Block a user