Skip to content

BorisPolonsky/dify-helm

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

dify-helm

Github All Releases Release Charts Artifact Hub

Deploy langgenius/dify, an LLM-based chatbot app on Kubernetes with Helm chart.

Installation

TL;DR

helm repo add dify https://borispolonsky.github.io/dify-helm
helm repo update
helm install my-release dify/dify

For customized installation, please refer to the README.md file.

Network Architecture

The following diagram illustrates the complete network architecture and service topology of the Dify Helm deployment:

graph TB
    %% External Traffic Entry Points
    Internet[๐ŸŒ Internet] --> Ingress[๐Ÿšช Ingress Controller]
    Internet --> LB[โš–๏ธ LoadBalancer Service]

    %% Main Traffic Flow
    Ingress --> ProxyService[๐Ÿ”„ Proxy Service<br/>Port: 80]
    LB --> ProxyService

    %% Proxy Pod and Routing
    ProxyService --> ProxyPod[๐Ÿ“ฆ Proxy Pod<br/>nginx:latest<br/>Port: 80]

    %% Backend Services Routing
    ProxyPod -->|API Endpoints| APIService[๐Ÿ”ง API Service<br/>Port: 5001]
    ProxyPod -->|Web Pages| WebService[๐ŸŒ Web Service<br/>Port: 3000]
    ProxyPod -->|Plugin Routes| PluginService[๐Ÿ”Œ Plugin Daemon Service<br/>Port: 5002]
    ProxyPod -->|Marketplace| MarketplaceAPI[๐Ÿ›’ Marketplace API<br/>External]

    %% Backend Pods
    APIService --> APIPod[๐Ÿ“ฆ API Pod<br/>langgenius/dify-api:1.8.1<br/>Port: 5001]
    WebService --> WebPod[๐Ÿ“ฆ Web Pod<br/>langgenius/dify-web:1.8.1<br/>Port: 3000]
    PluginService --> PluginPod[๐Ÿ“ฆ Plugin Daemon Pod<br/>langgenius/dify-plugin-daemon:0.2.0-local<br/>Port: 5002, 5003]

    %% Worker Pod (Background Processing)
    WorkerPod[๐Ÿ“ฆ Worker Pod<br/>langgenius/dify-api:1.8.1]

    %% Beat Pod (Periodic task scheduler)
    BeatPod[๐Ÿ“ฆ Beat Pod<br/>langgenius/dify-api:1.8.1]

    %% Sandbox Service
    SandboxService[๐Ÿ–๏ธ Sandbox Service<br/>Port: 8194] --> SandboxPod[๐Ÿ“ฆ Sandbox Pod<br/>langgenius/dify-sandbox:0.2.12<br/>Port: 8194]

    %% SSRF Proxy Service
    SSRFService[๐Ÿ›ก๏ธ SSRF Proxy Service<br/>Port: 3128] --> SSRFPod[๐Ÿ“ฆ SSRF Proxy Pod<br/>ubuntu/squid:latest<br/>Port: 3128]

    %% Internal Communications
    APIPod -.->|Code Execution| SandboxService
    APIPod -.->|SSRF Protection| SSRFService
    APIPod -.->|Plugin Management| PluginService
    WorkerPod -.->|Background Tasks| APIPod

    %% Data Layer - Databases
    subgraph DataLayer [๐Ÿ—„๏ธ Data Layer]
        PostgresService[๐Ÿ˜ PostgreSQL Service<br/>Port: 5432]
        RedisService[๐Ÿ”ด Redis Service<br/>Port: 6379]
        VectorDBService[๐Ÿงฎ Vector DB Service]
    end

    %% Database Connections
    APIPod -.->|Database Operations| PostgresService
    WorkerPod -.->|Database Operations| PostgresService
    PluginPod -.->|Database Operations| PostgresService

    APIPod -.->|Cache & Sessions| RedisService
    WorkerPod -.->|Task Processing| RedisService
    BeatPod -.->|Task Scheduling| RedisService

    APIPod -.->|Vector Storage| VectorDBService
    WorkerPod -.->|Vector Operations| VectorDBService

    %% Storage Layer
    subgraph StorageLayer [๐Ÿ’พ Storage Layer]
        StorageType{Storage Type}
        LocalPVC[๐Ÿ“ Local PVC]
        S3Storage[โ˜๏ธ AWS S3]
        AzureStorage[โ˜๏ธ Azure Blob]
        GCSStorage[โ˜๏ธ Google Cloud Storage]
    end

    %% Storage Connections
    APIPod -.->|File Storage| StorageType
    WorkerPod -.->|File Storage| StorageType
    PluginPod -.->|Plugin Storage| StorageType

    StorageType --> LocalPVC
    StorageType --> S3Storage
    StorageType --> AzureStorage
    StorageType --> GCSStorage

    %% Vector Database Options
    subgraph VectorOptions [๐Ÿงฎ Vector Database Options]
        WeaviateDB[๐ŸŒŠ Weaviate<br/>Port: 8080]
        QdrantDB[โšก Qdrant<br/>Port: 6333]
        MilvusDB[๐Ÿ” Milvus<br/>Port: 19530]
        PGVectorDB[๐Ÿ˜ PGVector<br/>Port: 5432]
    end

    VectorDBService -.-> WeaviateDB
    VectorDBService -.-> QdrantDB
    VectorDBService -.-> MilvusDB
    VectorDBService -.-> PGVectorDB

    %% External Dependencies
    subgraph ExternalServices [๐ŸŒ External Services]
        ExternalDB[(๐Ÿ”ง External PostgreSQL)]
        ExternalRedis[(๐Ÿ”ด External Redis)]
        ExternalVector[(๐Ÿงฎ External Vector DB)]
        ExternalStorage[(๐Ÿ’พ External Object Storage)]
    end

    %% External Service Connections (Alternative)
    APIPod -.->|Alternative| ExternalDB
    APIPod -.->|Alternative| ExternalRedis
    APIPod -.->|Alternative| ExternalVector
    APIPod -.->|Alternative| ExternalStorage

    %% Styling
    classDef podClass fill:#e1f5fe,stroke:#0277bd,stroke-width:2px
    classDef serviceClass fill:#f3e5f5,stroke:#7b1fa2,stroke-width:2px
    classDef storageClass fill:#e8f5e8,stroke:#2e7d32,stroke-width:2px
    classDef externalClass fill:#fff3e0,stroke:#ef6c00,stroke-width:2px

    class APIPod,WebPod,WorkerPod,BeatPod,SandboxPod,SSRFPod,PluginPod podClass
    class APIService,WebService,SandboxService,SSRFService,PluginService,ProxyService serviceClass
    class PostgresService,RedisService,VectorDBService,WeaviateDB,QdrantDB,MilvusDB,PGVectorDB storageClass
    class ExternalDB,ExternalRedis,ExternalVector,ExternalStorage,S3Storage,AzureStorage,GCSStorage externalClass
