• Русский
  • Установка Dify

    В этом документе описывается, как развернуть Dify в Kubernetes cluster с помощью Helm chart и стандартной конфигурации. Обзор Dify и его компонентов см. в Introduction. Этот chart разворачивает только компоненты Dify; PostgreSQL, Redis и vector store должны предоставляться извне и настраиваться в values.

    Обзор

    Этот chart запускает следующие компоненты как отдельные workloads:

    • API – Backend API и бизнес-логика
    • Worker – Celery workers для асинхронных задач
    • Worker Beat – Celery beat для задач по расписанию
    • Web – Frontend UI
    • Plugin Daemon – среда выполнения plugin
    • Sandbox – изолированное выполнение кода
    • SSRF Proxy – proxy на базе Squid для исходящих запросов

    Предварительные требования

    • Kubernetes 1.19+
    • Ingress controller (например, nginx-ingress-controller) при публикации через Ingress
    • Внешний PostgreSQL 12+ (этот chart поддерживает только PostgreSQL)
    • Внешний Redis 6.0+ (только standalone; Sentinel и Cluster не поддерживаются)
    • Для RAG: PostgreSQL с расширением pgvector, либо установите vectorStore.type: "", чтобы отключить

    Загрузка

    Скачайте файл установки Dify: dify.ALL.xxxx.tgz

    Используйте команду violet для публикации в platform repository:

    violet push --platform-address=platform-access-address --platform-username=platform-admin --platform-password=platform-admin-password dify.ALL.xxxx.tgz

    Развертывание

    Подготовка Database

    Используйте PostgreSQL 12+. Этот chart поддерживает только PostgreSQL. Вы можете создать PostgreSQL cluster через PostgreSQL operator в Data Services и получить host и учетные данные из сведений об instance.

    Подготовка Redis

    Используйте Redis 6.0+ только в режиме standalone (Sentinel и Cluster не поддерживаются). Вы можете создать Redis instance через Data Services. Чтобы использовать standalone mode:

    1. При создании instance выберите Redis Sentinel для Architecture.
    2. Переключитесь в режим YAML, задайте spec.arch значение standalone, затем создайте instance.
    3. После создания в Alauda Container Platform найдите Service с именем rfr-<Redis instance name>-read-write — он используется как Redis host.

    Подготовка Vector Store (для RAG)

    Этот chart поддерживает только pgvector. Используйте PostgreSQL instance с расширением pgvector (это может быть тот же host, что и у основной database, но с другим именем database, либо отдельный host). Если вы не используете RAG, установите vectorStore.type: "" и не используйте pgvector.

    Подготовка Storage (необязательно)

    В cluster должны быть CSI или заранее созданные PersistentVolumes, если вы используете PVC для API и plugin storage. По умолчанию chart использует PVC; вы можете переопределить storageClass, size и accessMode в values либо вместо этого использовать S3-compatible object storage (см. Storage (S3 and PVC)).

    Создание Application

    1. В Alauda Container Platform выберите namespace, в котором будет развернут Dify.
    2. Перейдите в Applications / Applications и нажмите Create.
    3. Выберите Create from Catalog и откройте представление Catalog.
    4. Найдите 3rdparty/chart-dify и нажмите Create.
    5. Введите Name (например, dify) и настройте Custom values, как показано ниже, затем создайте application. Позже вы можете изменить values через Update в application.

    Обязательная конфигурация

    Необходимо настроить как минимум:

    1. URLsurls.consoleUrl и urls.appUrl (base URLs для доступа через browser, без suffix пути; требуется для корректного открытия app)
    2. Database – PostgreSQL 12+ (host и учетные данные через Secret)
    3. Redis – Redis 6.0+ standalone (host и учетные данные через Secret)
    4. Vector store – pgvector (host и учетные данные через Secret), либо установите vectorStore.type: "", чтобы отключить

    Минимально необходимые значения

    Создайте secrets (замените placeholders на ваши значения):

    kubectl create secret generic dify-db-secret --from-literal=password='<db-password>'
    kubectl create secret generic dify-redis-secret --from-literal=password='<redis-password>'
    kubectl create secret generic dify-pgvector-secret --from-literal=password='<pgvector-password>'

    Минимальные Custom Values (заполните ваши hosts и имена secrets):

    # Required: base URLs for console and app (no path suffix)
    urls:
      consoleUrl: <https://console-domain>   # or http://
      appUrl: <https://app-domain>           # or http://
    
    # Required: main database (PostgreSQL 12+)
    database:
      host: <postgres-host-without-port>
      secret:
        name: <dify-db-secret>
      # Optional: enable when PostgreSQL uses SSL
      # ssl:
      #   enabled: true
    
    # Required: Redis 6.0+ (standalone only)
    redis:
      host: <redis-host-without-port>
      secret:
        name: <dify-redis-secret>
    
    # Required: vector store (pgvector; or set vectorStore.type: "" to disable)
    vectorStore:
      pgvector:
        host: <pgvector-host-without-port>
        secret:
          name: <dify-pgvector-secret>
    
    # If your cluster has no default StorageClass, configure storage.*.pvc.storageClass
    # storage:
    #   api:
    #     pvc:
    #       storageClass: <storage-class>
    #   plugin:
    #     pvc:
    #       storageClass: <storage-class>

    Дополнительная конфигурация

    Database (SSL)

    Если PostgreSQL требует SSL connection, включите его:

    database:
      ssl:
        enabled: true

    Vector store (отключение)

    Если вы не используете RAG/vector search:

    vectorStore:
      type: ""

    Ingress (host и TLS)

    По умолчанию ingress.enabled имеет значение true, а ingress.hosts[].host может быть пустым (совпадение со всеми доменами). При необходимости задайте hostname и TLS:

    ingress:
      className: <ingress-class>
      hosts:
        - host: <dify.example.com>
      tls:
        - secretName: <dify-tls>
          hosts:
            - <dify.example.com>

    Storage (S3 and PVC)

    PVC (по умолчанию): API и plugin daemon используют PVC, если это включено. При необходимости переопределите storage class и размер.

    Если в cluster нет default StorageClass, storageClass обязателен для каждого PVC:

    storage:
      api:
        type: opendal
        pvc:
          enabled: true
          size: 10Gi
          storageClass: <storage-class>
          accessMode: ReadWriteOnce
      plugin:
        type: local
        pvc:
          enabled: true
          size: 10Gi
          storageClass: <storage-class>
          accessMode: ReadWriteOnce

    S3 (object storage): Используйте Amazon S3 или другой S3-compatible object store для API и/или plugin. Создайте Secret с ACCESS_KEY и SECRET_KEY (или настройте пользовательские keys в values):

    kubectl create secret generic <dify-s3-secret> --from-literal=ACCESS_KEY='<access-key>' --from-literal=SECRET_KEY='<secret-key>'
    storage:
      api:
        type: s3
        s3:
          endpoint: <s3-endpoint>   # empty for AWS default; for custom endpoints e.g. https://object-storage.example.com:9000
          region: <region>
          bucket: <bucket>
          addressStyle: path   # "path" for many S3-compatible endpoints; "virtual" for AWS
          secret:
            name: <dify-s3-secret>
      plugin:
        type: s3
        s3:
          endpoint: <s3-endpoint>
          region: <region>
          bucket: <bucket>
          secret:
            name: <dify-s3-secret>

    PIP install mirror (proxy)

    Если cluster не может получить доступ к PyPI (например, из-за offline или ограниченной сети), задайте PIP index URL для Plugin Daemon (plugin dependencies) и/или Sandbox (code execution):

    pluginDaemon:
      pipMirrorUrl: "<mirror-url>"   # e.g. https://mirrors.aliyun.com/pypi/simple/
    
    sandbox:
      pipMirrorUrl: "<mirror-url>"

    Для простого self-hosted PyPI proxy можно использовать devpi; затем задайте pipMirrorUrl на URL этого proxy (например, http://<host>:3141/root/pypi/+simple/).

    Marketplace (внутренняя сеть)

    Если cluster не может получить доступ к public marketplace (https://marketplace.dify.ai):

    Option 1 – Disable marketplace: Устанавливайте plugins через "Install via Local Package File" в console. См. Dify: Installing the Plugin.

    api:
      marketplace:
        enabled: false

    Option 2 – Internal marketplace proxy: Разверните reverse proxy на https://marketplace.dify.ai (upstream требует Host: marketplace.dify.ai) и задайте:

    api:
      marketplace:
        enabled: true
        url: <https://internal-marketplace.example.com>

    Доступ

    • Через Ingress: Если Ingress включен и host задан, используйте https://<host> (или настроенные urls.consoleUrl / urls.appUrl) для открытия console и app.
    • Через Service: В противном случае используйте API и Web Services (например, NodePort или LoadBalancer), опубликованные chart; убедитесь, что urls.consoleUrl и urls.appUrl соответствуют тому, как пользователи получают доступ к app, чтобы frontend загружался корректно.

    Управление пользователями

    В Dify нет пароля администратора по умолчанию. Завершите initial setup и создайте users (например, по email/password) на странице входа или регистрации после запуска application.