mirror of
https://github.com/langgenius/dify-plugin-daemon.git
synced 2026-07-21 17:25:23 -04:00
Plugin installation on multi-instances #156
Closed
opened 2026-02-16 00:20:12 -05:00 by yindo
·
8 comments
No Branch/Tag Specified
main
build/fix-serverless-runtime-error-propagation
gh-pages
build/test-document2
build/test-document
build/onboarding-ui
build/slim-extract
codex/depot-builds
codex/mac-runner-benchmark
feat/storage-path-prefix
feat/multi-db-user
feat/slim-action
deploy/dev
feat/dify-cli
feat/add-e2e
build/pg-bouncer
codex/add-multimodal-rerank-and-embedding-apis
refactor/local-runtime
build/multimodal-embeddings
codex/refactor-routine.submit-label-handling
codex/refactor-service-layer-based-on-provided-plan
feat/trigger-response
feat/trigger
build/trigger
deploy/trigger-dev
codex/remove-claude-code-reviewer-from-github-ci
codex/add-manifest-check-to-upload-endpoint
feat/no-root-dockerfile
fix/json-schema
fix/blocking-anthorized-langgenius
454-bump-cli-template
build/datasource
feat/datasource
bump-cloud-kit
feat/rag-tag
fix/change-session-not-found-to-400
feat/plugin-readme
add-claude-github-actions-1756274550417
docs/comprehensive-development-documentation
chore/remove-json-schema-validation-error
71cef04
fix/missing-parameter-type
fix/sessions-log
fix/template.env
bump/go-git
build/oauth
feat/oauth-refresh-token
feat/plugin-oauth
feat/tool-oauth-cli
build/plugin-oauth
feat/readme-i18n
fix/memory-leak
feat/icon-dark
feat/default-icon
plugin_launch_concurent
feat/collect-active-requests
feat/dark-icon
feat/support-structured-llm-output
feat/dynamic-selector
fix/reduce-logs
feat/decode-plugin-package
feat/db-extras
fix/backwards-invocation-overflow
feat/length-prefixed-chunking
fix/http-request-reader-header
chore/unify-configurations
fix/hardcoded-serverless-runtime-timeout
fix/cmd
fix/signature
refactor/implement-gen-routes
fix/redis-lock
refactor/codegen
feat/add-authorized-category
chore/style
feat/run-plugin-cli
reduce/run-once
feat/reinstall-serverless-runtime
feat/support-setup-process
fix/apply-stdio-buffer-size
chore/add-warning-messages-to-installed-bucket
feat/repo
enhance/stdio
feat/make-buffer-size-configurable
fix/moderation-init
fix/only-validate-profile-on-quick-mode
feat/support-quick-init-plugins
refactor/oauth-parameters
feat/oauth
refactor/simplify-plugin-invocation
test/integration-test-for-plugins
fix/backwards-compatible-to-llm-result-chunk
feat/auto-scale
enhance/reduce-ci-tests
fix/cli-ci
enhance/removes-llm-result-prompt-messages
fix/disable-benchmark-logs
benchmark/local-runtime
chore/remove-useless-benchmark
feat/benchmark
feat/fetch-app-info
fix/windows-remap-assets
fix/skip-hidden-file
feat/stream-tool-blob-message
fix/path-travel
feat/template-add-ci
enhance/version-compare
feat/sign-apple-os-cli
feat/support-minimal-dify-version-required
refactor/stdip
feat/add-serverless-connector-launching-timeout
fix/remove-prompt_messages-from-llm-result-chunk
feat/standardize-plugin-sdk-versions
chore/update-docs-and-refine-wording
update/readme-cli
fix/infinity-environment-setup
fix/cbor-unmarshaling
fix/use-aws-iam-baseendpoint
fix/lost-query-params-in-endpoint
fix/tiktoken
cohre/update-readme
fix/redis-tests
fix/friendly-identity
fix/marshal-any-map
chore/upgrade-ants
fix/graceful-precompile
enhance/tiktoken
feat/graceful-shutdown
fix/close-serverless-response
fix/correct-cli-guide
fix/plugin-active-log
fix/remove-proxy-args-from-uv
fix/endpoint-hook-url
fix/ci-credentials
feat/disable-gevent
fix/add-gcc
fix/hardcoded-endpoint-timeout
fix/bump-cli-sdk-version
fix/deadloop-when-redis-disconnect
fix/enhence/speed-up-environment-setup
enhance/introduce-uv
fix/change-default-db
fix/deadlock
readme
chore/env.example
feat/add-action-in-url
fix/add-more-pip-args
fix/optimize-local-heartbeat
optimize/db-init
fix/optimize-internal-server-error
fix/increase-default-plugin-max-execution-timeout
fix/force-patch-older-version
enhance/increase-installing-process
LICENSE
fix/set-user-id-to-unrequired
fix/max-launching-concurrent
improve/error-handing-in-serverless
refactor/json-unmarshaler-enhancement
fix/add-pip-mirror-url
enhance/serverless-connector
0.6.5
0.6.4
0.6.3
0.6.2
0.6.1
0.6.0
0.5.9
0.5.8
0.5.7
0.5.6
0.5.5
0.5.4
0.5.3
0.5.2
0.5.1
0.5.0
0.4.1
0.4.0
0.3.3
0.3.2
0.3.1
0.3.0
0.3.0b1
0.2.0
0.1.3
0.1.2
0.1.1
0.1.0
0.0.10
0.0.9
0.0.8
0.0.7
0.0.6
0.0.5
0.0.4
0.0.3
0.0.2
0.0.1
0.0.1-beta.23
0.0.1-beta.22
0.0.1-beta.21
0.0.1-beta.20
0.0.1-beta.19
0.0.1-beta.18
0.0.1-beta.17
0.0.1-beta.16
0.0.1-beta.15
0.0.1-beta.14
0.0.1-beta.13
0.0.1-beta.12
0.0.1-beta.11
0.0.1-beta.10
0.0.1-beta.9
0.0.1-beta.8
0.0.1-beta.7
0.0.1-beta.6
0.0.1-beta.5
0.0.1-beta.4
0.0.1-beta.3
0.0.1-beta.2
0.0.1-beta.1
No Label
Milestone
No items
No Milestone
Projects
Clear projects
No project
Notifications
Due Date
No due date set.
Dependencies
No dependencies set.
Reference: langgenius/dify-plugin-daemon#156
Reference in New Issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Originally created by @plutonji on GitHub (Jul 7, 2025).
Self Checks
To make sure we get to you in time, please check the following :)
Versions
Describe the bug
I am running two instances of
daemon_pluginin the system to achieve high availability (HA), with HAProxy acting as the load balancer at the traffic entry point.However, a problem has arisen: when I install a plugin through the Dify interface, the plugin is only installed on one of the instances, and the other instance remains without it.
As a result, errors occur when requests are distributed by HAProxy to the instance where the plugin is not installed.
To Reproduce
Steps to reproduce the behavior:
Expected behavior
It should work.
Screenshots
Additional context
Add any other context about the problem here.
@homejim commented on GitHub (Jul 8, 2025):
Dify’s plugin daemon leverages Redis for state management and includes custom routing rules. When all instances share the same Redis instance, the system ensures high availability by automatically routing plugin-related requests to any instance that has the required plugin installed. This prevents errors from occurring due to missing plugins on certain nodes.
In our service, which runs multiple plugin daemon instances, we’ve observed that even during deployment — when some instances may not have completed plugin installation — the system continues to operate smoothly without raising errors.
@xiaomeixw commented on GitHub (Aug 12, 2025):
This is an issue with the official design. You need to modify the code yourself to use the forced installation mode and skip the database detection mechanism.
@xiaomeixw commented on GitHub (Aug 12, 2025):
Your response completely failed to understand the question. The user wants to implement load balancing. There are issues with your existing cluster mechanism. The user now wants to create a plugin distribution and processing mechanism. You only allow the installation of a single plugin. How is the user supposed to proceed?
@plutonji commented on GitHub (Aug 12, 2025):
Thanks
@LeoLiuYan commented on GitHub (Aug 26, 2025):
Hi, when using the forced installation mode, will this cause traffic to be routed to nodes without the plugin installed?
BTW, how to use the forced installation mode?
@xiaomeixw @plutonji
@xiaomeixw commented on GitHub (Aug 26, 2025):
@LeoLiuYan
Forced installation requires adjustments to the plugin's install-related api. Since multiple plugin servers in a cluster share the same database state, the official code will block the installation of plugins on other plugin servers in the cluster. Therefore, it is necessary to skip these database checks and implement forced installation.
@fatelei commented on GitHub (Jan 10, 2026):
Installing sync dependencies relies on the object-storage adapter layer (installedBucket/packageBucket), which can point to S3/MinIO/Azure Blob/GCS or any other remote store.
Multi-machine setups work perfectly as long as every node is configured to use the same bucket/prefix.
Each node’s local working directory (PluginWorkingPath) is used to unpack and build the runtime environment (.venv); it is strongly recommended that every node use its own local disk instead of a shared one. This prevents concurrency collisions; if you must share, add distributed locking.
Multi-node HA checklist
Both instances use the same remote object store:
– PLUGIN_STORAGE_TYPE set to s3/minio/azure/gcs (never “local”)
– Identical bucket, endpoint and credentials
– PLUGIN_INSTALLED_PATH and PLUGIN_PACKAGE_CACHE_PATH identical (same prefix)
PLATFORM=local; WatchDog scans the installedBucket once at start-up and then every 30 s on every node.
PluginWorkingPath must be node-local; if shared, enable distributed locking to serialize environment initialization for the same plugin.
Minimal example (two instances sharing one MinIO/S3 bucket) – environment variables must be identical on both sides.
@plutonji commented on GitHub (Jan 12, 2026):
@fatelei Thank you for your reply. Although our offline server intranet does not have an object storage service, we do have a NAS server that can provide NFS Server v3. Therefore, I tried setting PLUGIN_STORAGE_LOCAL_ROOT to the shared NFS directory, while keeping PLUGIN_WORKING_PATH as the local directory /app/storage/cwd. Sure enough, the error no longer occurred!
Thank you again for the information you provided!