Dify is an open-source LLM app development platform.
10K+
[Import!] If you want deploy dify on k8s cluster, you can use this document.
Dify is an LLM application development platform that has already facilitated the creation of over 100,000 applications using Dify.AI. It combines the principles of Backend as a Service and LLMOps, encompassing the essential technology stack needed for developing AI-native applications, incorporating a built-in RAG engine. With Dify, you can independently deploy functionalities akin to Assistants API and GPTs based on any LLMs.

api & worker use this same image, just use the MODE environment to distinguish
The new version is a major upgrade, so please be cautious if you plan to update. It removes the old model configuration mode and replaces it with a plugin-based strategy. This change will require significant adjustments to the knowledge base and all orchestration nodes, especially those using vector models, reasoning models, and ranking models.
A new plugin service has been introduced to manage local plugin installations. Plugins are now responsible for extending capabilities like models, agents, and tools. All default model settings from previous versions have been removed, so you’ll need to install the required plugins yourself before use.
Additionally, the new version supports the popular MCP protocol, a key technology in the large model ecosystem.
The environment in a Kubernetes YAML file looks like this.:
env:
- name: SECRET_KEY
value: "MFnQ128032819024170983219038YYp5A"
- name: CONSOLE_API_URL
value: "https://dify-api.xxx.yyy"
- name: CONSOLE_WEB_URL
value: "https://dify-web.xxx.yyy"
- name: SERVICE_API_URL
value: "https://dify-api.xxx.yyy"
- name: APP_WEB_URL
value: "https://dify-web.xxx.yyy"
- name: CELERY_BROKER_URL
value: "redis://:[password]@[redis_host]:6379/1"
- name: REDIS_HOST
value: "redis"
- name: REDIS_PORT
value: 6379
- name: REDIS_PASSWORD
value: ""
- name: DB_USERNAME
value: ""
- name: DB_PASSWORD
value: ""
- name: DB_HOST
value: ""
- name: DB_PORT
value: 5432
- name: DB_DATABASE
value: "dify"
- name: STORAGE_TYPE
value: "aliyun-oss"
- name: ALIYUN_OSS_ENDPOINT
value: ""
- name: ALIYUN_OSS_PATH
value: ""
- name: ALIYUN_OSS_BUCKET_NAME
value: ""
- name: ALIYUN_OSS_ACCESS_KEY
value: ""
- name: ALIYUN_OSS_SECRET_KEY
value: ""
- name: VECTOR_STORE
value: "milvus"
- name: MILVUS_HOST
value: "my-release-milvus"
- name: MILVUS_PORT
value: 19530
- name: MILVUS_USER
value: "root"
- name: MILVUS_PASSWORD
value: ""
- name: MILVUS_SECURE
value: false
- name:
- name: WEB_API_CORS_ALLOW_ORIGINS
value: "*"
- name: CONSOLE_CORS_ALLOW_ORIGINS
value: "*"
- name: MAIL_TYPE
value: "resend"
- name: MAIL_DEFAULT_SEND_FROM
value: ""
- name: RESEND_API_KEY
value: ""
- name: CODE_EXECUTION_ENDPOINT
value: http://sandbox:8194
- name: CODE_EXECUTION_API_KEY
value: "xYaiVMrBUtVppEv6N7cW"
- name: CODE_MAX_NUMBER
value: 9223372036854775807
- name: CODE_MIN_NUMBER
value: -9223372036854775808
- name: CODE_MAX_DEPTH
value: 5
- name: CODE_MAX_PRECISION
value: 20
- name: CODE_MAX_STRING_LENGTH
value: 80000
- name: TEMPLATE_TRANSFORM_MAX_LENGTH
value: 80000
- name: CODE_MAX_STRING_ARRAY_LENGTH
value: 30
- name: CODE_MAX_OBJECT_ARRAY_LENGTH
value: 30
- name: CODE_MAX_NUMBER_ARRAY_LENGTH
value: 1000
- name: TEMPLATE_TRANSFORM_MAX_LENGTH
value: 80000
- name: PLUGIN_REMOTE_INSTALL_HOST
value: "dify-plugin-daemon"
- name: PLUGIN_REMOTE_INSTALL_PORT
value: 5003
- name: PLUGIN_MAX_PACKAGE_SIZE
value: 52428800
- name: INNER_API_KEY_FOR_PLUGIN
value: "MFnQ128032819024170983219038YYp5A"
- name: PLUGIN_DAEMON_KEY
value: "6ovaezWAjpCjf+Sjc3ZtU+qUEi"
- name: PLUGIN_DAEMON_URL
value: "http://dify-plugin-daemon:5002"
SECRET_KEY - is A secret key that is used for securely signing the session cookie and encrypting sensitive information on the database. You can generate a strong key using openssl rand -base64 42.
CELERY_BROKER_URL - Use redis as the broker, and redis db 1 for celery broker. example - redis://:difyai123456@redis:6379/1
[DB example] -
[Milvus example] -
MILVUS_SECURE - must be set false if your milvus don't need password (Important!)
MAIL_TYPE - support resend or smtp, resend link is https://www.resend.com/, An online email server.
STORAGE_TYPE - aliyun-oss, fill these fields ALIYUN_OSS_ENDPOINT/ALIYUN_OSS_BUCKET_NAME/ALIYUN_OSS_ACCESS_KEY/ALIYUN_OSS_SECRET_KEY
ALIYUN_OSS_PATH - version >= 0.8.2, must be set, this is the root path.
CODE_EXECUTION_ENDPOINT - code execute sandbox, if it's empty, custom code execute node will fail.
CODE_EXECUTION_API_KEY - If CODE_EXECUTION_ENDPOINT is not empty, CODE_EXECUTION_API_KEY must be set the same as the dify-sandbox image's running configuration.
PLUGIN_REMOTE_INSTALL_HOST - The host of the plugin installation service. This is the host where the plugin installation service is running.
PLUGIN_REMOTE_INSTALL_PORT - The port of the plugin installation service. This is the port where the plugin installation service is running.
PLUGIN_MAX_PACKAGE_SIZE - The maximum size of the plugin package that can be installed. This is the maximum size of the plugin package that can be installed in bytes.
INNER_API_KEY_FOR_PLUGIN - The API key used for authentication when installing plugins. The key from plugin daemon's envrionment variable SERVER_KEY in k8s yaml.
PLUGIN_DAEMON_KEY - The key used for authentication when communicating with the plugin daemon. This is the key used for authentication when communicating with the plugin daemon.
PLUGIN_DAEMON_URL - The URL of the plugin daemon. This is the URL of the plugin daemon that is used for communication with the plugin installation service, you can use the internal Kubernetes domain of plugin daemon server.
The environment in a Kubernetes YAML file looks like this.:
env:
- name: SECRET_KEY
value: "MFnQ128032819024170983219038YYp5A"
- name: CONSOLE_API_URL
value: "https://dify-api.xxx.yyy"
- name: CONSOLE_WEB_URL
value: "https://dify-web.xxx.yyy"
- name: SERVICE_API_URL
value: "https://dify-api.xxx.yyy"
- name: APP_WEB_URL
value: "https://dify-web.xxx.yyy"
- name: CELERY_BROKER_URL
value: "redis://:[password]@[redis_host]:6379/1"
- name: REDIS_HOST
value: "redis"
- name: REDIS_PORT
value: 6379
- name: REDIS_PASSWORD
value: ""
- name: DB_USERNAME
value: ""
- name: DB_PASSWORD
value: ""
- name: DB_HOST
value: ""
- name: DB_PORT
value: 5432
- name: DB_DATABASE
value: "dify"
- name: STORAGE_TYPE
value: "aliyun-oss"
- name: ALIYUN_OSS_ENDPOINT
value: ""
- name: ALIYUN_OSS_PATH
value: ""
- name: ALIYUN_OSS_BUCKET_NAME
value: ""
- name: ALIYUN_OSS_ACCESS_KEY
value: ""
- name: ALIYUN_OSS_SECRET_KEY
value: ""
- name: VECTOR_STORE
value: "milvus"
- name: MILVUS_HOST
value: "my-release-milvus"
- name: MILVUS_PORT
value: 19530
- name: MILVUS_USER
value: "root"
- name: MILVUS_PASSWORD
value: ""
- name: MILVUS_SECURE
value: false
- name:
- name: WEB_API_CORS_ALLOW_ORIGINS
value: "*"
- name: CONSOLE_CORS_ALLOW_ORIGINS
value: "*"
- name: MAIL_TYPE
value: "resend"
- name: MAIL_DEFAULT_SEND_FROM
value: ""
- name: RESEND_API_KEY
value: ""
- name: MODE
value: "worker"
- name: LOG_LEVEL
value: "INFO"
- name: CODE_EXECUTION_ENDPOINT
value: http://sandbox:8194
- name: CODE_EXECUTION_API_KEY
value: "xYaiVMrBUtVppEv6N7cW"
- name: CODE_MAX_NUMBER
value: 9223372036854775807
- name: CODE_MIN_NUMBER
value: -9223372036854775808
- name: CODE_MAX_DEPTH
value: 5
- name: CODE_MAX_PRECISION
value: 20
- name: CODE_MAX_STRING_LENGTH
value: 80000
- name: TEMPLATE_TRANSFORM_MAX_LENGTH
value: 80000
- name: CODE_MAX_STRING_ARRAY_LENGTH
value: 30
- name: CODE_MAX_OBJECT_ARRAY_LENGTH
value: 30
- name: CODE_MAX_NUMBER_ARRAY_LENGTH
value: 1000
- name: TEMPLATE_TRANSFORM_MAX_LENGTH
value: 80000000
- name: INNER_API_KEY_FOR_PLUGIN
value: "MFnQ128032819024170983219038YYp5A"
use this image to run plugin-daemon offical download link.
Recommend to use the latest version of plugin-daemon image.
The version <= 0.0.6-local works fine during testing.
For local deployment, use the version with the "local" suffix.
The environment in a Kubernetes YAML file looks like this.:
volumeMounts:
- name: dify-plugin-data
mountPath: /app/storage
env:
- name: SERVER_PORT
value: 5002
- name: SERVER_KEY
value: "6ovaezWAjpCjf+Sjc3ZtU+qUEi"
- name: GIN_MODE
value: "release"
- name: PLATFORM
value: "local"
- name: DIFY_INNER_API_KEY
value: "MFnQ128032819024170983219038YYp5A"
- name: DIFY_INNER_API_URL
value: "http://dify-api:5001"
- name: PLUGIN_REMOTE_INSTALLING_ENABLED
value: true
- name: PLUGIN_REMOTE_INSTALLING_HOST
value: "0.0.0.0"
- name: PLUGIN_REMOTE_INSTALLING_PORT
value: "5003"
- name: PLUGIN_STORAGE_TYPE
value: "local"
- name: PLUGIN_STORAGE_OSS_BUCKET
value: ""
- name: PLUGIN_STORAGE_LOCAL_ROOT
value: "/app/storage"
- name: PLUGIN_INSTALLED_PATH
value: "/app/storage/plugin"
- name: PLUGIN_WORKING_PATH
value: "/app/storage/cwd"
- name: PERSISTENCE_STORAGE_PATH
value: "/app/storage/persistence"
- name: PERSISTENCE_STORAGE_MAX_SIZE
value: 104857600
- name: PLUGIN_WEBHOOK_ENABLED
value: true
- name: ROUTINE_POOL_SIZE
value: 1024
- name: REDIS_HOST
value: "redis"
- name: REDIS_PORT
value: 6379
- name: REDIS_PASSWORD
value: "xxxx"
- name: DB_USERNAME
value: "dify"
- name: DB_PASSWORD
value: "xxx"
- name: DB_HOST
value: "xxxxxxx"
- name: DB_PORT
value: 5432
- name: DB_DATABASE
value: "dify"
- name: DIFY_INVOCATION_CONNECTION_IDLE_TIMEOUT
value: 120
- name: MAX_PLUGIN_PACKAGE_SIZE
value: 52428800
- name: PYTHON_ENV_INIT_TIMEOUT
value: 120
- name: PPROF_ENABLED
value: false
- name: FORCE_VERIFYING_SIGNATURE
value: true
The environment in a Kubernetes YAML file looks like this.:
env:
- name: SECRET_KEY
value: "MFnQ128032819024170983219038YYp5A"
- name: CONSOLE_API_URL
value: "https://dify-api.xxx.yyy"
- name: CONSOLE_WEB_URL
value: "https://dify-web.xxx.yyy"
- name: SERVICE_API_URL
value: "https://dify-api.xxx.yyy"
- name: APP_WEB_URL
value: "https://dify-web.xxx.yyy"
- name: CELERY_BROKER_URL
value: "redis://:[password]@[redis_host]:6379/1"
- name: REDIS_HOST
value: "redis"
- name: REDIS_PORT
value: 6379
- name: REDIS_PASSWORD
value: ""
- name: DB_USERNAME
value: ""
- name: DB_PASSWORD
value: ""
- name: DB_HOST
value: ""
- name: DB_PORT
value: 5432
- name: DB_DATABASE
value: "dify"
- name: STORAGE_TYPE
value: "aliyun-oss"
- name: ALIYUN_OSS_ENDPOINT
value: ""
- name: ALIYUN_OSS_PATH
value: ""
- name: ALIYUN_OSS_BUCKET_NAME
value: ""
- name: ALIYUN_OSS_ACCESS_KEY
value: ""
- name: ALIYUN_OSS_SECRET_KEY
value: ""
- name: VECTOR_STORE
value: "milvus"
- name: MILVUS_HOST
value: "my-release-milvus"
- name: MILVUS_PORT
value: 19530
- name: MILVUS_USER
value: "root"
- name: MILVUS_PASSWORD
value: ""
- name: MILVUS_SECURE
value: false
- name:
- name: WEB_API_CORS_ALLOW_ORIGINS
value: "*"
- name: CONSOLE_CORS_ALLOW_ORIGINS
value: "*"
- name: MAIL_TYPE
value: "resend"
- name: MAIL_DEFAULT_SEND_FROM
value: ""
- name: RESEND_API_KEY
value: ""
- name: CODE_EXECUTION_ENDPOINT
value: http://sandbox:8194
- name: CODE_EXECUTION_API_KEY
value: "xYaiVMrBUtVppEv6N7cW"
- name: CODE_MAX_NUMBER
value: 9223372036854775807
- name: CODE_MIN_NUMBER
value: -9223372036854775808
- name: CODE_MAX_DEPTH
value: 5
- name: CODE_MAX_PRECISION
value: 20
- name: CODE_MAX_STRING_LENGTH
value: 80000
- name: TEMPLATE_TRANSFORM_MAX_LENGTH
value: 80000
- name: CODE_MAX_STRING_ARRAY_LENGTH
value: 30
- name: CODE_MAX_OBJECT_ARRAY_LENGTH
value: 30
- name: CODE_MAX_NUMBER_ARRAY_LENGTH
value: 1000
SECRET_KEY - is A secret key that is used for securely signing the session cookie and encrypting sensitive information on the database. You can generate a strong key using openssl rand -base64 42.
CELERY_BROKER_URL - Use redis as the broker, and redis db 1 for celery broker. example - redis://:difyai123456@redis:6379/1
[DB example] -
[Milvus example] -
MILVUS_SECURE - must be set false if your milvus don't need password (Important!)
MAIL_TYPE - support resend or smtp, resend link is https://www.resend.com/, An online email server.
STORAGE_TYPE - aliyun-oss, fill these fields ALIYUN_OSS_ENDPOINT/ALIYUN_OSS_BUCKET_NAME/ALIYUN_OSS_ACCESS_KEY/ALIYUN_OSS_SECRET_KEY
ALIYUN_OSS_PATH - version >= 0.8.2, must be set, this is the root path.
CODE_EXECUTION_ENDPOINT - code execute sandbox, if it's empty, custom code execute node will fail.
CODE_EXECUTION_API_KEY - If CODE_EXECUTION_ENDPOINT is not empty, CODE_EXECUTION_API_KEY must be set the same as the dify-sandbox image's running configuration.
The environment in a Kubernetes YAML file looks like this.:
env:
- name: SECRET_KEY
value: "MFnQ128032819024170983219038YYp5A"
- name: CONSOLE_API_URL
value: "https://dify-api.xxx.yyy"
- name: CONSOLE_WEB_URL
value: "https://dify-web.xxx.yyy"
- name: SERVICE_API_URL
value: "https://dify-api.xxx.yyy"
- name: APP_WEB_URL
value: "https://dify-web.xxx.yyy"
- name: CELERY_BROKER_URL
value: "redis://:[password]@[redis_host]:6379/1"
- name: REDIS_HOST
value: "redis"
- name: REDIS_PORT
value: 6379
- name: REDIS_PASSWORD
value: ""
- name: DB_USERNAME
value: ""
- name: DB_PASSWORD
value: ""
- name: DB_HOST
value: ""
- name: DB_PORT
value: 5432
- name: DB_DATABASE
value: "dify"
- name: STORAGE_TYPE
value: "aliyun-oss"
- name: ALIYUN_OSS_ENDPOINT
value: ""
- name: ALIYUN_OSS_PATH
value: ""
- name: ALIYUN_OSS_BUCKET_NAME
value: ""
- name: ALIYUN_OSS_ACCESS_KEY
value: ""
- name: ALIYUN_OSS_SECRET_KEY
value: ""
- name: VECTOR_STORE
value: "milvus"
- name: MILVUS_HOST
value: "my-release-milvus"
- name: MILVUS_PORT
value: 19530
- name: MILVUS_USER
value: "root"
- name: MILVUS_PASSWORD
value: ""
- name: MILVUS_SECURE
value: false
- name:
- name: WEB_API_CORS_ALLOW_ORIGINS
value: "*"
- name: CONSOLE_CORS_ALLOW_ORIGINS
value: "*"
- name: MAIL_TYPE
value: "resend"
- name: MAIL_DEFAULT_SEND_FROM
value: ""
- name: RESEND_API_KEY
value: ""
- name: MODE
value: "worker"
- name: LOG_LEVEL
value: "INFO"
- name: CODE_EXECUTION_ENDPOINT
value: http://sandbox:8194
- name: CODE_EXECUTION_API_KEY
value: "xYaiVMrBUtVppEv6N7cW"
- name: CODE_MAX_NUMBER
value: 9223372036854775807
- name: CODE_MIN_NUMBER
value: -9223372036854775808
- name: CODE_MAX_DEPTH
value: 5
- name: CODE_MAX_PRECISION
value: 20
- name: CODE_MAX_STRING_LENGTH
value: 80000
- name: TEMPLATE_TRANSFORM_MAX_LENGTH
value: 80000
- name: CODE_MAX_STRING_ARRAY_LENGTH
value: 30
- name: CODE_MAX_OBJECT_ARRAY_LENGTH
value: 30
- name: CODE_MAX_NUMBER_ARRAY_LENGTH
value: 1000
API port: 5001
worker port: 8194
when you upgrade dify, you need to run this command in dify-api pod
flask db upgrade
when you upgrade the image version in [0.7.2, 0.8.0], the worker will fail, because of an issue in entrypoint.sh.
upgrade 0.8.0-a version to fix this bug!
https://github.com/langgenius/dify/issues/7698
Usage: celery worker [OPTIONS]
Try 'celery worker --help' for help.
Error: Invalid value for '-l' / '--loglevel': '-Q' is not one of 'DEBUG', 'INFO', 'WARNING', 'ERROR', 'CRITICAL', 'FATAL'.
change this content in entrypoint.sh
exec celery -A app.celery worker -P ${CELERY_WORKER_CLASS:-gevent} $CONCURRENCY_OPTION --loglevel ${LOG_LEVEL} \
-Q ${CELERY_QUEUES:-dataset,generation,mail,ops_trace,app_deletion}
exec celery -A app.celery worker -P ${CELERY_WORKER_CLASS:-gevent} $CONCURRENCY_OPTION -Q ${CELERY_QUEUES:-dataset,generation,mail,ops_trace,app_deletion} --loglevel ${LOG_LEVEL}
Content type
Image
Digest
sha256:9d52f0f1e…
Size
840.8 MB
Last updated
6 months ago
docker pull henrybit/dify-api