Skip to content
Clone

chore(prod): clean up comments and streamline Redis and S3 configurations

ZhenYi committed
parent 8c3b01f commit 9e1f4b9 Browse files

1 file changed

+1 −71

Modified deploy/values/prod.yaml View deploy/values/prod.yaml
@@ -15,51 +15,30 @@
1515
1616config:
1717 env:
18 # ---- Redis: valkey cluster (3主3从) ----
19 # 注意:APP_REDIS__URL / APP_CACHE__REDIS__URL 不能留空占位。
20 # config.env 走容器 env:,secret.env 走 envFrom:,而 env: 的优先级更高
21 # (同名时 env: 胜出),留个空串就会把 Secret 里的真实连接串覆盖掉。
22 # 因此这两项只出现在 PROD_SECRET_VALUES 中,此处完全不声明。
18
2319 APP_REDIS__MODE: "cluster"
2420 APP_REDIS__POOL_SIZE: "8"
25 # oxcache 的 L2 不支持 cluster 客户端(会 MOVED 报错),故用独立 standalone 实例
2621 APP_CACHE__REDIS__MODE: "standalone"
27
28 # ---- S3: RustFS ----
2922 APP_S3__ENDPOINT: "http://rustfs-svc.rustfs.svc.cluster.local:9000"
30 # presign URL 的对外 host:必须填客户端可达的地址,否则签名 URL 会带内网 svc 名
3123 APP_S3__PUBLIC_ENDPOINT: "https://s3.gitdata.ai"
3224 APP_S3__BUCKET: "gitdata"
3325 APP_S3__REGION: "us-east-1"
3426 APP_S3__PATH_STYLE: "true"
35
36 # ---- Search: Meilisearch (内部服务, *.gitdata.me) ----
3727 APP_SEARCH__ENABLED: "true"
3828 APP_SEARCH__URL: "http://meili-meilisearch.gitdata.svc.cluster.local:7700"
3929 APP_SEARCH__INDEX_PREFIX: "gitdata"
40
41 # ---- LiveKit (业务服务, *.gitdata.ai) ----
4230 APP_LIVEKIT__ENABLED: "true"
4331 APP_LIVEKIT__URL: "wss://livekit.gitdata.ai"
4432 APP_LIVEKIT__API_URL: "https://livekit.gitdata.ai"
45
46 # ---- Web Push / VAPID ----
47 # 私钥只在 PROD_SECRET_VALUES 里(APP_PUSH__VAPID_PRIVATE_KEY):config.env 走
48 # env:,同名键会盖掉 envFrom: 的 Secret,所以私钥绝不能出现在这里。
4933 APP_PUSH__ENABLED: "true"
5034 APP_PUSH__VAPID_PUBLIC_KEY: "BG4X_BUPF-hgTX7xCzpRw9B1y3RO3y6lEBcuh0A62S4A1sjs79C54gUOzp3h8zy0oFsjVFM7A2OVM_6crzhLhMw"
5135 APP_PUSH__VAPID_SUBJECT: "mailto:bot@mail.gitdata.ai"
52 # ---- 对外地址(主站 gitdata.ai)----
5336 APP_WEB__WEB_BASE_URL: "https://gitdata.ai"
5437 APP_WEB__CORS_ALLOW_ORIGINS: '["https://gitdata.ai"]'
55 # 生产走 TLS,session cookie 强制 Secure
5638 APP_SESSION__COOKIE_SECURE: "true"
57 # 多副本必须:会话不驻留 pod 内存,每请求从 Redis 回读;否则跨副本会丢失 pow challenge / 2FA / 登录态
5839 APP_SESSION__MEMORY_LIFESPAN_SECS: "0"
5940 APP_GIT__BASE_URL: "https://gitdata.ai"
6041 APP_LIVEKIT__RECORDING_ENABLED: "false"
61
62 # ---- 邮件 ----
6342 APP_EMAIL__ENABLED: "true"
6443 APP_EMAIL__SMTP_HOST: "smtpdm.aliyun.com"
6544 APP_EMAIL__SMTP_PORT: "465"
@@ -69,18 +48,6 @@
6948 APP_EMAIL_QUEUE__ENABLED: "true"
7049
7150 RUST_LOG: "info,axum_session::session_store=error"
72
73 # ---- OpenTelemetry ----
74 # endpoint 指向 OpenObserve 的 OTLP HTTP 入口(org id 在路径里,非凭据);
75 # SDK 自己往 endpoint 后拼 /v1/traces 与 /v1/metrics。
76 # 凭据在 PROD_SECRET_VALUES 里分两个键:
77 # OTEL_EXPORTER_OTLP_HEADERS = Authorization=... (所有信号共用)
78 # OTEL_EXPORTER_OTLP_TRACES_HEADERS = Authorization=...,stream-name=default
79 # traces 按用户给的配置落到 default 流;metrics 故意不带 stream-name,
80 # 否则 OO 会把所有指标塞进一条流,Metrics 页面按指标名浏览就废了。
81 # 注意 signal-specific 变量是整体覆盖通用变量、不是合并,所以 traces 那条要带全。
82 # 采样:TraceLayer 给每个 HTTP 请求建 span,静态资源也在 apihost 上,全采会把
83 # 存储喂满;parentbased 保证被采样的请求链路完整(子 span 跟随父决策)。
8451 OTEL_TRACES_SAMPLER: "parentbased_traceidratio"
8552 OTEL_TRACES_SAMPLER_ARG: "0.2"
8653
@@ -92,26 +59,13 @@
9259 className: nginx
9360 host: gitdata.ai
9461 annotations:
95 # 会话亲和:apihost 的 oxocache 带进程内 L1(cache.l1_capacity / l1_ttl_secs),
96 # 同一会话固定落在同一个 pod 才吃得到热缓存;跨 pod 迁移只是退回 L2/回源,
97 # 不影响正确性——会话、PoW、2FA challenge 都在 Redis 里(session.set),
98 # WS 集线器在 im 进程内,与 apihost 无关。
99 # 值策略用 incremental:cookie 存的是后端身份,HPA 增删副本时
100 # 已登录用户不会被整体重排(balanced 存的是索引,拓扑一变就错位)。
10162 nginx.ingress.kubernetes.io/affinity: "cookie"
10263 nginx.ingress.kubernetes.io/session-cookie-name: "GD-AFFINITY"
10364 nginx.ingress.kubernetes.io/session-cookie-value-strategy: "incremental"
10465 nginx.ingress.kubernetes.io/session-cookie-http-only: "true"
10566 nginx.ingress.kubernetes.io/session-cookie-samesite: "Lax"
10667 nginx.ingress.kubernetes.io/session-cookie-persistent: "false"
107 # 该注解作用于整张 Ingress:/ws/v1 的握手响应浏览器不会存 cookie(WS 无 cookie jar),
108 # git smart HTTP 客户端也不保存 cookie,因此实际只对 "/" -> apihost 生效。
109 # apihost 自动扩缩:CPU 是主指标,内存负责兜住 L1 缓存膨胀(limit 1Gi / request 256Mi)
110 # min 2 与 PDB minAvailable 1 相容;max 6 = 1.5 核请求量,节点池足够。
11168apihost:
112 # 进程常驻内存实测 114Mi ~ 700Mi(oxocache L1 + PDF 页缓存),256Mi 的 request
113 # 让内存指标长期 >80%,HPA 因此被钉死在 maxReplicas。把 request 抬到实测中位数
114 # 之上后,80%(约 410Mi)才真的是「这个 pod 忙」的信号;limit 仍是 1Gi。
11569 resources:
11670 requests: { cpu: 250m, memory: 512Mi }
11771 limits: { memory: 1Gi }
@@ -149,21 +103,17 @@
149103
150104githost:
151105 enabled: true
152 # 多副本:SSH host key 已预置在共享 PVC,replica 间共用同一把
153106 replicaCount: 2
154107 httpPort: 9418
155108 ssh:
156109 enabled: true
157110 containerPort: 2222
158 # clone URL 对外统一 ssh.gitdata.ai:22;22 由外部 nginx 反代到 LB 的 31838
159 # (云边缘封禁集群公网 IP 的 22,报文到不了集群;31838 安全组已放行、实测全球可达)
160111 cloneHost: "ssh.gitdata.ai"
161112 clonePort: 22
162113 service:
163114 type: LoadBalancer
164115 port: 22
165116 annotations:
166 # 固定 MetalLB 分配的 SSH LB IP,与 cloneHost 保持一致
167117 metallb.universe.tf/loadBalancerIPs: "47.239.98.8"
168118
169119adminhost:
@@ -188,15 +138,6 @@
188138 secretName: ""
189139 clusterIssuer: cloudflare-acme-cluster-issuer
190140
191# ---------------------------------------------------------------------------
192# AI:评审 / 仓库总结 / release 文案(值对齐 config/local.toml)
193# 供应商:DeepSeek(https://api.deepseek.com,OpenAI 兼容)。
194# api_key 走 secret.env -> APP_AI__API_KEY
195# 端点探测(2026-09-29):/models 返回 deepseek-flash = DeepSeek-V4.1-Flash,
196# 1M 上下文、支持结构化 JSON(response_format=json_object)且会把思维链单独放在
197# reasoning_content;小任务 1.5-3.0s 返回,比之前的 aliyun MaaS qwen3.8-flash
198# 快一个数量级。thinking_budget 该端点接受(不报错),故保持 2048 不变。
199# ---------------------------------------------------------------------------
200141ai:
201142 enabled: true
202143 baseUrl: "https://api.deepseek.com"
@@ -218,10 +159,6 @@
218159 botDisplayName: "AI Reviewer"
219160 outputLanguage: "zh-CN"
220161
221# ---------------------------------------------------------------------------
222# 沙箱智能体(agent gateway):任务在远端沙箱里跑,本仓只做建模、审计与落库。
223# admin_key 走 secret.env -> APP_SAGENT__ADMIN_KEY
224# ---------------------------------------------------------------------------
225162sagent:
226163 enabled: true
227164 baseUrl: "https://agent.gitdata.ai"
@@ -241,8 +178,6 @@
241178persistence:
242179 repos:
243180 enabled: true
244 # 预创建的独立 PVC(2Ti, aliyun-nfs-pro, Retain+archiveOnDelete)
245 # 由 kubectl 管理而非 helm,卸载/删除 release 都不会回收
246181 existingClaim: gitdata-repos
247182 size: 2Ti
248183 storageClassName: aliyun-nfs-pro
@@ -261,16 +196,11 @@
261196
262197im:
263198 enabled: true
264 # WS 网关自动扩缩。跨 pod 投递本来就走 Redis pub/sub(Realtime::publish_room /
265 # subscribe_room,本进程只持有自己那份 rooms/users 注册表),所以加副本不会让
266 # 谁收不到事件;缩容才会——被撤 pod 上的连接需要重连,因此 scaleDown 明显比
267 # apihost 保守:10 分钟稳定窗 + 每 2 分钟最多撤 1 个。
268199 autoscaling:
269200 enabled: true
270201 minReplicas: 2
271202 maxReplicas: 6
272203 targetCPUUtilizationPercentage: 70
273 # 128Mi request 下约 102Mi 触发:每个在线连接 = socket 缓冲 + 自己的 pubsub pump
274204 targetMemoryUtilizationPercentage: 80
275205 behavior:
276206 scaleUp: