mirror of
https://github.com/infiniflow/ragflow.git
synced 2025-12-29 16:05:35 +08:00
- fix(ingress): use root context ($) for fullname inside range - fix(statefulset): use updateStrategy instead of strategy for mysql/infinity/elasticsearch/opensearch - feat(mysql): add external mode via mysql.enabled=false with env MYSQL_HOST/PORT and MYSQL_USER (default root) - feat(minio/redis): add external mode via *.enabled=false with env *_HOST/PORT - feat(global): add global.repo for image registry prefix and global.imagePullSecrets for all pods - feat: helper template ragflow.imageRepo to render image with global repo - chore(env): allow optional MINIO_HOST, MINIO_PASSWORD, REDIS_PASSWORD (remove required); keep MYSQL_PASSWORD required - docs(helm): add helm/README.md and update usage - refactor(images): apply global repo to all components and init containers - test: align test busybox image with global repo helper ### What problem does this PR solve? _Briefly describe what this PR aims to solve. Include background context that will help reviewers understand the purpose of the PR._ ### Type of change - [x] Bug Fix (non-breaking change which fixes an issue) - [x] New Feature (non-breaking change which adds functionality) - [x] Documentation Update - [ ] Refactoring - [ ] Performance Improvement - [ ] Other (please describe):
RAGFlow Helm Chart
A Helm chart to deploy RAGFlow and its dependencies on Kubernetes.
- Components: RAGFlow (web/api) and optional dependencies (Infinity/Elasticsearch/OpenSearch, MySQL, MinIO, Redis)
- Requirements: Kubernetes >= 1.24, Helm >= 3.10
Install
helm upgrade --install ragflow ./ \
--namespace ragflow --create-namespace
Uninstall:
helm uninstall ragflow -n ragflow
Global Settings
global.repo: Prepend a global image registry prefix for all images.- Behavior: Replaces the registry part and keeps the image path (e.g.,
quay.io/minio/minio->registry.example.com/myproj/minio/minio). - Example:
global.repo: "registry.example.com/myproj"
- Behavior: Replaces the registry part and keeps the image path (e.g.,
global.imagePullSecrets: List of image pull secrets applied to all Pods.- Example:
global: imagePullSecrets: - name: regcred
- Example:
External Services (MySQL / MinIO / Redis)
The chart can deploy in-cluster services or connect to external ones. Toggle with *.enabled. When disabled, provide host/port via env.*.
- MySQL
mysql.enabled: defaulttrue- If
false, set:env.MYSQL_HOST(required),env.MYSQL_PORT(default3306)env.MYSQL_DBNAME(defaultrag_flow),env.MYSQL_PASSWORD(required)env.MYSQL_USER(defaultrootif omitted)
- MinIO
minio.enabled: defaulttrue- Configure:
env.MINIO_HOST(optional external host),env.MINIO_PORT(default9000)env.MINIO_ROOT_USER(defaultrag_flow),env.MINIO_PASSWORD(optional)
- Redis (Valkey)
redis.enabled: defaulttrue- If
false, set:env.REDIS_HOST(required),env.REDIS_PORT(default6379)env.REDIS_PASSWORD(optional; empty disables auth if server allows)
Notes:
- When
*.enabled=true, the chart renders in-cluster resources and injects corresponding*_HOST/*_PORTautomatically. - Sensitive variables like
MYSQL_PASSWORDare required;MINIO_PASSWORDandREDIS_PASSWORDare optional. All secrets are stored in a Secret.
Example: use external MySQL, MinIO, and Redis
# values.override.yaml
mysql:
enabled: false # use external MySQL
minio:
enabled: false # use external MinIO (S3 compatible)
redis:
enabled: false # use external Redis/Valkey
env:
# MySQL
MYSQL_HOST: mydb.example.com
MYSQL_PORT: "3306"
MYSQL_USER: root
MYSQL_DBNAME: rag_flow
MYSQL_PASSWORD: "<your-mysql-password>"
# MinIO
MINIO_HOST: s3.example.com
MINIO_PORT: "9000"
MINIO_ROOT_USER: rag_flow
MINIO_PASSWORD: "<your-minio-secret>"
# Redis
REDIS_HOST: redis.example.com
REDIS_PORT: "6379"
REDIS_PASSWORD: "<your-redis-pass>"
Apply:
helm upgrade --install ragflow ./helm -n ragflow -f values.override.yaml
Document Engine Selection
Choose one of infinity (default), elasticsearch, or opensearch via env.DOC_ENGINE. The chart renders only the selected engine and sets the appropriate host variables.
env:
DOC_ENGINE: infinity # or: elasticsearch | opensearch
# For elasticsearch
ELASTIC_PASSWORD: "<es-pass>"
# For opensearch
OPENSEARCH_PASSWORD: "<os-pass>"
Ingress
Expose the web UI via Ingress:
ingress:
enabled: true
className: nginx
hosts:
- host: ragflow.example.com
paths:
- path: /
pathType: Prefix
Validate the Chart
helm lint ./helm
helm template ragflow ./helm > rendered.yaml
Notes
- By default, the chart uses
DOC_ENGINE: infinityand deploys in-cluster MySQL, MinIO, and Redis. - The chart injects derived
*_HOST/*_PORTand required secrets into a single Secret (<release>-ragflow-env-config). global.repoandglobal.imagePullSecretsapply to all Pods; per-component*.image.pullSecretsstill work and are merged with global settings.