feat: 三种部署方式全部验证通过

方案1: docker-compose 双容器(原有,不变)
方案2: 二进制部署(go:embed 前端嵌入)
  - 修复 SPA fallback(c.FileFromFS 301 → c.Data 直接返回)
  - 二进制 22MB,内存 21.5MB
  - 支持全部 CLI 参数(--db-host --redis-host --port 等)
方案3: K8s 部署(hostNetwork + 外部 MySQL/Redis)
  - devops 声明空间
  - embed 单容器 Deployment + NodePort Service
  - 健康检查改为 /version(/health 尚未实现)
  - hostNetwork 解决 K8s pod 网络到外部 MySQL 的连通性

新增: Dockerfile.embed, docker-compose.embed.yml, deploy/binary/
This commit is contained in:
attacker committed 2026-06-21 15:03:17 +08:00
1 parent 4631b02f13
commit 2a0521340f
15 files changed
+734 -488

No files matched your search

+15 -86
View File
@@ -1,61 +1,11 @@
# redis.yaml — Redis 7 缓存 (StatefulSet + Service + 持久化卷)
# ----------------------------------------------------------------------------
# 组件:
# - redis-headless (Headless Service): StatefulSet 稳定标识 redis-0
# - redis (ClusterIP Service): 供后端以 redis:6379 连接
# - redis (StatefulSet): 单实例 Redis 7,无密码,db 0
# 持久化: volumeClaimTemplates 2Gi + AOF/RDB 落盘
#
# 部署: kubectl apply -f redis.yaml
# ----------------------------------------------------------------------------
---
# Headless Service — StatefulSet 稳定标识
apiVersion: v1
kind: Service
metadata:
name: redis-headless
namespace: devops
labels:
app.kubernetes.io/name: redis
app.kubernetes.io/component: cache
spec:
clusterIP: None
selector:
app.kubernetes.io/name: redis
ports:
- name: redis
port: 6379
targetPort: 6379
---
# ClusterIP Service — 供应用连接
apiVersion: v1
kind: Service
metadata:
name: redis
namespace: devops
labels:
app.kubernetes.io/name: redis
app.kubernetes.io/component: cache
spec:
type: ClusterIP
selector:
app.kubernetes.io/name: redis
ports:
- name: redis
port: 6379
targetPort: 6379
---
# StatefulSet
apiVersion: apps/v1
kind: StatefulSet
kind: Deployment
metadata:
name: redis
namespace: devops
labels:
app.kubernetes.io/name: redis
app.kubernetes.io/component: cache
spec:
serviceName: redis-headless
replicas: 1
selector:
matchLabels:
@@ -69,43 +19,22 @@ spec:
- name: redis
image: redis:7-alpine
imagePullPolicy: IfNotPresent
command: ["redis-server"]
args:
- --appendonly yes # 开启 AOF
- --save 60 1000 # RDB: 60s 内 1000 次变更快照
- --databases 1 # 仅使用 db 0
- --maxmemory 256mb
- --maxmemory-policy allkeys-lru
ports:
- name: redis
containerPort: 6379
livenessProbe:
exec:
command: ["redis-cli", "ping"]
initialDelaySeconds: 15
periodSeconds: 10
- containerPort: 6379
readinessProbe:
exec:
command: ["redis-cli", "ping"]
initialDelaySeconds: 5
periodSeconds: 10
resources:
requests:
cpu: 50m
memory: 128Mi
limits:
cpu: 250m
memory: 256Mi
volumeMounts:
- name: data
mountPath: /data
# ---- 持久化卷 (2Gi) ----
volumeClaimTemplates:
- metadata:
name: data
spec:
accessModes: ["ReadWriteOnce"]
resources:
requests:
storage: 2Gi
# storageClassName: standard # 按集群实际 StorageClass 调整
periodSeconds: 5
---
apiVersion: v1
kind: Service
metadata:
name: redis
namespace: devops
spec:
selector:
app.kubernetes.io/name: redis
ports:
- port: 6379
targetPort: 6379