chore: init monorepo snapshot
This commit is contained in:
@@ -0,0 +1,23 @@
|
||||
# Patterns to ignore when building packages.
|
||||
# This supports shell glob matching, relative path matching, and
|
||||
# negation (prefixed with !). Only one pattern per line.
|
||||
.DS_Store
|
||||
# Common VCS dirs
|
||||
.git/
|
||||
.gitignore
|
||||
.bzr/
|
||||
.bzrignore
|
||||
.hg/
|
||||
.hgignore
|
||||
.svn/
|
||||
# Common backup files
|
||||
*.swp
|
||||
*.bak
|
||||
*.tmp
|
||||
*.orig
|
||||
*~
|
||||
# Various IDEs
|
||||
.project
|
||||
.idea/
|
||||
*.tmproj
|
||||
.vscode/
|
||||
@@ -0,0 +1,10 @@
|
||||
apiVersion: v2
|
||||
name: lightrag
|
||||
description: A Helm chart for LightRAG, an efficient and lightweight RAG system
|
||||
type: application
|
||||
version: 0.1.1
|
||||
appVersion: "1.0.0"
|
||||
maintainers:
|
||||
- name: LightRAG Team
|
||||
- name: earayu
|
||||
email: earayu@gmail.com
|
||||
@@ -0,0 +1,38 @@
|
||||
===========================================
|
||||
LightRAG has been successfully deployed!
|
||||
===========================================
|
||||
|
||||
View application logs:
|
||||
kubectl logs -f --namespace {{ .Release.Namespace }} deploy/{{ include "lightrag.fullname" . }}
|
||||
|
||||
===========================================
|
||||
|
||||
Access the application:
|
||||
{{- if contains "NodePort" .Values.service.type }}
|
||||
Run these commands to get access information:
|
||||
-----------------------------------------
|
||||
export NODE_PORT=$(kubectl get --namespace {{ .Release.Namespace }} -o jsonpath="{.spec.ports[0].nodePort}" services {{ include "lightrag.fullname" . }})
|
||||
export NODE_IP=$(kubectl get nodes --namespace {{ .Release.Namespace }} -o jsonpath="{.items[0].status.addresses[0].address}")
|
||||
echo "LightRAG is accessible at: http://$NODE_IP:$NODE_PORT"
|
||||
-----------------------------------------
|
||||
{{- else if contains "LoadBalancer" .Values.service.type }}
|
||||
Run these commands to get access information (external IP may take a minute to assign):
|
||||
-----------------------------------------
|
||||
export SERVICE_IP=$(kubectl get svc --namespace {{ .Release.Namespace }} {{ include "lightrag.fullname" . }} --template "{{ "{{ range (index .status.loadBalancer.ingress 0) }}{{ . }}{{ end }}" }}")
|
||||
echo "LightRAG is accessible at: http://$SERVICE_IP:{{ .Values.service.port }}"
|
||||
-----------------------------------------
|
||||
If SERVICE_IP is empty, retry the command or check service status with:
|
||||
kubectl get svc --namespace {{ .Release.Namespace }} {{ include "lightrag.fullname" . }}
|
||||
{{- else if contains "ClusterIP" .Values.service.type }}
|
||||
For development environments, to access LightRAG from your local machine:
|
||||
|
||||
1. Run this port-forward command in your terminal:
|
||||
kubectl --namespace {{ .Release.Namespace }} port-forward svc/{{ include "lightrag.fullname" . }} {{ .Values.service.port }}:{{ .Values.env.PORT }}
|
||||
|
||||
2. While the command is running, open your browser and navigate to:
|
||||
http://localhost:{{ .Values.service.port }}
|
||||
|
||||
Note: To stop port-forwarding, press Ctrl+C in the terminal.
|
||||
{{- end }}
|
||||
|
||||
===========================================
|
||||
@@ -0,0 +1,42 @@
|
||||
{{/*
|
||||
Application name
|
||||
*/}}
|
||||
{{- define "lightrag.name" -}}
|
||||
{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" }}
|
||||
{{- end }}
|
||||
|
||||
{{/*
|
||||
Full application name
|
||||
*/}}
|
||||
{{- define "lightrag.fullname" -}}
|
||||
{{- default .Release.Name .Values.fullnameOverride | trunc 63 | trimSuffix "-" }}
|
||||
{{- end }}
|
||||
|
||||
{{/*
|
||||
Common labels
|
||||
*/}}
|
||||
{{- define "lightrag.labels" -}}
|
||||
app.kubernetes.io/name: {{ include "lightrag.name" . }}
|
||||
app.kubernetes.io/instance: {{ .Release.Name }}
|
||||
app.kubernetes.io/managed-by: {{ .Release.Service }}
|
||||
{{- end }}
|
||||
|
||||
{{/*
|
||||
Selector labels
|
||||
*/}}
|
||||
{{- define "lightrag.selectorLabels" -}}
|
||||
app.kubernetes.io/name: {{ include "lightrag.name" . }}
|
||||
app.kubernetes.io/instance: {{ .Release.Name }}
|
||||
{{- end }}
|
||||
|
||||
{{/*
|
||||
.env file content
|
||||
*/}}
|
||||
{{- define "lightrag.envContent" -}}
|
||||
{{- $first := true -}}
|
||||
{{- range $key, $val := .Values.env -}}
|
||||
{{- if not $first -}}{{- "\n" -}}{{- end -}}
|
||||
{{- $first = false -}}
|
||||
{{ $key }}={{ $val }}
|
||||
{{- end -}}
|
||||
{{- end -}}
|
||||
@@ -0,0 +1,81 @@
|
||||
apiVersion: apps/v1
|
||||
kind: Deployment
|
||||
metadata:
|
||||
name: {{ include "lightrag.fullname" . }}
|
||||
labels:
|
||||
{{- include "lightrag.labels" . | nindent 4 }}
|
||||
spec:
|
||||
replicas: {{ .Values.replicaCount }}
|
||||
selector:
|
||||
matchLabels:
|
||||
{{- include "lightrag.selectorLabels" . | nindent 6 }}
|
||||
template:
|
||||
metadata:
|
||||
annotations:
|
||||
checksum/config: {{ include "lightrag.envContent" . | sha256sum }}
|
||||
labels:
|
||||
{{- include "lightrag.selectorLabels" . | nindent 8 }}
|
||||
spec:
|
||||
containers:
|
||||
- name: {{ .Chart.Name }}
|
||||
image: "{{ .Values.image.repository }}:{{ .Values.image.tag | default .Chart.AppVersion }}"
|
||||
imagePullPolicy: IfNotPresent
|
||||
ports:
|
||||
- name: http
|
||||
containerPort: {{ .Values.env.PORT }}
|
||||
protocol: TCP
|
||||
readinessProbe:
|
||||
httpGet:
|
||||
path: /health
|
||||
port: http
|
||||
initialDelaySeconds: 10
|
||||
periodSeconds: 5
|
||||
timeoutSeconds: 2
|
||||
successThreshold: 1
|
||||
failureThreshold: 3
|
||||
resources:
|
||||
{{- toYaml .Values.resources | nindent 12 }}
|
||||
volumeMounts:
|
||||
- name: rag-storage
|
||||
mountPath: /app/data/rag_storage
|
||||
- name: inputs
|
||||
mountPath: /app/data/inputs
|
||||
- name: env-file
|
||||
mountPath: /app/.env
|
||||
subPath: .env
|
||||
{{- $envFrom := default (dict) .Values.envFrom }}
|
||||
{{- $envFromEntries := list }}
|
||||
{{- range (default (list) (index $envFrom "secrets")) }}
|
||||
{{- $envFromEntries = append $envFromEntries (dict "secretRef" (dict "name" .name)) }}
|
||||
{{- end }}
|
||||
{{- range (default (list) (index $envFrom "configmaps")) }}
|
||||
{{- $envFromEntries = append $envFromEntries (dict "configMapRef" (dict "name" .name)) }}
|
||||
{{- end }}
|
||||
{{- if gt (len $envFromEntries) 0 }}
|
||||
envFrom:
|
||||
{{- toYaml $envFromEntries | nindent 12 }}
|
||||
{{- end }}
|
||||
{{- with .Values.image.imagePullSecrets }}
|
||||
imagePullSecrets:
|
||||
{{- toYaml . | nindent 8 }}
|
||||
{{- end }}
|
||||
volumes:
|
||||
- name: env-file
|
||||
secret:
|
||||
secretName: {{ include "lightrag.fullname" . }}-env
|
||||
{{- if .Values.persistence.enabled }}
|
||||
- name: rag-storage
|
||||
persistentVolumeClaim:
|
||||
claimName: {{ include "lightrag.fullname" . }}-rag-storage
|
||||
- name: inputs
|
||||
persistentVolumeClaim:
|
||||
claimName: {{ include "lightrag.fullname" . }}-inputs
|
||||
{{- else }}
|
||||
- name: rag-storage
|
||||
emptyDir: {}
|
||||
- name: inputs
|
||||
emptyDir: {}
|
||||
{{- end }}
|
||||
|
||||
strategy:
|
||||
{{- toYaml .Values.updateStrategy | nindent 4 }}
|
||||
@@ -0,0 +1,28 @@
|
||||
{{- if .Values.persistence.enabled }}
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: PersistentVolumeClaim
|
||||
metadata:
|
||||
name: {{ include "lightrag.fullname" . }}-rag-storage
|
||||
labels:
|
||||
{{- include "lightrag.labels" . | nindent 4 }}
|
||||
spec:
|
||||
accessModes:
|
||||
- ReadWriteOnce
|
||||
resources:
|
||||
requests:
|
||||
storage: {{ .Values.persistence.ragStorage.size }}
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: PersistentVolumeClaim
|
||||
metadata:
|
||||
name: {{ include "lightrag.fullname" . }}-inputs
|
||||
labels:
|
||||
{{- include "lightrag.labels" . | nindent 4 }}
|
||||
spec:
|
||||
accessModes:
|
||||
- ReadWriteOnce
|
||||
resources:
|
||||
requests:
|
||||
storage: {{ .Values.persistence.inputs.size }}
|
||||
{{- end }}
|
||||
@@ -0,0 +1,10 @@
|
||||
apiVersion: v1
|
||||
kind: Secret
|
||||
metadata:
|
||||
name: {{ include "lightrag.fullname" . }}-env
|
||||
labels:
|
||||
{{- include "lightrag.labels" . | nindent 4 }}
|
||||
type: Opaque
|
||||
stringData:
|
||||
.env: |-
|
||||
{{- include "lightrag.envContent" . | nindent 4 }}
|
||||
@@ -0,0 +1,15 @@
|
||||
apiVersion: v1
|
||||
kind: Service
|
||||
metadata:
|
||||
name: {{ include "lightrag.fullname" . }}
|
||||
labels:
|
||||
{{- include "lightrag.labels" . | nindent 4 }}
|
||||
spec:
|
||||
type: {{ .Values.service.type }}
|
||||
ports:
|
||||
- port: {{ .Values.service.port }}
|
||||
targetPort: {{ .Values.env.PORT }}
|
||||
protocol: TCP
|
||||
name: http
|
||||
selector:
|
||||
{{- include "lightrag.selectorLabels" . | nindent 4 }}
|
||||
@@ -0,0 +1,82 @@
|
||||
replicaCount: 1
|
||||
|
||||
image:
|
||||
repository: ghcr.io/hkuds/lightrag
|
||||
tag: latest
|
||||
# Optionally specify imagePullSecrets if your image is in a private registry
|
||||
# example:
|
||||
# imagePullSecrets:
|
||||
# - name: my-registry-secret
|
||||
imagePullSecrets: []
|
||||
|
||||
# Specify a deployment strategy
|
||||
# example:
|
||||
# updateStrategy:
|
||||
# type: RollingUpdate
|
||||
# rollingUpdate:
|
||||
# maxUnavailable: 25%
|
||||
# maxSurge: 25%
|
||||
# Default for now should be Recreate as any RollingUpdate will cause issues with
|
||||
# multiple instances trying to access the same persistent storage if not using RWX volumes.
|
||||
updateStrategy:
|
||||
type: Recreate
|
||||
|
||||
service:
|
||||
type: ClusterIP
|
||||
port: 9621
|
||||
|
||||
resources:
|
||||
limits:
|
||||
cpu: 1000m
|
||||
memory: 2Gi
|
||||
requests:
|
||||
cpu: 500m
|
||||
memory: 1Gi
|
||||
|
||||
persistence:
|
||||
enabled: true
|
||||
ragStorage:
|
||||
size: 10Gi
|
||||
inputs:
|
||||
size: 5Gi
|
||||
|
||||
# Allow specifying additional environment variables from ConfigMaps or Secrets created outside of this chart
|
||||
envFrom:
|
||||
configmaps: []
|
||||
# - name: my-shiny-configmap-1
|
||||
secrets: []
|
||||
# - name: my-shiny-secret-1
|
||||
|
||||
env:
|
||||
HOST: 0.0.0.0
|
||||
PORT: 9621
|
||||
WEBUI_TITLE: Graph RAG Engine
|
||||
WEBUI_DESCRIPTION: Simple and Fast Graph Based RAG System
|
||||
LLM_BINDING: openai
|
||||
LLM_MODEL: gpt-4o-mini
|
||||
LLM_BINDING_HOST:
|
||||
LLM_BINDING_API_KEY:
|
||||
EMBEDDING_BINDING: openai
|
||||
EMBEDDING_MODEL: text-embedding-ada-002
|
||||
EMBEDDING_DIM: 1536
|
||||
EMBEDDING_BINDING_API_KEY:
|
||||
LIGHTRAG_KV_STORAGE: PGKVStorage
|
||||
LIGHTRAG_VECTOR_STORAGE: PGVectorStorage
|
||||
# LIGHTRAG_KV_STORAGE: RedisKVStorage
|
||||
# LIGHTRAG_VECTOR_STORAGE: QdrantVectorDBStorage
|
||||
LIGHTRAG_GRAPH_STORAGE: Neo4JStorage
|
||||
LIGHTRAG_DOC_STATUS_STORAGE: PGDocStatusStorage
|
||||
# Replace with your POSTGRES credentials
|
||||
POSTGRES_HOST: pg-cluster-postgresql-postgresql
|
||||
POSTGRES_PORT: 5432
|
||||
POSTGRES_USER: postgres
|
||||
POSTGRES_PASSWORD:
|
||||
POSTGRES_DATABASE: postgres
|
||||
POSTGRES_WORKSPACE: default
|
||||
# Replace with your NEO4J credentials
|
||||
NEO4J_URI: neo4j://neo4j-cluster-neo4j:7687
|
||||
NEO4J_USERNAME: neo4j
|
||||
NEO4J_PASSWORD:
|
||||
# Replace with your Qdrant credentials
|
||||
QDRANT_URL: http://qdrant-cluster-qdrant-qdrant:6333
|
||||
# REDIS_URI: redis://default:${REDIS_PASSWORD}@redis-cluster-redis-redis:6379
|
||||
Reference in New Issue
Block a user