mirror of
https://github.com/Tencent/WeKnora.git
synced 2026-09-01 14:53:07 +08:00
fa7ae075ee
* feat(compose): align env vars in docker-compose and .env.example with code docker-compose.yml / docker-compose.dev.yml - app.environment: remove deprecated vars Go app no longer reads (CRYPTO_MASTER_KEY, CRYPTO_SALT, TENANT_AES_KEY, ENABLE_GRAPH_RAG); add missing vars the code actually consumes (OSS/S3/TOS/COS completion, OpenSearch, Tencent VectorDB, Milvus credentials, Redis TLS/namespace, OIDC, audit/invitation/quota, LLM tuning, doc timeouts, etc.) - docreader.environment: complete PDF tuning knobs, SSRF/LOG_LEVEL/gRPC params, GRPC_MTLS_REQUIRE_CLIENT_CERT; fix DOCREADER_PDF_JPEG_QUALITY default 90 -> 85 to match code (config.py) - mcp.environment: add MCP_SERVER_AUTH_TOKEN (required by HTTP transport), WEKNORA_CHAT_TIMEOUT, WEKNORA_VERIFY_SSL, MCP_ALLOWED_UPLOAD_DIRS - dev compose docreader.environment kept symmetric with prod .env.example - reorganize into A-J sections (deploy / data / retrieval / models / parsing / auth / agent / integrations / observability / security) - remove the four deprecated vars, document why - add missing vars, fix NEO4J_URI to bolt:// (matches compose + single-node), fix DORIS_COMPAT_MODE typo, complete docreader PDF tuning defaults Co-Authored-By: Claude <noreply@anthropic.com> * fix(helm): inject NEO4J_ENABLE and drop deprecated TENANT_AES_KEY helm graph bug fix - NEO4J_ENABLE is the sole graph switch the Go app reads (since v0.1.6, ENABLE_GRAPH_RAG is no longer read). helm never injected NEO4J_ENABLE, so GraphRAG was silently broken: setting neo4j.enabled=true gave the app NEO4J_URI/USERNAME/PASSWORD but not the switch, and the UI rejected Node Extractor config with "请正确配置环境变量NEO4J_ENABLE". - app.yaml: inject NEO4J_ENABLE=true inside the neo4j.enabled block; remove the dead ENABLE_GRAPH_RAG injection - NOTES.txt: update GraphRAG instructions (just enable neo4j, no need to set the deprecated ENABLE_GRAPH_RAG) - values.yaml: drop ENABLE_GRAPH_RAG, fix neo4j section comment TENANT_AES_KEY cleanup (deprecated since v0.4.0, encryption now uses SYSTEM_AES_KEY exclusively; Go app no longer reads it) - secrets.yaml: stop generating/looking-up/writing TENANT_AES_KEY, fix stale comment about tenants.api_key rotation - app.yaml: remove TENANT_AES_KEY secretKeyRef - values.yaml: drop tenantAesKey, fix existingSecret key list + comments - cloud-image/firstboot.sh: stop generating/writing/printing TENANT_AES - cloud-image/README.md: drop TENANT_AES_KEY from credential list Co-Authored-By: Claude <noreply@anthropic.com> --------- Co-authored-by: Claude <noreply@anthropic.com>
197 lines
6.8 KiB
YAML
197 lines
6.8 KiB
YAML
{{/*
|
|
Copyright 2025 Tencent
|
|
SPDX-License-Identifier: MIT
|
|
|
|
WeKnora Backend API Server Deployment and Service.
|
|
*/}}
|
|
{{- if .Values.app.enabled }}
|
|
apiVersion: apps/v1
|
|
kind: Deployment
|
|
metadata:
|
|
name: {{ include "weknora.fullname" . }}-app
|
|
namespace: {{ .Release.Namespace }}
|
|
labels:
|
|
{{- include "weknora.componentLabels" (dict "component" "app" "context" .) | nindent 4 }}
|
|
spec:
|
|
replicas: {{ .Values.app.replicaCount }}
|
|
selector:
|
|
matchLabels:
|
|
{{- include "weknora.componentSelectorLabels" (dict "component" "app" "context" .) | nindent 6 }}
|
|
strategy:
|
|
type: RollingUpdate
|
|
rollingUpdate:
|
|
maxSurge: 1
|
|
maxUnavailable: 0
|
|
template:
|
|
metadata:
|
|
labels:
|
|
{{- include "weknora.componentSelectorLabels" (dict "component" "app" "context" .) | nindent 8 }}
|
|
spec:
|
|
{{- include "weknora.imagePullSecrets" . | nindent 6 }}
|
|
serviceAccountName: {{ include "weknora.serviceAccountName" . }}
|
|
{{- with .Values.app.podSecurityContext | default .Values.global.podSecurityContext }}
|
|
securityContext:
|
|
{{- toYaml . | nindent 8 }}
|
|
{{- end }}
|
|
containers:
|
|
- name: app
|
|
image: {{ include "weknora.app.image" . }}
|
|
imagePullPolicy: {{ .Values.app.image.pullPolicy }}
|
|
{{- with .Values.app.securityContext }}
|
|
securityContext:
|
|
{{- toYaml . | nindent 12 }}
|
|
{{- end }}
|
|
ports:
|
|
- containerPort: 8080
|
|
name: http
|
|
protocol: TCP
|
|
env:
|
|
# Application settings
|
|
- name: GIN_MODE
|
|
value: {{ .Values.app.env.GIN_MODE | quote }}
|
|
- name: TZ
|
|
value: {{ .Values.app.env.TZ | quote }}
|
|
# Database configuration
|
|
- name: DB_DRIVER
|
|
value: "postgres"
|
|
- name: DB_HOST
|
|
value: "postgres"
|
|
- name: DB_PORT
|
|
value: "5432"
|
|
- name: DB_USER
|
|
valueFrom:
|
|
secretKeyRef:
|
|
name: {{ include "weknora.secretName" . }}
|
|
key: DB_USER
|
|
- name: DB_PASSWORD
|
|
valueFrom:
|
|
secretKeyRef:
|
|
name: {{ include "weknora.secretName" . }}
|
|
key: DB_PASSWORD
|
|
- name: DB_NAME
|
|
valueFrom:
|
|
secretKeyRef:
|
|
name: {{ include "weknora.secretName" . }}
|
|
key: DB_NAME
|
|
# Redis configuration
|
|
- name: REDIS_ADDR
|
|
value: "redis:6379"
|
|
- name: REDIS_USERNAME
|
|
valueFrom:
|
|
secretKeyRef:
|
|
name: {{ include "weknora.secretName" . }}
|
|
key: REDIS_USERNAME
|
|
optional: true
|
|
- name: REDIS_PASSWORD
|
|
valueFrom:
|
|
secretKeyRef:
|
|
name: {{ include "weknora.secretName" . }}
|
|
key: REDIS_PASSWORD
|
|
- name: REDIS_DB
|
|
value: "0"
|
|
- name: REDIS_PREFIX
|
|
value: "stream:"
|
|
- name: STREAM_MANAGER_TYPE
|
|
value: {{ .Values.app.env.STREAM_MANAGER_TYPE | quote }}
|
|
# Security
|
|
- name: JWT_SECRET
|
|
valueFrom:
|
|
secretKeyRef:
|
|
name: {{ include "weknora.secretName" . }}
|
|
key: JWT_SECRET
|
|
- name: SYSTEM_AES_KEY
|
|
valueFrom:
|
|
secretKeyRef:
|
|
name: {{ include "weknora.secretName" . }}
|
|
key: SYSTEM_AES_KEY
|
|
# Retrieval & Storage
|
|
- name: RETRIEVE_DRIVER
|
|
value: {{ .Values.app.env.RETRIEVE_DRIVER | quote }}
|
|
- name: STORAGE_TYPE
|
|
value: {{ .Values.app.env.STORAGE_TYPE | quote }}
|
|
- name: LOCAL_STORAGE_BASE_DIR
|
|
value: {{ .Values.app.env.LOCAL_STORAGE_BASE_DIR | quote }}
|
|
# Document reader
|
|
- name: DOCREADER_ADDR
|
|
value: "docreader:50051"
|
|
# Processing
|
|
- name: AUTO_RECOVER_DIRTY
|
|
value: {{ .Values.app.env.AUTO_RECOVER_DIRTY | quote }}
|
|
- name: CONCURRENCY_POOL_SIZE
|
|
value: {{ .Values.app.env.CONCURRENCY_POOL_SIZE | quote }}
|
|
{{- if .Values.neo4j.enabled }}
|
|
# Neo4j configuration (for GraphRAG)
|
|
# NEO4J_ENABLE 是知识图谱的唯一开关(Go 代码认它,不认 ENABLE_GRAPH_RAG)。
|
|
# neo4j.enabled=true 时自动注入,无需用户单独设置。
|
|
- name: NEO4J_ENABLE
|
|
value: "true"
|
|
- name: NEO4J_URI
|
|
value: "bolt://neo4j:7687"
|
|
- name: NEO4J_USERNAME
|
|
valueFrom:
|
|
secretKeyRef:
|
|
name: {{ include "weknora.secretName" . }}
|
|
key: NEO4J_USERNAME
|
|
- name: NEO4J_PASSWORD
|
|
valueFrom:
|
|
secretKeyRef:
|
|
name: {{ include "weknora.secretName" . }}
|
|
key: NEO4J_PASSWORD
|
|
{{- end }}
|
|
{{- with .Values.app.extraEnv }}
|
|
# Additional environment variables
|
|
{{- toYaml . | nindent 12 }}
|
|
{{- end }}
|
|
volumeMounts:
|
|
- name: data-files
|
|
mountPath: /data/files
|
|
resources:
|
|
{{- toYaml .Values.app.resources | nindent 12 }}
|
|
{{- with .Values.app.livenessProbe }}
|
|
livenessProbe:
|
|
{{- toYaml . | nindent 12 }}
|
|
{{- end }}
|
|
{{- with .Values.app.readinessProbe }}
|
|
readinessProbe:
|
|
{{- toYaml . | nindent 12 }}
|
|
{{- end }}
|
|
volumes:
|
|
- name: data-files
|
|
{{- if .Values.dataFiles.persistence.enabled }}
|
|
persistentVolumeClaim:
|
|
claimName: {{ .Values.dataFiles.persistence.existingClaim | default (printf "%s-data-files" (include "weknora.fullname" .)) }}
|
|
{{- else }}
|
|
emptyDir: {}
|
|
{{- end }}
|
|
{{- with .Values.app.nodeSelector }}
|
|
nodeSelector:
|
|
{{- toYaml . | nindent 8 }}
|
|
{{- end }}
|
|
{{- with .Values.app.affinity }}
|
|
affinity:
|
|
{{- toYaml . | nindent 8 }}
|
|
{{- end }}
|
|
{{- with .Values.app.tolerations }}
|
|
tolerations:
|
|
{{- toYaml . | nindent 8 }}
|
|
{{- end }}
|
|
---
|
|
apiVersion: v1
|
|
kind: Service
|
|
metadata:
|
|
# Service name must be "app" - frontend nginx config hardcodes this
|
|
name: app
|
|
namespace: {{ .Release.Namespace }}
|
|
labels:
|
|
{{- include "weknora.componentLabels" (dict "component" "app" "context" .) | nindent 4 }}
|
|
spec:
|
|
type: {{ .Values.app.service.type }}
|
|
selector:
|
|
{{- include "weknora.componentSelectorLabels" (dict "component" "app" "context" .) | nindent 4 }}
|
|
ports:
|
|
- name: http
|
|
port: {{ .Values.app.service.port }}
|
|
targetPort: http
|
|
protocol: TCP
|
|
{{- end }}
|