Loading

Traffic Routing Rules

The Nginx proxy handles traffic routing with the following rules:

/console/api โ†’ API Service (5001)
/api         โ†’ API Service (5001)
/v1          โ†’ API Service (5001)
/files       โ†’ API Service (5001)
/mcp         โ†’ API Service (5001)
/e/          โ†’ Plugin Daemon (5002)
/explore     โ†’ Web Service (3000)
/marketplace โ†’ External Marketplace API
/            โ†’ Web Service (3000) [Default Route]

Core Components

Component Image Port Role
API langgenius/dify-api:1.8.1 5001 RESTful API server, business logic processing
Web langgenius/dify-web:1.8.1 3000 Web UI frontend
Worker langgenius/dify-api:1.8.1 - Background task processing (Celery)
Beat langgenius/dify-api:1.8.1 - Periodic task scheduler (Celery Beat)
Sandbox langgenius/dify-sandbox:0.2.12 8194 Secure code execution environment
Plugin Daemon langgenius/dify-plugin-daemon:0.2.0-local 5002, 5003 Plugin management and execution
SSRF Proxy ubuntu/squid:latest 3128 External request security proxy
Nginx Proxy nginx:latest 80 Reverse proxy, load balancing

External Components Supported by this App with Proper Configuration

  • Redis
  • PostgreSQL
  • Object Storage:
    • Amazon S3
    • Microsoft Azure Blob Storage
    • Alibaba Cloud OSS
    • Google Cloud Storage
    • Tencent Cloud COS
    • Huawei Cloud OBS
    • Volcengine TOS
  • External Vector DB:
    • Weaviate
    • Qdrant
    • Milvus
    • PGVector
    • Tencent Vector DB
    • MyScaleDB
    • TableStore
    • elasticsearch

ExternalSecret Support

Background

In Kubernetes production environments, storing sensitive information (such as database passwords, API keys, etc.) directly in values.yaml is insecure. The ExternalSecret feature solves this problem through the External Secrets Operator, which can securely retrieve sensitive information from external secret management systems (such as AWS Secrets Manager, HashiCorp Vault, Azure Key Vault, etc.) and automatically create Kubernetes Secret resources.

Why ExternalSecret is needed:

  • Security: Avoid storing plain text passwords in Git repositories or configuration files
  • Centralized Management: Unified management of all sensitive information
  • Automatic Rotation: Support for automatic key updates and rotation
  • Compliance: Meet enterprise security and compliance requirements

Currently Supported External Components

When ExternalSecret is enabled, sensitive information for the following components can be retrieved from external secret stores:

Database Connections

  • PostgreSQL: Database username, password
  • Redis: Authentication password, username
  • Elasticsearch: Username, password

Object Storage

  • AWS S3: Access Key ID, Secret Access Key

Vector Databases

  • ElasticSearch: Username, Password

Email Services

  • Resend: API Key, sender email
  • SendGrid: API Key, sender email

Other Services

  • Code Execution Service: API Key
  • Plugin System: Daemon Key, internal API Key
  • Application Core: Secret Key

Usage: Set externalSecret.enabled: true in values.yaml and configure the corresponding secretStore and remoteRefs parameters.

Contributors

About

Deploy langgenious/dify, an LLM based app on kubernetes with helm chart.

Topics

Resources

License

Stars

Watchers

Forks

Packages