
henrybit/dify-api[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.
!Alt
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.:
k8senv: - name: SECRET_KEY value: "MFnQ128032819024170983219038YYp5A" - name: CONSOLE_API_URL value: "[***]" - name: CONSOLE_WEB_URL value: "[***]" - name: SERVICE_API_URL value: "[***]" - name: APP_WEB_URL value: "[***]" - 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: *** - 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: [***] - 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: "[***]"
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://:difyai***@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 [***] 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.:
k8senv: - name: SECRET_KEY value: "MFnQ128032819024170983219038YYp5A" - name: CONSOLE_API_URL value: "[***]" - name: CONSOLE_WEB_URL value: "[***]" - name: SERVICE_API_URL value: "[***]" - name: APP_WEB_URL value: "[***]" - 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: *** - 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: [***] - 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.:
k8svolumeMounts: - name: dify-plugin-data mountPath: /app/storage
k8senv: - 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: "[***]" - 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: *** - 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.:
k8senv: - name: SECRET_KEY value: "MFnQ128032819024170983219038YYp5A" - name: CONSOLE_API_URL value: "[***]" - name: CONSOLE_WEB_URL value: "[***]" - name: SERVICE_API_URL value: "[***]" - name: APP_WEB_URL value: "[***]" - 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: *** - 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: [***] - 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://:difyai***@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 [***] 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.:
k8senv: - name: SECRET_KEY value: "MFnQ128032819024170983219038YYp5A" - name: CONSOLE_API_URL value: "[***]" - name: CONSOLE_WEB_URL value: "[***]" - name: SERVICE_API_URL value: "[***]" - name: APP_WEB_URL value: "[***]" - 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: *** - 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: [***] - 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
shellflask 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!
[***]
errorUsage: 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
oldexec 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}
newexec 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}






manifest unknown 错误
TLS 证书验证失败
DNS 解析超时
410 错误:版本过低
402 错误:流量耗尽
身份认证失败错误
429 限流错误
凭证保存错误
来自真实用户的反馈,见证轩辕镜像的优质服务