fad06fd
image:
repository: harbor.gitdata.me/app/gitdata
tag: "9da24e1"
pullPolicy: IfNotPresent
serviceAccount:
create: true
config:
env:
APP_REDIS__MODE: "cluster"
APP_REDIS__POOL_SIZE: "8"
APP_S3__ENDPOINT: "http://rustfs-svc.rustfs.svc.cluster.local:9000"
APP_S3__PUBLIC_ENDPOINT: "https://object.gitdata.ai"
APP_S3__BUCKET: "gitdata"
APP_S3__REGION: "us-east-1"
APP_S3__PATH_STYLE: "true"
APP_SEARCH__ENABLED: "true"
APP_SEARCH__URL: "http://meilisearch.meilisearch.svc.cluster.local:7700"
APP_SEARCH__INDEX_PREFIX: "gitdata"
APP_LIVEKIT__ENABLED: "true"
APP_LIVEKIT__URL: "wss://livekit.gitdata.ai"
APP_LIVEKIT__API_URL: "https://livekit.gitdata.ai"
APP_PUSH__ENABLED: "true"
APP_PUSH__VAPID_PUBLIC_KEY: "BG4X_BUPF-hgTX7xCzpRw9B1y3RO3y6lEBcuh0A62S4A1sjs79C54gUOzp3h8zy0oFsjVFM7A2OVM_6crzhLhMw"
APP_PUSH__VAPID_SUBJECT: "mailto:bot@mail.gitdata.ai"
APP_WEB__WEB_BASE_URL: "https://gitdata.ai"
APP_WEB__CORS_ALLOW_ORIGINS: '["https://gitdata.ai"]'
APP_SESSION__COOKIE_SECURE: "true"
APP_SESSION__MEMORY_LIFESPAN_SECS: "0"
APP_GIT__BASE_URL: "https://gitdata.ai"
APP_LIVEKIT__RECORDING_ENABLED: "false"
APP_EMAIL__ENABLED: "true"
APP_EMAIL__SMTP_HOST: "smtpdm.aliyun.com"
APP_EMAIL__SMTP_PORT: "465"
APP_EMAIL__SMTP_USERNAME: "bot@mail.gitdata.ai"
APP_EMAIL__FROM_ADDRESS: "bot@mail.gitdata.ai"
APP_EMAIL__FROM_NAME: "GitData"
APP_EMAIL_QUEUE__ENABLED: "true"
# CI 开关:runner 注册走 /api/v1/runner/register,该处理函数第一件事就是
# ensure_enabled()(lib/ci/src/service.rs:46),关闭时直接返回 403 Forbidden。
# 开启后必须同时提供 APP_CI__SECRET_ENCRYPTION_KEY(已在 gitdata-env Secret 中)。
APP_CI__ENABLED: "true"
# 必须是纯 origin(无路径前缀):lib/ci/src/actions_runtime.rs:158 actions_runtime_url()
# 会用 reqwest::Url::parse 校验,带路径就报 "must be a URL origin without a path prefix"。
# 用跨命名空间 FQDN:runner 池在 gitdata-runners 命名空间,这个 URL 会随 claim
# 响应下发(lib/ci/src/actions_payload.rs:87 runtime_url),必须两边都能解析。
APP_CI__RUNTIME_BASE_URL: "http://gitdata-webhook.gitdata.svc.cluster.local:3005"
RUST_LOG: "info,session::session_store=error"
OTEL_TRACES_SAMPLER: "parentbased_traceidratio"
OTEL_TRACES_SAMPLER_ARG: "0.2"
metrics:
otlpEndpoint: "http://otel-collector.monitoring.svc.cluster.local:4318"
ingress:
enabled: true
controller: traefik
className: traefik
host: gitdata.ai
annotations:
traefik.ingress.kubernetes.io/service.sticky.cookie: "true"
traefik.ingress.kubernetes.io/service.sticky.cookie.name: "GD-AFFINITY"
traefik.ingress.kubernetes.io/service.sticky.cookie.httpOnly: "true"
traefik.ingress.kubernetes.io/service.sticky.cookie.secure: "true"
traefik.ingress.kubernetes.io/service.sticky.cookie.sameSite: "Lax"
tls:
enabled: true
secretName: ""
clusterIssuer: cloudflare-acme-cluster-issuer
apihost:
resources:
requests: { cpu: 250m, memory: 512Mi }
limits: { memory: 1Gi }
autoscaling:
enabled: true
minReplicas: 2
maxReplicas: 6
targetCPUUtilizationPercentage: 65
targetMemoryUtilizationPercentage: 80
behavior:
scaleUp:
stabilizationWindowSeconds: 20
policies:
- type: Percent
value: 100
periodSeconds: 30
- type: Pods
value: 4
periodSeconds: 30
selectPolicy: Max
scaleDown:
stabilizationWindowSeconds: 300
policies:
- type: Pods
value: 1
periodSeconds: 60
githost:
enabled: true
replicaCount: 1
httpPort: 9418
ssh:
enabled: true
containerPort: 2222
cloneHost: "ssh.gitdata.ai"
clonePort: 22
service:
type: LoadBalancer
port: 22
annotations:
metallb.universe.tf/loadBalancerIPs: "47.239.98.8"
adminhost:
enabled: true
ingress:
enabled: true
host: admin.gitdata.ai
className: traefik
tls:
enabled: true
secretName: ""
clusterIssuer: cloudflare-acme-cluster-issuer
webhook:
enabled: true
ingress:
enabled: true
host: hooks.gitdata.ai
className: traefik
tls:
enabled: true
secretName: ""
clusterIssuer: cloudflare-acme-cluster-issuer
ai:
enabled: true
baseUrl: "https://api.deepseek.com"
model: "deepseek-flash"
reviewEnabled: true
summaryEnabled: true
releaseNotesEnabled: true
queueTopic: "gitdata:ai"
dlqTopic: "gitdata:ai:dlq"
maxAttempts: 3
requestTimeoutSecs: 600
contextMaxBytes: 524288
maxFindings: 20
maxOutputTokens: 4096
thinkingBudget: 2048
temperature: "0.2"
summaryCommitLimit: 50
botUsername: "ai-reviewer"
botDisplayName: "AI Reviewer"
outputLanguage: "zh-CN"
aihost:
enabled: true
replicaCount: 1
port: 3006
concurrency: 2
pollIntervalSecs: 5
retryBackoffBaseSecs: 2
resources:
requests: { cpu: 100m, memory: 256Mi }
limits: { memory: 1Gi }
extraEnv: []
persistence:
repos:
enabled: true
existingClaim: gitdata-repos
size: 2Ti
storageClassName: aliyun-nfs-pro
accessModes: ["ReadWriteMany"]
mountPath: /opt/gitdata
migrate:
enabled: true
synchost:
enabled: true
replicaCount: 2
mails:
enabled: true
im:
enabled: true
autoscaling:
enabled: true
minReplicas: 2
maxReplicas: 6
targetCPUUtilizationPercentage: 70
targetMemoryUtilizationPercentage: 80
behavior:
scaleUp:
stabilizationWindowSeconds: 30
policies:
- type: Percent
value: 100
periodSeconds: 60
- type: Pods
value: 2
periodSeconds: 60
selectPolicy: Max
scaleDown:
stabilizationWindowSeconds: 600
policies:
- type: Pods
value: 1
periodSeconds: 120
runner:
enabled: false
actionsImage:
repository: harbor.gitdata.me/app/gitdata-act
tag: ""
pullPolicy: IfNotPresent