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

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

    Обзор

    Chart запускает следующие компоненты как отдельные рабочие нагрузки:

    • API – Backend API и бизнес-логика
    • Worker – Celery workers для асинхронных задач
    • Worker Beat – Celery beat для планируемых задач
    • Web – Frontend UI
    • Plugin Daemon – Плагин runtime
    • Sandbox – Изолированное выполнение кода
    • SSRF 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 для публикации в репозиторий платформы:

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

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

    Подготовка базы данных

    Используйте PostgreSQL 12+. Chart поддерживает только PostgreSQL. Вы можете создать кластер PostgreSQL через оператор PostgreSQL в Data Services и получить хост и учетные данные из деталей инстанса.

    Подготовка Redis

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

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

    Подготовка векторного хранилища (для RAG)

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

    Подготовка хранилища (опционально)

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

    Создание приложения

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

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

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

    1. URLsurls.consoleUrl и urls.appUrl (базовые URL для доступа через браузер, без суффикса пути; обязательны для корректного открытия приложения)
    2. База данных – PostgreSQL 12+ (хост и учетные данные через Secret)
    3. Redis – Redis 6.0+ standalone (хост и учетные данные через Secret)
    4. Векторное хранилище – pgvector (хост и учетные данные через Secret), или установите vectorStore.type: "" для отключения

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

    Создайте секреты (замените плейсхолдеры на ваши значения):

    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 (заполните ваши хосты и имена секретов):

    # Обязательно: базовые URL для консоли и приложения (без суффикса пути)
    urls:
      consoleUrl: <https://console-domain>   # или http://
      appUrl: <https://app-domain>           # или http://
    
    # Обязательно: основная база данных (PostgreSQL 12+)
    database:
      host: <postgres-host-without-port>
      secret:
        name: <dify-db-secret>
      # Опционально: включить при использовании SSL в PostgreSQL
      # ssl:
      #   enabled: true
    
    # Обязательно: Redis 6.0+ (только standalone)
    redis:
      host: <redis-host-without-port>
      secret:
        name: <dify-redis-secret>
    
    # Обязательно: векторное хранилище (pgvector; или установите vectorStore.type: "" для отключения)
    vectorStore:
      pgvector:
        host: <pgvector-host-without-port>
        secret:
          name: <dify-pgvector-secret>
    
    # Если в вашем кластере нет StorageClass по умолчанию, настройте storage.*.pvc.storageClass
    # storage:
    #   api:
    #     pvc:
    #       storageClass: <storage-class>
    #   plugin:
    #     pvc:
    #       storageClass: <storage-class>

    Опциональная конфигурация

    База данных (SSL)

    Если PostgreSQL требует SSL-соединения, включите его:

    database:
      ssl:
        enabled: true

    Векторное хранилище (отключение)

    Если не используете RAG/векторный поиск:

    vectorStore:
      type: ""

    Ingress (хост и 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>

    Хранилище (S3 и PVC)

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

    Если в вашем кластере нет 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 (объектное хранилище): Используйте S3 или совместимое с MinIO хранилище для API и/или плагина. Создайте Secret с ACCESS_KEY и SECRET_KEY (или настройте кастомные ключи в 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>   # пусто для AWS по умолчанию; MinIO например http://minio:9000
          region: <region>
          bucket: <bucket>
          addressStyle: path   # "path" для MinIO; "virtual" для AWS
          secret:
            name: <dify-s3-secret>
      plugin:
        type: s3
        s3:
          endpoint: <s3-endpoint>
          region: <region>
          bucket: <bucket>
          secret:
            name: <dify-s3-secret>

    Зеркало PIP install (прокси)

    Если кластер не имеет доступа к PyPI (например, офлайн или ограниченная сеть), задайте URL индекса PIP для Plugin Daemon (зависимости плагинов) и/или Sandbox (выполнение кода):

    pluginDaemon:
      pipMirrorUrl: "<mirror-url>"   # например https://mirrors.aliyun.com/pypi/simple/
    
    sandbox:
      pipMirrorUrl: "<mirror-url>"

    Для простого собственного PyPI прокси можно использовать devpi; затем установите pipMirrorUrl на URL этого прокси (например http://<host>:3141/root/pypi/+simple/).

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

    Если кластер не может достучаться до публичного marketplace (https://marketplace.dify.ai):

    Вариант 1 – Отключить marketplace: Устанавливайте плагины через "Install via Local Package File" в консоли. Смотрите Dify: Installing the Plugin.

    api:
      marketplace:
        enabled: false

    Вариант 2 – Внутренний прокси marketplace: Разверните обратный прокси к https://marketplace.dify.ai (upstream требует Host: marketplace.dify.ai) и установите:

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

    Доступ

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

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

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