feat: added helm clean push (#606)

<!-- .github/pull_request_template.md -->

## Description
<!-- Provide a clear description of the changes in this PR -->

## DCO Affirmation
I affirm that all code in every commit of this pull request conforms to
the terms of the Topoteretes Developer Certificate of Origin


<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
## Summary by CodeRabbit

- **New Features**
- Introduced a Helm-based deployment package that streamlines setup for
the backend application and PostgreSQL database on Kubernetes.
- Added orchestration support via Docker Compose for managing
multi-container deployments.
- Added new Kubernetes resources including Deployments, Services, and
PersistentVolumeClaims for both the backend and PostgreSQL.

- **Documentation**
- Provided comprehensive infrastructure and deployment instructions for
Kubernetes environments.

- **Chores**
- Established a standardized container build process for the Python
application.
- Introduced configuration settings for service ports, resource limits,
and environment variables.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->

---------

Co-authored-by: Daniel Molnar <soobrosa@gmail.com>
Co-authored-by: Boris <boris@topoteretes.com>
This commit is contained in:
Vasilije 2025-03-08 08:51:57 -08:00 committed by GitHub
parent 65d0f7317c
commit 62c84dde5e
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
10 changed files with 280 additions and 0 deletions

24
helm/Chart.yaml Normal file
View file

@ -0,0 +1,24 @@
apiVersion: v2
name: cognee-chart
description: A helm chart of the cognee backend deployment on Kubernetes environment
# A chart can be either an 'application' or a 'library' chart.
#
# Application charts are a collection of templates that can be packaged into versioned archives
# to be deployed.
#
# Library charts provide useful utilities or functions for the chart developer. They're included as
# a dependency of application charts to inject those utilities and functions into the rendering
# pipeline. Library charts do not define any templates and therefore cannot be deployed.
type: application
# This is the chart version. This version number should be incremented each time you make changes
# to the chart and its templates, including the app version.
# Versions are expected to follow Semantic Versioning (https://semver.org/)
version: 0.1.0
# This is the version number of the application being deployed. This version number should be
# incremented each time you make changes to the application. Versions are not expected to
# follow Semantic Versioning. They should reflect the version the application is using.
# It is recommended to use it with quotes.
appVersion: "1.16.0"

59
helm/Dockerfile Normal file
View file

@ -0,0 +1,59 @@
FROM python:3.11-slim
# Define Poetry extras to install
ARG POETRY_EXTRAS="\
# Storage & Databases \
filesystem postgres weaviate qdrant neo4j falkordb milvus \
# Notebooks & Interactive Environments \
notebook \
# LLM & AI Frameworks \
langchain llama-index gemini huggingface ollama mistral groq \
# Evaluation & Monitoring \
deepeval evals posthog \
# Graph Processing & Code Analysis \
codegraph graphiti \
# Document Processing \
docs"
# Set build argument
ARG DEBUG
# Set environment variable based on the build argument
ENV DEBUG=${DEBUG}
ENV PIP_NO_CACHE_DIR=true
ENV PATH="${PATH}:/root/.poetry/bin"
RUN apt-get install -y \
gcc \
libpq-dev
WORKDIR /app
COPY pyproject.toml poetry.lock /app/
RUN pip install poetry
# Don't create virtualenv since docker is already isolated
RUN poetry config virtualenvs.create false
# Install the dependencies
RUN poetry install --extras "${POETRY_EXTRAS}" --no-root --without dev
# Set the PYTHONPATH environment variable to include the /app directory
ENV PYTHONPATH=/app
COPY cognee/ /app/cognee
# Copy Alembic configuration
COPY alembic.ini /app/alembic.ini
COPY alembic/ /app/alembic
COPY entrypoint.sh /app/entrypoint.sh
RUN chmod +x /app/entrypoint.sh
RUN sed -i 's/\r$//' /app/entrypoint.sh
ENTRYPOINT ["/app/entrypoint.sh"]

25
helm/README.md Normal file
View file

@ -0,0 +1,25 @@
# cognee-infra-helm
General infrastructure setup for Cognee on Kubernetes using a Helm chart.
## Prerequisites
Before deploying the Helm chart, ensure the following prerequisites are met: 
**Kubernetes Cluster**: A running Kubernetes cluster (e.g., Minikube, GKE, EKS).
**Helm**: Installed and configured for your Kubernetes cluster. You can install Helm by following the [official guide](https://helm.sh/docs/intro/install/). 
**kubectl**: Installed and configured to interact with your cluster. Follow the instructions [here](https://kubernetes.io/docs/tasks/tools/install-kubectl/).
Clone the Repository Clone this repository to your local machine and navigate to the directory.
## Deploy Helm Chart:
```bash
helm install cognee ./cognee-chart
```
**Uninstall Helm Release**:
```bash
helm uninstall cognee
```

View file

@ -0,0 +1,46 @@
services:
cognee:
image : cognee-backend:latest
container_name: cognee-backend
networks:
- cognee-network
build:
context: .
dockerfile: Dockerfile
volumes:
- .:/app
- /app/cognee-frontend/ # Ignore frontend code
environment:
- HOST=0.0.0.0
- ENVIRONMENT=local
- PYTHONPATH=.
ports:
- 8000:8000
# - 5678:5678 # Debugging
deploy:
resources:
limits:
cpus: '4.0'
memory: 8GB
postgres:
image: pgvector/pgvector:pg17
container_name: postgres
environment:
POSTGRES_USER: cognee
POSTGRES_PASSWORD: cognee
POSTGRES_DB: cognee_db
volumes:
- postgres_data:/var/lib/postgresql/data
ports:
- 5432:5432
networks:
- cognee-network
networks:
cognee-network:
name: cognee-network
volumes:
postgres_data:

View file

@ -0,0 +1,32 @@
apiVersion: apps/v1
kind: Deployment
metadata:
name: {{ .Release.Name }}-cognee
labels:
app: {{ .Release.Name }}-cognee
spec:
replicas: 1
selector:
matchLabels:
app: {{ .Release.Name }}-cognee
template:
metadata:
labels:
app: {{ .Release.Name }}-cognee
spec:
containers:
- name: cognee
image: {{ .Values.cognee.image }}
ports:
- containerPort: {{ .Values.cognee.port }}
env:
- name: HOST
value: {{ .Values.cognee.env.HOST }}
- name: ENVIRONMENT
value: {{ .Values.cognee.env.ENVIRONMENT }}
- name: PYTHONPATH
value: {{ .Values.cognee.env.PYTHONPATH }}
resources:
limits:
cpu: {{ .Values.cognee.resources.cpu }}
memory: {{ .Values.cognee.resources.memory }}

View file

@ -0,0 +1,13 @@
apiVersion: v1
kind: Service
metadata:
name: {{ .Release.Name }}-cognee
labels:
app: {{ .Release.Name }}-cognee
spec:
type: NodePort
ports:
- port: {{ .Values.cognee.port }}
targetPort: {{ .Values.cognee.port }}
selector:
app: {{ .Release.Name }}-cognee

View file

@ -0,0 +1,35 @@
apiVersion: apps/v1
kind: Deployment
metadata:
name: {{ .Release.Name }}-postgres
labels:
app: {{ .Release.Name }}-postgres
spec:
replicas: 1
selector:
matchLabels:
app: {{ .Release.Name }}-postgres
template:
metadata:
labels:
app: {{ .Release.Name }}-postgres
spec:
containers:
- name: postgres
image: {{ .Values.postgres.image }}
ports:
- containerPort: {{ .Values.postgres.port }}
env:
- name: POSTGRES_USER
value: {{ .Values.postgres.env.POSTGRES_USER }}
- name: POSTGRES_PASSWORD
value: {{ .Values.postgres.env.POSTGRES_PASSWORD }}
- name: POSTGRES_DB
value: {{ .Values.postgres.env.POSTGRES_DB }}
volumeMounts:
- name: postgres-storage
mountPath: /var/lib/postgresql/data
volumes:
- name: postgres-storage
persistentVolumeClaim:
claimName: {{ .Release.Name }}-postgres-pvc

View file

@ -0,0 +1,10 @@
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: {{ .Release.Name }}-postgres-pvc
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: {{ .Values.postgres.storage }}

View file

@ -0,0 +1,14 @@
apiVersion: v1
kind: Service
metadata:
name: {{ .Release.Name }}-postgres
labels:
app: {{ .Release.Name }}-postgres
spec:
type: ClusterIP
ports:
- port: {{ .Values.postgres.port }}
targetPort: {{ .Values.postgres.port }}
selector:
app: {{ .Release.Name }}-postgres

22
helm/values.yaml Normal file
View file

@ -0,0 +1,22 @@
# Configuration for the 'cognee' application service
cognee:
# Image name (using the local image well build in Minikube)
image: "hajdul1988/cognee-backend:latest"
port: 8000
env:
HOST: "0.0.0.0"
ENVIRONMENT: "local"
PYTHONPATH: "."
resources:
cpu: "4.0"
memory: "8Gi"
# Configuration for the 'postgres' database service
postgres:
image: "pgvector/pgvector:pg17"
port: 5432
env:
POSTGRES_USER: "cognee"
POSTGRES_PASSWORD: "cognee"
POSTGRES_DB: "cognee_db"
storage: "8Gi"