From 29150e1effa16e48ae36bd5ef424fe6d4f25e522 Mon Sep 17 00:00:00 2001 From: QYG2297248353 Date: Wed, 19 Mar 2025 03:30:28 +0000 Subject: [PATCH] Processed apps directory via GitHub Actions --- appstore/dify/1.0.0/.env | 30 - appstore/dify/1.0.0/conf/certbot/README.md | 76 - .../1.0.0/conf/certbot/docker-entrypoint.sh | 30 - .../conf/certbot/update-cert.template.txt | 19 - .../1.0.0/conf/couchbase-server/Dockerfile | 4 - .../conf/couchbase-server/init-cbserver.sh | 44 - .../conf/elasticsearch/docker-entrypoint.sh | 25 - .../conf/nginx/conf.d/default.conf.template | 48 - .../1.0.0/conf/nginx/docker-entrypoint.sh | 39 - .../dify/1.0.0/conf/nginx/https.conf.template | 9 - .../dify/1.0.0/conf/nginx/nginx.conf.template | 34 - .../dify/1.0.0/conf/nginx/proxy.conf.template | 11 - appstore/dify/1.0.0/conf/nginx/ssl/.gitkeep | 0 .../conf/ssrf_proxy/docker-entrypoint.sh | 42 - .../1.0.0/conf/ssrf_proxy/squid.conf.template | 51 - .../dify/1.0.0/conf/startupscripts/init.sh | 13 - .../conf/startupscripts/init_user.script | 10 - appstore/dify/1.0.0/conf/tidb/config/pd.toml | 4 - .../conf/tidb/config/tiflash-learner.toml | 13 - .../dify/1.0.0/conf/tidb/config/tiflash.toml | 19 - .../dify/1.0.0/conf/tidb/docker-compose.yaml | 62 - .../config/users.d/custom_users_config.xml | 17 - .../volumes/oceanbase/init.d/vec_memory.sql | 1 - .../opensearch/opensearch_dashboards.yml | 222 -- .../conf/volumes/sandbox/conf/config.yaml | 14 - .../volumes/sandbox/conf/config.yaml.example | 35 - .../dependencies/python-requirements.txt | 0 appstore/dify/1.0.0/data.yml | 82 - appstore/dify/1.0.0/docker-compose.yml | 2192 ----------------- appstore/dify/1.0.0/envs/default.env | 2 - appstore/dify/1.0.0/envs/dify.env | 965 -------- appstore/dify/1.0.0/envs/global.env | 2 - appstore/dify/1.0.0/scripts/init.sh | 36 - appstore/dify/1.0.0/scripts/uninstall.sh | 10 - appstore/dify/1.0.0/scripts/upgrade.sh | 47 - appstore/dify/README.md | 121 - appstore/dify/data.yml | 14 - appstore/dify/logo.png | Bin 42235 -> 0 bytes appstore/mastodon/4.3.6/.env | 72 - appstore/mastodon/4.3.6/data.yml | 194 -- appstore/mastodon/4.3.6/docker-compose.yml | 53 - appstore/mastodon/4.3.6/envs/default.env | 2 - appstore/mastodon/4.3.6/envs/global.env | 2 - appstore/mastodon/4.3.6/envs/mastodon.env | 109 - appstore/mastodon/4.3.6/scripts/init.sh | 21 - appstore/mastodon/4.3.6/scripts/uninstall.sh | 10 - appstore/mastodon/4.3.6/scripts/upgrade.sh | 21 - appstore/mastodon/README.md | 66 - appstore/mastodon/data.yml | 14 - appstore/mastodon/logo.png | Bin 41324 -> 0 bytes dockge/dify/.env | 30 - dockge/dify/conf/certbot/README.md | 76 - dockge/dify/conf/certbot/docker-entrypoint.sh | 30 - .../conf/certbot/update-cert.template.txt | 19 - dockge/dify/conf/couchbase-server/Dockerfile | 4 - .../conf/couchbase-server/init-cbserver.sh | 44 - .../conf/elasticsearch/docker-entrypoint.sh | 25 - .../conf/nginx/conf.d/default.conf.template | 48 - dockge/dify/conf/nginx/docker-entrypoint.sh | 39 - dockge/dify/conf/nginx/https.conf.template | 9 - dockge/dify/conf/nginx/nginx.conf.template | 34 - dockge/dify/conf/nginx/proxy.conf.template | 11 - dockge/dify/conf/nginx/ssl/.gitkeep | 0 .../dify/conf/ssrf_proxy/docker-entrypoint.sh | 42 - .../dify/conf/ssrf_proxy/squid.conf.template | 51 - dockge/dify/conf/startupscripts/init.sh | 13 - .../dify/conf/startupscripts/init_user.script | 10 - dockge/dify/conf/tidb/config/pd.toml | 4 - .../conf/tidb/config/tiflash-learner.toml | 13 - dockge/dify/conf/tidb/config/tiflash.toml | 19 - dockge/dify/conf/tidb/docker-compose.yaml | 62 - .../config/users.d/custom_users_config.xml | 17 - .../volumes/oceanbase/init.d/vec_memory.sql | 1 - .../opensearch/opensearch_dashboards.yml | 222 -- .../conf/volumes/sandbox/conf/config.yaml | 14 - .../volumes/sandbox/conf/config.yaml.example | 35 - .../dependencies/python-requirements.txt | 0 dockge/dify/docker-compose.yml | 2192 ----------------- dockge/dify/envs/default.env | 2 - dockge/dify/envs/dify.env | 965 -------- dockge/dify/envs/global.env | 2 - dockge/mastodon/.env | 72 - dockge/mastodon/docker-compose.yml | 53 - dockge/mastodon/envs/default.env | 2 - dockge/mastodon/envs/global.env | 2 - dockge/mastodon/envs/mastodon.env | 109 - 86 files changed, 9178 deletions(-) delete mode 100644 appstore/dify/1.0.0/.env delete mode 100644 appstore/dify/1.0.0/conf/certbot/README.md delete mode 100644 appstore/dify/1.0.0/conf/certbot/docker-entrypoint.sh delete mode 100644 appstore/dify/1.0.0/conf/certbot/update-cert.template.txt delete mode 100644 appstore/dify/1.0.0/conf/couchbase-server/Dockerfile delete mode 100644 appstore/dify/1.0.0/conf/couchbase-server/init-cbserver.sh delete mode 100644 appstore/dify/1.0.0/conf/elasticsearch/docker-entrypoint.sh delete mode 100644 appstore/dify/1.0.0/conf/nginx/conf.d/default.conf.template delete mode 100644 appstore/dify/1.0.0/conf/nginx/docker-entrypoint.sh delete mode 100644 appstore/dify/1.0.0/conf/nginx/https.conf.template delete mode 100644 appstore/dify/1.0.0/conf/nginx/nginx.conf.template delete mode 100644 appstore/dify/1.0.0/conf/nginx/proxy.conf.template delete mode 100644 appstore/dify/1.0.0/conf/nginx/ssl/.gitkeep delete mode 100644 appstore/dify/1.0.0/conf/ssrf_proxy/docker-entrypoint.sh delete mode 100644 appstore/dify/1.0.0/conf/ssrf_proxy/squid.conf.template delete mode 100644 appstore/dify/1.0.0/conf/startupscripts/init.sh delete mode 100644 appstore/dify/1.0.0/conf/startupscripts/init_user.script delete mode 100644 appstore/dify/1.0.0/conf/tidb/config/pd.toml delete mode 100644 appstore/dify/1.0.0/conf/tidb/config/tiflash-learner.toml delete mode 100644 appstore/dify/1.0.0/conf/tidb/config/tiflash.toml delete mode 100644 appstore/dify/1.0.0/conf/tidb/docker-compose.yaml delete mode 100644 appstore/dify/1.0.0/conf/volumes/myscale/config/users.d/custom_users_config.xml delete mode 100644 appstore/dify/1.0.0/conf/volumes/oceanbase/init.d/vec_memory.sql delete mode 100644 appstore/dify/1.0.0/conf/volumes/opensearch/opensearch_dashboards.yml delete mode 100644 appstore/dify/1.0.0/conf/volumes/sandbox/conf/config.yaml delete mode 100644 appstore/dify/1.0.0/conf/volumes/sandbox/conf/config.yaml.example delete mode 100644 appstore/dify/1.0.0/conf/volumes/sandbox/dependencies/python-requirements.txt delete mode 100644 appstore/dify/1.0.0/data.yml delete mode 100644 appstore/dify/1.0.0/docker-compose.yml delete mode 100644 appstore/dify/1.0.0/envs/default.env delete mode 100644 appstore/dify/1.0.0/envs/dify.env delete mode 100644 appstore/dify/1.0.0/envs/global.env delete mode 100644 appstore/dify/1.0.0/scripts/init.sh delete mode 100644 appstore/dify/1.0.0/scripts/uninstall.sh delete mode 100644 appstore/dify/1.0.0/scripts/upgrade.sh delete mode 100644 appstore/dify/README.md delete mode 100644 appstore/dify/data.yml delete mode 100644 appstore/dify/logo.png delete mode 100644 appstore/mastodon/4.3.6/.env delete mode 100644 appstore/mastodon/4.3.6/data.yml delete mode 100644 appstore/mastodon/4.3.6/docker-compose.yml delete mode 100644 appstore/mastodon/4.3.6/envs/default.env delete mode 100644 appstore/mastodon/4.3.6/envs/global.env delete mode 100644 appstore/mastodon/4.3.6/envs/mastodon.env delete mode 100644 appstore/mastodon/4.3.6/scripts/init.sh delete mode 100644 appstore/mastodon/4.3.6/scripts/uninstall.sh delete mode 100644 appstore/mastodon/4.3.6/scripts/upgrade.sh delete mode 100644 appstore/mastodon/README.md delete mode 100644 appstore/mastodon/data.yml delete mode 100644 appstore/mastodon/logo.png delete mode 100644 dockge/dify/.env delete mode 100644 dockge/dify/conf/certbot/README.md delete mode 100644 dockge/dify/conf/certbot/docker-entrypoint.sh delete mode 100644 dockge/dify/conf/certbot/update-cert.template.txt delete mode 100644 dockge/dify/conf/couchbase-server/Dockerfile delete mode 100644 dockge/dify/conf/couchbase-server/init-cbserver.sh delete mode 100644 dockge/dify/conf/elasticsearch/docker-entrypoint.sh delete mode 100644 dockge/dify/conf/nginx/conf.d/default.conf.template delete mode 100644 dockge/dify/conf/nginx/docker-entrypoint.sh delete mode 100644 dockge/dify/conf/nginx/https.conf.template delete mode 100644 dockge/dify/conf/nginx/nginx.conf.template delete mode 100644 dockge/dify/conf/nginx/proxy.conf.template delete mode 100644 dockge/dify/conf/nginx/ssl/.gitkeep delete mode 100644 dockge/dify/conf/ssrf_proxy/docker-entrypoint.sh delete mode 100644 dockge/dify/conf/ssrf_proxy/squid.conf.template delete mode 100644 dockge/dify/conf/startupscripts/init.sh delete mode 100644 dockge/dify/conf/startupscripts/init_user.script delete mode 100644 dockge/dify/conf/tidb/config/pd.toml delete mode 100644 dockge/dify/conf/tidb/config/tiflash-learner.toml delete mode 100644 dockge/dify/conf/tidb/config/tiflash.toml delete mode 100644 dockge/dify/conf/tidb/docker-compose.yaml delete mode 100644 dockge/dify/conf/volumes/myscale/config/users.d/custom_users_config.xml delete mode 100644 dockge/dify/conf/volumes/oceanbase/init.d/vec_memory.sql delete mode 100644 dockge/dify/conf/volumes/opensearch/opensearch_dashboards.yml delete mode 100644 dockge/dify/conf/volumes/sandbox/conf/config.yaml delete mode 100644 dockge/dify/conf/volumes/sandbox/conf/config.yaml.example delete mode 100644 dockge/dify/conf/volumes/sandbox/dependencies/python-requirements.txt delete mode 100644 dockge/dify/docker-compose.yml delete mode 100644 dockge/dify/envs/default.env delete mode 100644 dockge/dify/envs/dify.env delete mode 100644 dockge/dify/envs/global.env delete mode 100644 dockge/mastodon/.env delete mode 100644 dockge/mastodon/docker-compose.yml delete mode 100644 dockge/mastodon/envs/default.env delete mode 100644 dockge/mastodon/envs/global.env delete mode 100644 dockge/mastodon/envs/mastodon.env diff --git a/appstore/dify/1.0.0/.env b/appstore/dify/1.0.0/.env deleted file mode 100644 index 6e536463a..000000000 --- a/appstore/dify/1.0.0/.env +++ /dev/null @@ -1,30 +0,0 @@ -# 数据持久化路径 [必填] -DIFY_ROOT_PATH=/home/dify - -# WebUI 端口 [必填] -PANEL_APP_PORT_HTTP=8080 - -# WebUI SSL 端口 [必填] -PANEL_APP_PORT_HTTPS=8443 - -# 数据库端口 [必填] -EXPOSE_DB_PORT=5432 - -# 插件调试端口 [必填] -EXPOSE_PLUGIN_DEBUGGING_PORT=5003 - -# Milvus 接口端口 [必填] -MILVUS_STANDALONE_API_PORT=19530 - -# Milvus 服务端口 [必填] -MILVUS_STANDALONE_SERVER_PORT=9091 - -# MyScale 端口 [必填] -MYSCALE_PORT=8123 - -# Elasticsearch 端口 [必填] -ELASTICSEARCH_PORT=9200 - -# Kibana 端口 [必填] -KIBANA_PORT=5601 - diff --git a/appstore/dify/1.0.0/conf/certbot/README.md b/appstore/dify/1.0.0/conf/certbot/README.md deleted file mode 100644 index 21be34b33..000000000 --- a/appstore/dify/1.0.0/conf/certbot/README.md +++ /dev/null @@ -1,76 +0,0 @@ -# Launching new servers with SSL certificates - -## Short description - -docker compose certbot configurations with Backward compatibility (without certbot container). -Use `docker compose --profile certbot up` to use this features. - -## The simplest way for launching new servers with SSL certificates - -1. Get letsencrypt certs - set `.env` values - ```properties - NGINX_SSL_CERT_FILENAME=fullchain.pem - NGINX_SSL_CERT_KEY_FILENAME=privkey.pem - NGINX_ENABLE_CERTBOT_CHALLENGE=true - CERTBOT_DOMAIN=your_domain.com - CERTBOT_EMAIL=example@your_domain.com - ``` - execute command: - ```shell - docker network prune - docker compose --profile certbot up --force-recreate -d - ``` - then after the containers launched: - ```shell - docker compose exec -it certbot /bin/sh /update-cert.sh - ``` -2. Edit `.env` file and `docker compose --profile certbot up` again. - set `.env` value additionally - ```properties - NGINX_HTTPS_ENABLED=true - ``` - execute command: - ```shell - docker compose --profile certbot up -d --no-deps --force-recreate nginx - ``` - Then you can access your serve with HTTPS. - [https://your_domain.com](https://your_domain.com) - -## SSL certificates renewal - -For SSL certificates renewal, execute commands below: - -```shell -docker compose exec -it certbot /bin/sh /update-cert.sh -docker compose exec nginx nginx -s reload -``` - -## Options for certbot - -`CERTBOT_OPTIONS` key might be helpful for testing. i.e., - -```properties -CERTBOT_OPTIONS=--dry-run -``` - -To apply changes to `CERTBOT_OPTIONS`, regenerate the certbot container before updating the certificates. - -```shell -docker compose --profile certbot up -d --no-deps --force-recreate certbot -docker compose exec -it certbot /bin/sh /update-cert.sh -``` - -Then, reload the nginx container if necessary. - -```shell -docker compose exec nginx nginx -s reload -``` - -## For legacy servers - -To use cert files dir `nginx/ssl` as before, simply launch containers WITHOUT `--profile certbot` option. - -```shell -docker compose up -d -``` diff --git a/appstore/dify/1.0.0/conf/certbot/docker-entrypoint.sh b/appstore/dify/1.0.0/conf/certbot/docker-entrypoint.sh deleted file mode 100644 index a70ecd825..000000000 --- a/appstore/dify/1.0.0/conf/certbot/docker-entrypoint.sh +++ /dev/null @@ -1,30 +0,0 @@ -#!/bin/sh -set -e - -printf '%s\n' "Docker entrypoint script is running" - -printf '%s\n' "\nChecking specific environment variables:" -printf '%s\n' "CERTBOT_EMAIL: ${CERTBOT_EMAIL:-Not set}" -printf '%s\n' "CERTBOT_DOMAIN: ${CERTBOT_DOMAIN:-Not set}" -printf '%s\n' "CERTBOT_OPTIONS: ${CERTBOT_OPTIONS:-Not set}" - -printf '%s\n' "\nChecking mounted directories:" -for dir in "/etc/letsencrypt" "/var/www/html" "/var/log/letsencrypt"; do - if [ -d "$dir" ]; then - printf '%s\n' "$dir exists. Contents:" - ls -la "$dir" - else - printf '%s\n' "$dir does not exist." - fi -done - -printf '%s\n' "\nGenerating update-cert.sh from template" -sed -e "s|\${CERTBOT_EMAIL}|$CERTBOT_EMAIL|g" \ - -e "s|\${CERTBOT_DOMAIN}|$CERTBOT_DOMAIN|g" \ - -e "s|\${CERTBOT_OPTIONS}|$CERTBOT_OPTIONS|g" \ - /update-cert.template.txt > /update-cert.sh - -chmod +x /update-cert.sh - -printf '%s\n' "\nExecuting command:" "$@" -exec "$@" diff --git a/appstore/dify/1.0.0/conf/certbot/update-cert.template.txt b/appstore/dify/1.0.0/conf/certbot/update-cert.template.txt deleted file mode 100644 index 16786a192..000000000 --- a/appstore/dify/1.0.0/conf/certbot/update-cert.template.txt +++ /dev/null @@ -1,19 +0,0 @@ -#!/bin/bash -set -e - -DOMAIN="${CERTBOT_DOMAIN}" -EMAIL="${CERTBOT_EMAIL}" -OPTIONS="${CERTBOT_OPTIONS}" -CERT_NAME="${DOMAIN}" # 証明書名をドメイン名と同じにする - -# Check if the certificate already exists -if [ -f "/etc/letsencrypt/renewal/${CERT_NAME}.conf" ]; then - echo "Certificate exists. Attempting to renew..." - certbot renew --noninteractive --cert-name ${CERT_NAME} --webroot --webroot-path=/var/www/html --email ${EMAIL} --agree-tos --no-eff-email ${OPTIONS} -else - echo "Certificate does not exist. Obtaining a new certificate..." - certbot certonly --noninteractive --webroot --webroot-path=/var/www/html --email ${EMAIL} --agree-tos --no-eff-email -d ${DOMAIN} ${OPTIONS} -fi -echo "Certificate operation successful" -# Note: Nginx reload should be handled outside this container -echo "Please ensure to reload Nginx to apply any certificate changes." diff --git a/appstore/dify/1.0.0/conf/couchbase-server/Dockerfile b/appstore/dify/1.0.0/conf/couchbase-server/Dockerfile deleted file mode 100644 index bd8af6415..000000000 --- a/appstore/dify/1.0.0/conf/couchbase-server/Dockerfile +++ /dev/null @@ -1,4 +0,0 @@ -FROM couchbase/server:latest AS stage_base -# FROM couchbase:latest AS stage_base -COPY init-cbserver.sh /opt/couchbase/init/ -RUN chmod +x /opt/couchbase/init/init-cbserver.sh \ No newline at end of file diff --git a/appstore/dify/1.0.0/conf/couchbase-server/init-cbserver.sh b/appstore/dify/1.0.0/conf/couchbase-server/init-cbserver.sh deleted file mode 100644 index e66bc1853..000000000 --- a/appstore/dify/1.0.0/conf/couchbase-server/init-cbserver.sh +++ /dev/null @@ -1,44 +0,0 @@ -#!/bin/bash -# used to start couchbase server - can't get around this as docker compose only allows you to start one command - so we have to start couchbase like the standard couchbase Dockerfile would -# https://github.com/couchbase/docker/blob/master/enterprise/couchbase-server/7.2.0/Dockerfile#L88 - -/entrypoint.sh couchbase-server & - -# track if setup is complete so we don't try to setup again -FILE=/opt/couchbase/init/setupComplete.txt - -if ! [ -f "$FILE" ]; then - # used to automatically create the cluster based on environment variables - # https://docs.couchbase.com/server/current/cli/cbcli/couchbase-cli-cluster-init.html - - echo $COUCHBASE_ADMINISTRATOR_USERNAME ":" $COUCHBASE_ADMINISTRATOR_PASSWORD - - sleep 20s - /opt/couchbase/bin/couchbase-cli cluster-init -c 127.0.0.1 \ - --cluster-username $COUCHBASE_ADMINISTRATOR_USERNAME \ - --cluster-password $COUCHBASE_ADMINISTRATOR_PASSWORD \ - --services data,index,query,fts \ - --cluster-ramsize $COUCHBASE_RAM_SIZE \ - --cluster-index-ramsize $COUCHBASE_INDEX_RAM_SIZE \ - --cluster-eventing-ramsize $COUCHBASE_EVENTING_RAM_SIZE \ - --cluster-fts-ramsize $COUCHBASE_FTS_RAM_SIZE \ - --index-storage-setting default - - sleep 2s - - # used to auto create the bucket based on environment variables - # https://docs.couchbase.com/server/current/cli/cbcli/couchbase-cli-bucket-create.html - - /opt/couchbase/bin/couchbase-cli bucket-create -c localhost:8091 \ - --username $COUCHBASE_ADMINISTRATOR_USERNAME \ - --password $COUCHBASE_ADMINISTRATOR_PASSWORD \ - --bucket $COUCHBASE_BUCKET \ - --bucket-ramsize $COUCHBASE_BUCKET_RAMSIZE \ - --bucket-type couchbase - - # create file so we know that the cluster is setup and don't run the setup again - touch $FILE -fi - # docker compose will stop the container from running unless we do this - # known issue and workaround - tail -f /dev/null diff --git a/appstore/dify/1.0.0/conf/elasticsearch/docker-entrypoint.sh b/appstore/dify/1.0.0/conf/elasticsearch/docker-entrypoint.sh deleted file mode 100644 index 6669aec5a..000000000 --- a/appstore/dify/1.0.0/conf/elasticsearch/docker-entrypoint.sh +++ /dev/null @@ -1,25 +0,0 @@ -#!/bin/bash - -set -e - -if [ "${VECTOR_STORE}" = "elasticsearch-ja" ]; then - # Check if the ICU tokenizer plugin is installed - if ! /usr/share/elasticsearch/bin/elasticsearch-plugin list | grep -q analysis-icu; then - printf '%s\n' "Installing the ICU tokenizer plugin" - if ! /usr/share/elasticsearch/bin/elasticsearch-plugin install analysis-icu; then - printf '%s\n' "Failed to install the ICU tokenizer plugin" - exit 1 - fi - fi - # Check if the Japanese language analyzer plugin is installed - if ! /usr/share/elasticsearch/bin/elasticsearch-plugin list | grep -q analysis-kuromoji; then - printf '%s\n' "Installing the Japanese language analyzer plugin" - if ! /usr/share/elasticsearch/bin/elasticsearch-plugin install analysis-kuromoji; then - printf '%s\n' "Failed to install the Japanese language analyzer plugin" - exit 1 - fi - fi -fi - -# Run the original entrypoint script -exec /bin/tini -- /usr/local/bin/docker-entrypoint.sh diff --git a/appstore/dify/1.0.0/conf/nginx/conf.d/default.conf.template b/appstore/dify/1.0.0/conf/nginx/conf.d/default.conf.template deleted file mode 100644 index a458412d1..000000000 --- a/appstore/dify/1.0.0/conf/nginx/conf.d/default.conf.template +++ /dev/null @@ -1,48 +0,0 @@ -# Please do not directly edit this file. Instead, modify the .env variables related to NGINX configuration. - -server { - listen ${NGINX_PORT}; - server_name ${NGINX_SERVER_NAME}; - - location /console/api { - proxy_pass http://api:5001; - include proxy.conf; - } - - location /api { - proxy_pass http://api:5001; - include proxy.conf; - } - - location /v1 { - proxy_pass http://api:5001; - include proxy.conf; - } - - location /files { - proxy_pass http://api:5001; - include proxy.conf; - } - - location /explore { - proxy_pass http://web:3000; - include proxy.conf; - } - - location /e/ { - proxy_pass http://plugin_daemon:5002; - proxy_set_header Dify-Hook-Url $scheme://$host$request_uri; - include proxy.conf; - } - - location / { - proxy_pass http://web:3000; - include proxy.conf; - } - - # placeholder for acme challenge location - ${ACME_CHALLENGE_LOCATION} - - # placeholder for https config defined in https.conf.template - ${HTTPS_CONFIG} -} diff --git a/appstore/dify/1.0.0/conf/nginx/docker-entrypoint.sh b/appstore/dify/1.0.0/conf/nginx/docker-entrypoint.sh deleted file mode 100644 index d343cb3ef..000000000 --- a/appstore/dify/1.0.0/conf/nginx/docker-entrypoint.sh +++ /dev/null @@ -1,39 +0,0 @@ -#!/bin/bash - -if [ "${NGINX_HTTPS_ENABLED}" = "true" ]; then - # Check if the certificate and key files for the specified domain exist - if [ -n "${CERTBOT_DOMAIN}" ] && \ - [ -f "/etc/letsencrypt/live/${CERTBOT_DOMAIN}/${NGINX_SSL_CERT_FILENAME}" ] && \ - [ -f "/etc/letsencrypt/live/${CERTBOT_DOMAIN}/${NGINX_SSL_CERT_KEY_FILENAME}" ]; then - SSL_CERTIFICATE_PATH="/etc/letsencrypt/live/${CERTBOT_DOMAIN}/${NGINX_SSL_CERT_FILENAME}" - SSL_CERTIFICATE_KEY_PATH="/etc/letsencrypt/live/${CERTBOT_DOMAIN}/${NGINX_SSL_CERT_KEY_FILENAME}" - else - SSL_CERTIFICATE_PATH="/etc/ssl/${NGINX_SSL_CERT_FILENAME}" - SSL_CERTIFICATE_KEY_PATH="/etc/ssl/${NGINX_SSL_CERT_KEY_FILENAME}" - fi - export SSL_CERTIFICATE_PATH - export SSL_CERTIFICATE_KEY_PATH - - # set the HTTPS_CONFIG environment variable to the content of the https.conf.template - HTTPS_CONFIG=$(envsubst < /etc/nginx/https.conf.template) - export HTTPS_CONFIG - # Substitute the HTTPS_CONFIG in the default.conf.template with content from https.conf.template - envsubst '${HTTPS_CONFIG}' < /etc/nginx/conf.d/default.conf.template > /etc/nginx/conf.d/default.conf -fi - -if [ "${NGINX_ENABLE_CERTBOT_CHALLENGE}" = "true" ]; then - ACME_CHALLENGE_LOCATION='location /.well-known/acme-challenge/ { root /var/www/html; }' -else - ACME_CHALLENGE_LOCATION='' -fi -export ACME_CHALLENGE_LOCATION - -env_vars=$(printenv | cut -d= -f1 | sed 's/^/$/g' | paste -sd, -) - -envsubst "$env_vars" < /etc/nginx/nginx.conf.template > /etc/nginx/nginx.conf -envsubst "$env_vars" < /etc/nginx/proxy.conf.template > /etc/nginx/proxy.conf - -envsubst < /etc/nginx/conf.d/default.conf.template > /etc/nginx/conf.d/default.conf - -# Start Nginx using the default entrypoint -exec nginx -g 'daemon off;' \ No newline at end of file diff --git a/appstore/dify/1.0.0/conf/nginx/https.conf.template b/appstore/dify/1.0.0/conf/nginx/https.conf.template deleted file mode 100644 index 95ea36f46..000000000 --- a/appstore/dify/1.0.0/conf/nginx/https.conf.template +++ /dev/null @@ -1,9 +0,0 @@ -# Please do not directly edit this file. Instead, modify the .env variables related to NGINX configuration. - -listen ${NGINX_SSL_PORT} ssl; -ssl_certificate ${SSL_CERTIFICATE_PATH}; -ssl_certificate_key ${SSL_CERTIFICATE_KEY_PATH}; -ssl_protocols ${NGINX_SSL_PROTOCOLS}; -ssl_prefer_server_ciphers on; -ssl_session_cache shared:SSL:10m; -ssl_session_timeout 10m; \ No newline at end of file diff --git a/appstore/dify/1.0.0/conf/nginx/nginx.conf.template b/appstore/dify/1.0.0/conf/nginx/nginx.conf.template deleted file mode 100644 index 32a571653..000000000 --- a/appstore/dify/1.0.0/conf/nginx/nginx.conf.template +++ /dev/null @@ -1,34 +0,0 @@ -# Please do not directly edit this file. Instead, modify the .env variables related to NGINX configuration. - -user nginx; -worker_processes ${NGINX_WORKER_PROCESSES}; - -error_log /var/log/nginx/error.log notice; -pid /var/run/nginx.pid; - - -events { - worker_connections 1024; -} - - -http { - include /etc/nginx/mime.types; - default_type application/octet-stream; - - log_format main '$remote_addr - $remote_user [$time_local] "$request" ' - '$status $body_bytes_sent "$http_referer" ' - '"$http_user_agent" "$http_x_forwarded_for"'; - - access_log /var/log/nginx/access.log main; - - sendfile on; - #tcp_nopush on; - - keepalive_timeout ${NGINX_KEEPALIVE_TIMEOUT}; - - #gzip on; - client_max_body_size ${NGINX_CLIENT_MAX_BODY_SIZE}; - - include /etc/nginx/conf.d/*.conf; -} \ No newline at end of file diff --git a/appstore/dify/1.0.0/conf/nginx/proxy.conf.template b/appstore/dify/1.0.0/conf/nginx/proxy.conf.template deleted file mode 100644 index 117f80614..000000000 --- a/appstore/dify/1.0.0/conf/nginx/proxy.conf.template +++ /dev/null @@ -1,11 +0,0 @@ -# Please do not directly edit this file. Instead, modify the .env variables related to NGINX configuration. - -proxy_set_header Host $host; -proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; -proxy_set_header X-Forwarded-Proto $scheme; -proxy_set_header X-Forwarded-Port $server_port; -proxy_http_version 1.1; -proxy_set_header Connection ""; -proxy_buffering off; -proxy_read_timeout ${NGINX_PROXY_READ_TIMEOUT}; -proxy_send_timeout ${NGINX_PROXY_SEND_TIMEOUT}; diff --git a/appstore/dify/1.0.0/conf/nginx/ssl/.gitkeep b/appstore/dify/1.0.0/conf/nginx/ssl/.gitkeep deleted file mode 100644 index e69de29bb..000000000 diff --git a/appstore/dify/1.0.0/conf/ssrf_proxy/docker-entrypoint.sh b/appstore/dify/1.0.0/conf/ssrf_proxy/docker-entrypoint.sh deleted file mode 100644 index 613897bb7..000000000 --- a/appstore/dify/1.0.0/conf/ssrf_proxy/docker-entrypoint.sh +++ /dev/null @@ -1,42 +0,0 @@ -#!/bin/bash - -# Modified based on Squid OCI image entrypoint - -# This entrypoint aims to forward the squid logs to stdout to assist users of -# common container related tooling (e.g., kubernetes, docker-compose, etc) to -# access the service logs. - -# Moreover, it invokes the squid binary, leaving all the desired parameters to -# be provided by the "command" passed to the spawned container. If no command -# is provided by the user, the default behavior (as per the CMD statement in -# the Dockerfile) will be to use Ubuntu's default configuration [1] and run -# squid with the "-NYC" options to mimic the behavior of the Ubuntu provided -# systemd unit. - -# [1] The default configuration is changed in the Dockerfile to allow local -# network connections. See the Dockerfile for further information. - -echo "[ENTRYPOINT] re-create snakeoil self-signed certificate removed in the build process" -if [ ! -f /etc/ssl/private/ssl-cert-snakeoil.key ]; then - /usr/sbin/make-ssl-cert generate-default-snakeoil --force-overwrite > /dev/null 2>&1 -fi - -tail -F /var/log/squid/access.log 2>/dev/null & -tail -F /var/log/squid/error.log 2>/dev/null & -tail -F /var/log/squid/store.log 2>/dev/null & -tail -F /var/log/squid/cache.log 2>/dev/null & - -# Replace environment variables in the template and output to the squid.conf -echo "[ENTRYPOINT] replacing environment variables in the template" -awk '{ - while(match($0, /\${[A-Za-z_][A-Za-z_0-9]*}/)) { - var = substr($0, RSTART+2, RLENGTH-3) - val = ENVIRON[var] - $0 = substr($0, 1, RSTART-1) val substr($0, RSTART+RLENGTH) - } - print -}' /etc/squid/squid.conf.template > /etc/squid/squid.conf - -/usr/sbin/squid -Nz -echo "[ENTRYPOINT] starting squid" -/usr/sbin/squid -f /etc/squid/squid.conf -NYC 1 diff --git a/appstore/dify/1.0.0/conf/ssrf_proxy/squid.conf.template b/appstore/dify/1.0.0/conf/ssrf_proxy/squid.conf.template deleted file mode 100644 index 676fe7379..000000000 --- a/appstore/dify/1.0.0/conf/ssrf_proxy/squid.conf.template +++ /dev/null @@ -1,51 +0,0 @@ -acl localnet src 0.0.0.1-0.255.255.255 # RFC 1122 "this" network (LAN) -acl localnet src 10.0.0.0/8 # RFC 1918 local private network (LAN) -acl localnet src 100.64.0.0/10 # RFC 6598 shared address space (CGN) -acl localnet src 169.254.0.0/16 # RFC 3927 link-local (directly plugged) machines -acl localnet src 172.16.0.0/12 # RFC 1918 local private network (LAN) -acl localnet src 192.168.0.0/16 # RFC 1918 local private network (LAN) -acl localnet src fc00::/7 # RFC 4193 local private network range -acl localnet src fe80::/10 # RFC 4291 link-local (directly plugged) machines -acl SSL_ports port 443 -# acl SSL_ports port 1025-65535 # Enable the configuration to resolve this issue: https://github.com/langgenius/dify/issues/12792 -acl Safe_ports port 80 # http -acl Safe_ports port 21 # ftp -acl Safe_ports port 443 # https -acl Safe_ports port 70 # gopher -acl Safe_ports port 210 # wais -acl Safe_ports port 1025-65535 # unregistered ports -acl Safe_ports port 280 # http-mgmt -acl Safe_ports port 488 # gss-http -acl Safe_ports port 591 # filemaker -acl Safe_ports port 777 # multiling http -acl CONNECT method CONNECT -http_access deny !Safe_ports -http_access deny CONNECT !SSL_ports -http_access allow localhost manager -http_access deny manager -http_access allow localhost -include /etc/squid/conf.d/*.conf -http_access deny all - -################################## Proxy Server ################################ -http_port ${HTTP_PORT} -coredump_dir ${COREDUMP_DIR} -refresh_pattern ^ftp: 1440 20% 10080 -refresh_pattern ^gopher: 1440 0% 1440 -refresh_pattern -i (/cgi-bin/|\?) 0 0% 0 -refresh_pattern \/(Packages|Sources)(|\.bz2|\.gz|\.xz)$ 0 0% 0 refresh-ims -refresh_pattern \/Release(|\.gpg)$ 0 0% 0 refresh-ims -refresh_pattern \/InRelease$ 0 0% 0 refresh-ims -refresh_pattern \/(Translation-.*)(|\.bz2|\.gz|\.xz)$ 0 0% 0 refresh-ims -refresh_pattern . 0 20% 4320 - - -# cache_dir ufs /var/spool/squid 100 16 256 -# upstream proxy, set to your own upstream proxy IP to avoid SSRF attacks -# cache_peer 172.1.1.1 parent 3128 0 no-query no-digest no-netdb-exchange default - -################################## Reverse Proxy To Sandbox ################################ -http_port ${REVERSE_PROXY_PORT} accel vhost -cache_peer ${SANDBOX_HOST} parent ${SANDBOX_PORT} 0 no-query originserver -acl src_all src all -http_access allow src_all diff --git a/appstore/dify/1.0.0/conf/startupscripts/init.sh b/appstore/dify/1.0.0/conf/startupscripts/init.sh deleted file mode 100644 index c6e6e1966..000000000 --- a/appstore/dify/1.0.0/conf/startupscripts/init.sh +++ /dev/null @@ -1,13 +0,0 @@ -#!/usr/bin/env bash - -DB_INITIALIZED="/opt/oracle/oradata/dbinit" -#[ -f ${DB_INITIALIZED} ] && exit -#touch ${DB_INITIALIZED} -if [ -f ${DB_INITIALIZED} ]; then - echo 'File exists. Standards for have been Init' - exit -else - echo 'File does not exist. Standards for first time Start up this DB' - "$ORACLE_HOME"/bin/sqlplus -s "/ as sysdba" @"/opt/oracle/scripts/startup/init_user.script"; - touch ${DB_INITIALIZED} -fi diff --git a/appstore/dify/1.0.0/conf/startupscripts/init_user.script b/appstore/dify/1.0.0/conf/startupscripts/init_user.script deleted file mode 100644 index 7aa7c2804..000000000 --- a/appstore/dify/1.0.0/conf/startupscripts/init_user.script +++ /dev/null @@ -1,10 +0,0 @@ -show pdbs; -ALTER SYSTEM SET PROCESSES=500 SCOPE=SPFILE; -alter session set container= freepdb1; -create user dify identified by dify DEFAULT TABLESPACE users quota unlimited on users; -grant DB_DEVELOPER_ROLE to dify; - -BEGIN -CTX_DDL.CREATE_PREFERENCE('my_chinese_vgram_lexer','CHINESE_VGRAM_LEXER'); -END; -/ diff --git a/appstore/dify/1.0.0/conf/tidb/config/pd.toml b/appstore/dify/1.0.0/conf/tidb/config/pd.toml deleted file mode 100644 index 042b251e4..000000000 --- a/appstore/dify/1.0.0/conf/tidb/config/pd.toml +++ /dev/null @@ -1,4 +0,0 @@ -# PD Configuration File reference: -# https://docs.pingcap.com/tidb/stable/pd-configuration-file#pd-configuration-file -[replication] -max-replicas = 1 \ No newline at end of file diff --git a/appstore/dify/1.0.0/conf/tidb/config/tiflash-learner.toml b/appstore/dify/1.0.0/conf/tidb/config/tiflash-learner.toml deleted file mode 100644 index 5098829aa..000000000 --- a/appstore/dify/1.0.0/conf/tidb/config/tiflash-learner.toml +++ /dev/null @@ -1,13 +0,0 @@ -# TiFlash tiflash-learner.toml Configuration File reference: -# https://docs.pingcap.com/tidb/stable/tiflash-configuration#configure-the-tiflash-learnertoml-file - -log-file = "/logs/tiflash_tikv.log" - -[server] -engine-addr = "tiflash:4030" -addr = "0.0.0.0:20280" -advertise-addr = "tiflash:20280" -status-addr = "tiflash:20292" - -[storage] -data-dir = "/data/flash" diff --git a/appstore/dify/1.0.0/conf/tidb/config/tiflash.toml b/appstore/dify/1.0.0/conf/tidb/config/tiflash.toml deleted file mode 100644 index 30ac13efc..000000000 --- a/appstore/dify/1.0.0/conf/tidb/config/tiflash.toml +++ /dev/null @@ -1,19 +0,0 @@ -# TiFlash tiflash.toml Configuration File reference: -# https://docs.pingcap.com/tidb/stable/tiflash-configuration#configure-the-tiflashtoml-file - -listen_host = "0.0.0.0" -path = "/data" - -[flash] -tidb_status_addr = "tidb:10080" -service_addr = "tiflash:4030" - -[flash.proxy] -config = "/tiflash-learner.toml" - -[logger] -errorlog = "/logs/tiflash_error.log" -log = "/logs/tiflash.log" - -[raft] -pd_addr = "pd0:2379" diff --git a/appstore/dify/1.0.0/conf/tidb/docker-compose.yaml b/appstore/dify/1.0.0/conf/tidb/docker-compose.yaml deleted file mode 100644 index fa1577017..000000000 --- a/appstore/dify/1.0.0/conf/tidb/docker-compose.yaml +++ /dev/null @@ -1,62 +0,0 @@ -services: - pd0: - image: pingcap/pd:v8.5.1 - # ports: - # - "2379" - volumes: - - ./config/pd.toml:/pd.toml:ro - - ./volumes/data:/data - - ./volumes/logs:/logs - command: - - --name=pd0 - - --client-urls=http://0.0.0.0:2379 - - --peer-urls=http://0.0.0.0:2380 - - --advertise-client-urls=http://pd0:2379 - - --advertise-peer-urls=http://pd0:2380 - - --initial-cluster=pd0=http://pd0:2380 - - --data-dir=/data/pd - - --config=/pd.toml - - --log-file=/logs/pd.log - restart: on-failure - tikv: - image: pingcap/tikv:v8.5.1 - volumes: - - ./volumes/data:/data - - ./volumes/logs:/logs - command: - - --addr=0.0.0.0:20160 - - --advertise-addr=tikv:20160 - - --status-addr=tikv:20180 - - --data-dir=/data/tikv - - --pd=pd0:2379 - - --log-file=/logs/tikv.log - depends_on: - - "pd0" - restart: on-failure - tidb: - image: pingcap/tidb:v8.5.1 - # ports: - # - "4000:4000" - volumes: - - ./volumes/logs:/logs - command: - - --advertise-address=tidb - - --store=tikv - - --path=pd0:2379 - - --log-file=/logs/tidb.log - depends_on: - - "tikv" - restart: on-failure - tiflash: - image: pingcap/tiflash:v8.5.1 - volumes: - - ./config/tiflash.toml:/tiflash.toml:ro - - ./config/tiflash-learner.toml:/tiflash-learner.toml:ro - - ./volumes/data:/data - - ./volumes/logs:/logs - command: - - --config=/tiflash.toml - depends_on: - - "tikv" - - "tidb" - restart: on-failure diff --git a/appstore/dify/1.0.0/conf/volumes/myscale/config/users.d/custom_users_config.xml b/appstore/dify/1.0.0/conf/volumes/myscale/config/users.d/custom_users_config.xml deleted file mode 100644 index 67f24b69e..000000000 --- a/appstore/dify/1.0.0/conf/volumes/myscale/config/users.d/custom_users_config.xml +++ /dev/null @@ -1,17 +0,0 @@ - - - - - - ::1 - 127.0.0.1 - 10.0.0.0/8 - 172.16.0.0/12 - 192.168.0.0/16 - - default - default - 1 - - - \ No newline at end of file diff --git a/appstore/dify/1.0.0/conf/volumes/oceanbase/init.d/vec_memory.sql b/appstore/dify/1.0.0/conf/volumes/oceanbase/init.d/vec_memory.sql deleted file mode 100644 index f4c283fdf..000000000 --- a/appstore/dify/1.0.0/conf/volumes/oceanbase/init.d/vec_memory.sql +++ /dev/null @@ -1 +0,0 @@ -ALTER SYSTEM SET ob_vector_memory_limit_percentage = 30; \ No newline at end of file diff --git a/appstore/dify/1.0.0/conf/volumes/opensearch/opensearch_dashboards.yml b/appstore/dify/1.0.0/conf/volumes/opensearch/opensearch_dashboards.yml deleted file mode 100644 index f50d63bbb..000000000 --- a/appstore/dify/1.0.0/conf/volumes/opensearch/opensearch_dashboards.yml +++ /dev/null @@ -1,222 +0,0 @@ ---- -# Copyright OpenSearch Contributors -# SPDX-License-Identifier: Apache-2.0 - -# Description: -# Default configuration for OpenSearch Dashboards - -# OpenSearch Dashboards is served by a back end server. This setting specifies the port to use. -# server.port: 5601 - -# Specifies the address to which the OpenSearch Dashboards server will bind. IP addresses and host names are both valid values. -# The default is 'localhost', which usually means remote machines will not be able to connect. -# To allow connections from remote users, set this parameter to a non-loopback address. -# server.host: "localhost" - -# Enables you to specify a path to mount OpenSearch Dashboards at if you are running behind a proxy. -# Use the `server.rewriteBasePath` setting to tell OpenSearch Dashboards if it should remove the basePath -# from requests it receives, and to prevent a deprecation warning at startup. -# This setting cannot end in a slash. -# server.basePath: "" - -# Specifies whether OpenSearch Dashboards should rewrite requests that are prefixed with -# `server.basePath` or require that they are rewritten by your reverse proxy. -# server.rewriteBasePath: false - -# The maximum payload size in bytes for incoming server requests. -# server.maxPayloadBytes: 1048576 - -# The OpenSearch Dashboards server's name. This is used for display purposes. -# server.name: "your-hostname" - -# The URLs of the OpenSearch instances to use for all your queries. -# opensearch.hosts: ["http://localhost:9200"] - -# OpenSearch Dashboards uses an index in OpenSearch to store saved searches, visualizations and -# dashboards. OpenSearch Dashboards creates a new index if the index doesn't already exist. -# opensearchDashboards.index: ".opensearch_dashboards" - -# The default application to load. -# opensearchDashboards.defaultAppId: "home" - -# Setting for an optimized healthcheck that only uses the local OpenSearch node to do Dashboards healthcheck. -# This settings should be used for large clusters or for clusters with ingest heavy nodes. -# It allows Dashboards to only healthcheck using the local OpenSearch node rather than fan out requests across all nodes. -# -# It requires the user to create an OpenSearch node attribute with the same name as the value used in the setting -# This node attribute should assign all nodes of the same cluster an integer value that increments with each new cluster that is spun up -# e.g. in opensearch.yml file you would set the value to a setting using node.attr.cluster_id: -# Should only be enabled if there is a corresponding node attribute created in your OpenSearch config that matches the value here -# opensearch.optimizedHealthcheckId: "cluster_id" - -# If your OpenSearch is protected with basic authentication, these settings provide -# the username and password that the OpenSearch Dashboards server uses to perform maintenance on the OpenSearch Dashboards -# index at startup. Your OpenSearch Dashboards users still need to authenticate with OpenSearch, which -# is proxied through the OpenSearch Dashboards server. -# opensearch.username: "opensearch_dashboards_system" -# opensearch.password: "pass" - -# Enables SSL and paths to the PEM-format SSL certificate and SSL key files, respectively. -# These settings enable SSL for outgoing requests from the OpenSearch Dashboards server to the browser. -# server.ssl.enabled: false -# server.ssl.certificate: /path/to/your/server.crt -# server.ssl.key: /path/to/your/server.key - -# Optional settings that provide the paths to the PEM-format SSL certificate and key files. -# These files are used to verify the identity of OpenSearch Dashboards to OpenSearch and are required when -# xpack.security.http.ssl.client_authentication in OpenSearch is set to required. -# opensearch.ssl.certificate: /path/to/your/client.crt -# opensearch.ssl.key: /path/to/your/client.key - -# Optional setting that enables you to specify a path to the PEM file for the certificate -# authority for your OpenSearch instance. -# opensearch.ssl.certificateAuthorities: [ "/path/to/your/CA.pem" ] - -# To disregard the validity of SSL certificates, change this setting's value to 'none'. -# opensearch.ssl.verificationMode: full - -# Time in milliseconds to wait for OpenSearch to respond to pings. Defaults to the value of -# the opensearch.requestTimeout setting. -# opensearch.pingTimeout: 1500 - -# Time in milliseconds to wait for responses from the back end or OpenSearch. This value -# must be a positive integer. -# opensearch.requestTimeout: 30000 - -# List of OpenSearch Dashboards client-side headers to send to OpenSearch. To send *no* client-side -# headers, set this value to [] (an empty list). -# opensearch.requestHeadersWhitelist: [ authorization ] - -# Header names and values that are sent to OpenSearch. Any custom headers cannot be overwritten -# by client-side headers, regardless of the opensearch.requestHeadersWhitelist configuration. -# opensearch.customHeaders: {} - -# Time in milliseconds for OpenSearch to wait for responses from shards. Set to 0 to disable. -# opensearch.shardTimeout: 30000 - -# Logs queries sent to OpenSearch. Requires logging.verbose set to true. -# opensearch.logQueries: false - -# Specifies the path where OpenSearch Dashboards creates the process ID file. -# pid.file: /var/run/opensearchDashboards.pid - -# Enables you to specify a file where OpenSearch Dashboards stores log output. -# logging.dest: stdout - -# Set the value of this setting to true to suppress all logging output. -# logging.silent: false - -# Set the value of this setting to true to suppress all logging output other than error messages. -# logging.quiet: false - -# Set the value of this setting to true to log all events, including system usage information -# and all requests. -# logging.verbose: false - -# Set the interval in milliseconds to sample system and process performance -# metrics. Minimum is 100ms. Defaults to 5000. -# ops.interval: 5000 - -# Specifies locale to be used for all localizable strings, dates and number formats. -# Supported languages are the following: English - en , by default , Chinese - zh-CN . -# i18n.locale: "en" - -# Set the allowlist to check input graphite Url. Allowlist is the default check list. -# vis_type_timeline.graphiteAllowedUrls: ['https://www.hostedgraphite.com/UID/ACCESS_KEY/graphite'] - -# Set the blocklist to check input graphite Url. Blocklist is an IP list. -# Below is an example for reference -# vis_type_timeline.graphiteBlockedIPs: [ -# //Loopback -# '127.0.0.0/8', -# '::1/128', -# //Link-local Address for IPv6 -# 'fe80::/10', -# //Private IP address for IPv4 -# '10.0.0.0/8', -# '172.16.0.0/12', -# '192.168.0.0/16', -# //Unique local address (ULA) -# 'fc00::/7', -# //Reserved IP address -# '0.0.0.0/8', -# '100.64.0.0/10', -# '192.0.0.0/24', -# '192.0.2.0/24', -# '198.18.0.0/15', -# '192.88.99.0/24', -# '198.51.100.0/24', -# '203.0.113.0/24', -# '224.0.0.0/4', -# '240.0.0.0/4', -# '255.255.255.255/32', -# '::/128', -# '2001:db8::/32', -# 'ff00::/8', -# ] -# vis_type_timeline.graphiteBlockedIPs: [] - -# opensearchDashboards.branding: -# logo: -# defaultUrl: "" -# darkModeUrl: "" -# mark: -# defaultUrl: "" -# darkModeUrl: "" -# loadingLogo: -# defaultUrl: "" -# darkModeUrl: "" -# faviconUrl: "" -# applicationTitle: "" - -# Set the value of this setting to true to capture region blocked warnings and errors -# for your map rendering services. -# map.showRegionBlockedWarning: false% - -# Set the value of this setting to false to suppress search usage telemetry -# for reducing the load of OpenSearch cluster. -# data.search.usageTelemetry.enabled: false - -# 2.4 renames 'wizard.enabled: false' to 'vis_builder.enabled: false' -# Set the value of this setting to false to disable VisBuilder -# functionality in Visualization. -# vis_builder.enabled: false - -# 2.4 New Experimental Feature -# Set the value of this setting to true to enable the experimental multiple data source -# support feature. Use with caution. -# data_source.enabled: false -# Set the value of these settings to customize crypto materials to encryption saved credentials -# in data sources. -# data_source.encryption.wrappingKeyName: 'changeme' -# data_source.encryption.wrappingKeyNamespace: 'changeme' -# data_source.encryption.wrappingKey: [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] - -# 2.6 New ML Commons Dashboards Feature -# Set the value of this setting to true to enable the ml commons dashboards -# ml_commons_dashboards.enabled: false - -# 2.12 New experimental Assistant Dashboards Feature -# Set the value of this setting to true to enable the assistant dashboards -# assistant.chat.enabled: false - -# 2.13 New Query Assistant Feature -# Set the value of this setting to false to disable the query assistant -# observability.query_assist.enabled: false - -# 2.14 Enable Ui Metric Collectors in Usage Collector -# Set the value of this setting to true to enable UI Metric collections -# usageCollection.uiMetric.enabled: false - -opensearch.hosts: [https://localhost:9200] -opensearch.ssl.verificationMode: none -opensearch.username: admin -opensearch.password: 'Qazwsxedc!@#123' -opensearch.requestHeadersWhitelist: [authorization, securitytenant] - -opensearch_security.multitenancy.enabled: true -opensearch_security.multitenancy.tenants.preferred: [Private, Global] -opensearch_security.readonly_mode.roles: [kibana_read_only] -# Use this setting if you are running opensearch-dashboards without https -opensearch_security.cookie.secure: false -server.host: '0.0.0.0' diff --git a/appstore/dify/1.0.0/conf/volumes/sandbox/conf/config.yaml b/appstore/dify/1.0.0/conf/volumes/sandbox/conf/config.yaml deleted file mode 100644 index 8c1a1deb5..000000000 --- a/appstore/dify/1.0.0/conf/volumes/sandbox/conf/config.yaml +++ /dev/null @@ -1,14 +0,0 @@ -app: - port: 8194 - debug: True - key: dify-sandbox -max_workers: 4 -max_requests: 50 -worker_timeout: 5 -python_path: /usr/local/bin/python3 -enable_network: True # please make sure there is no network risk in your environment -allowed_syscalls: # please leave it empty if you have no idea how seccomp works -proxy: - socks5: '' - http: '' - https: '' diff --git a/appstore/dify/1.0.0/conf/volumes/sandbox/conf/config.yaml.example b/appstore/dify/1.0.0/conf/volumes/sandbox/conf/config.yaml.example deleted file mode 100644 index f92c19e51..000000000 --- a/appstore/dify/1.0.0/conf/volumes/sandbox/conf/config.yaml.example +++ /dev/null @@ -1,35 +0,0 @@ -app: - port: 8194 - debug: True - key: dify-sandbox -max_workers: 4 -max_requests: 50 -worker_timeout: 5 -python_path: /usr/local/bin/python3 -python_lib_path: - - /usr/local/lib/python3.10 - - /usr/lib/python3.10 - - /usr/lib/python3 - - /usr/lib/x86_64-linux-gnu - - /etc/ssl/certs/ca-certificates.crt - - /etc/nsswitch.conf - - /etc/hosts - - /etc/resolv.conf - - /run/systemd/resolve/stub-resolv.conf - - /run/resolvconf/resolv.conf - - /etc/localtime - - /usr/share/zoneinfo - - /etc/timezone - # add more paths if needed -python_pip_mirror_url: https://pypi.tuna.tsinghua.edu.cn/simple -nodejs_path: /usr/local/bin/node -enable_network: True -allowed_syscalls: - - 1 - - 2 - - 3 - # add all the syscalls which you require -proxy: - socks5: '' - http: '' - https: '' diff --git a/appstore/dify/1.0.0/conf/volumes/sandbox/dependencies/python-requirements.txt b/appstore/dify/1.0.0/conf/volumes/sandbox/dependencies/python-requirements.txt deleted file mode 100644 index e69de29bb..000000000 diff --git a/appstore/dify/1.0.0/data.yml b/appstore/dify/1.0.0/data.yml deleted file mode 100644 index b6cfca441..000000000 --- a/appstore/dify/1.0.0/data.yml +++ /dev/null @@ -1,82 +0,0 @@ -additionalProperties: - formFields: - - default: "/home/dify" - edit: true - envKey: DIFY_ROOT_PATH - labelZh: 数据持久化路径 - labelEn: Data persistence path - required: true - type: text - - default: 8080 - edit: true - envKey: PANEL_APP_PORT_HTTP - labelZh: WebUI 端口 - labelEn: WebUI port - required: true - rule: paramPort - type: number - - default: 8443 - edit: true - envKey: PANEL_APP_PORT_HTTPS - labelZh: WebUI SSL 端口 - labelEn: WebUI SSL port - required: true - rule: paramPort - type: number - - default: 5432 - edit: true - envKey: EXPOSE_DB_PORT - labelZh: 数据库端口 - labelEn: Database port - required: true - rule: paramPort - type: number - - default: 5003 - edit: true - envKey: EXPOSE_PLUGIN_DEBUGGING_PORT - labelZh: 插件调试端口 - labelEn: Plugin debugging port - required: true - rule: paramPort - type: number - - default: 19530 - disabled: true - edit: true - envKey: MILVUS_STANDALONE_API_PORT - labelZh: Milvus 接口端口 - labelEn: Milvus API port - required: true - rule: paramPort - type: number - - default: 9091 - disabled: true - envKey: MILVUS_STANDALONE_SERVER_PORT - labelZh: Milvus 服务端口 - labelEn: Milvus server port - required: true - rule: paramPort - type: number - - default: 8123 - edit: true - envKey: MYSCALE_PORT - labelZh: MyScale 端口 - labelEn: MyScale port - required: true - rule: paramPort - type: number - - default: 9200 - edit: true - envKey: ELASTICSEARCH_PORT - labelZh: Elasticsearch 端口 - labelEn: Elasticsearch port - required: true - rule: paramPort - type: number - - default: 5601 - edit: true - envKey: KIBANA_PORT - labelZh: Kibana 端口 - labelEn: Kibana port - required: true - rule: paramPort - type: number diff --git a/appstore/dify/1.0.0/docker-compose.yml b/appstore/dify/1.0.0/docker-compose.yml deleted file mode 100644 index 1da92839f..000000000 --- a/appstore/dify/1.0.0/docker-compose.yml +++ /dev/null @@ -1,2192 +0,0 @@ -networks: - milvus: - driver: bridge - opensearch-net: - driver: bridge - internal: true - ssrf_proxy_network: - driver: bridge - internal: true -services: - api: - container_name: api-dify - depends_on: - - db - - redis - environment: - ACCESS_TOKEN_EXPIRE_MINUTES: ${ACCESS_TOKEN_EXPIRE_MINUTES:-60} - ALIYUN_OSS_ACCESS_KEY: ${ALIYUN_OSS_ACCESS_KEY:-your-access-key} - ALIYUN_OSS_AUTH_VERSION: ${ALIYUN_OSS_AUTH_VERSION:-v4} - ALIYUN_OSS_BUCKET_NAME: ${ALIYUN_OSS_BUCKET_NAME:-your-bucket-name} - ALIYUN_OSS_ENDPOINT: ${ALIYUN_OSS_ENDPOINT:-https://oss-ap-southeast-1-internal.aliyuncs.com} - ALIYUN_OSS_PATH: ${ALIYUN_OSS_PATH:-your-path} - ALIYUN_OSS_REGION: ${ALIYUN_OSS_REGION:-ap-southeast-1} - ALIYUN_OSS_SECRET_KEY: ${ALIYUN_OSS_SECRET_KEY:-your-secret-key} - ANALYTICDB_ACCOUNT: ${ANALYTICDB_ACCOUNT:-testaccount} - ANALYTICDB_HOST: ${ANALYTICDB_HOST:-gp-test.aliyuncs.com} - ANALYTICDB_INSTANCE_ID: ${ANALYTICDB_INSTANCE_ID:-gp-ab123456} - ANALYTICDB_KEY_ID: ${ANALYTICDB_KEY_ID:-your-ak} - ANALYTICDB_KEY_SECRET: ${ANALYTICDB_KEY_SECRET:-your-sk} - ANALYTICDB_MAX_CONNECTION: ${ANALYTICDB_MAX_CONNECTION:-5} - ANALYTICDB_MIN_CONNECTION: ${ANALYTICDB_MIN_CONNECTION:-1} - ANALYTICDB_NAMESPACE: ${ANALYTICDB_NAMESPACE:-dify} - ANALYTICDB_NAMESPACE_PASSWORD: ${ANALYTICDB_NAMESPACE_PASSWORD:-difypassword} - ANALYTICDB_PASSWORD: ${ANALYTICDB_PASSWORD:-testpassword} - ANALYTICDB_PORT: ${ANALYTICDB_PORT:-5432} - ANALYTICDB_REGION_ID: ${ANALYTICDB_REGION_ID:-cn-hangzhou} - API_SENTRY_DSN: ${API_SENTRY_DSN:-} - API_SENTRY_PROFILES_SAMPLE_RATE: ${API_SENTRY_PROFILES_SAMPLE_RATE:-1.0} - API_SENTRY_TRACES_SAMPLE_RATE: ${API_SENTRY_TRACES_SAMPLE_RATE:-1.0} - API_TOOL_DEFAULT_CONNECT_TIMEOUT: ${API_TOOL_DEFAULT_CONNECT_TIMEOUT:-10} - API_TOOL_DEFAULT_READ_TIMEOUT: ${API_TOOL_DEFAULT_READ_TIMEOUT:-60} - APP_API_URL: ${APP_API_URL:-} - APP_MAX_ACTIVE_REQUESTS: ${APP_MAX_ACTIVE_REQUESTS:-0} - APP_MAX_EXECUTION_TIME: ${APP_MAX_EXECUTION_TIME:-1200} - APP_WEB_URL: ${APP_WEB_URL:-} - AZURE_BLOB_ACCOUNT_KEY: ${AZURE_BLOB_ACCOUNT_KEY:-difyai} - AZURE_BLOB_ACCOUNT_NAME: ${AZURE_BLOB_ACCOUNT_NAME:-difyai} - AZURE_BLOB_ACCOUNT_URL: ${AZURE_BLOB_ACCOUNT_URL:-https://.blob.core.windows.net} - AZURE_BLOB_CONTAINER_NAME: ${AZURE_BLOB_CONTAINER_NAME:-difyai-container} - BAIDU_OBS_ACCESS_KEY: ${BAIDU_OBS_ACCESS_KEY:-your-access-key} - BAIDU_OBS_BUCKET_NAME: ${BAIDU_OBS_BUCKET_NAME:-your-bucket-name} - BAIDU_OBS_ENDPOINT: ${BAIDU_OBS_ENDPOINT:-your-server-url} - BAIDU_OBS_SECRET_KEY: ${BAIDU_OBS_SECRET_KEY:-your-secret-key} - BAIDU_VECTOR_DB_ACCOUNT: ${BAIDU_VECTOR_DB_ACCOUNT:-root} - BAIDU_VECTOR_DB_API_KEY: ${BAIDU_VECTOR_DB_API_KEY:-dify} - BAIDU_VECTOR_DB_CONNECTION_TIMEOUT_MS: ${BAIDU_VECTOR_DB_CONNECTION_TIMEOUT_MS:-30000} - BAIDU_VECTOR_DB_DATABASE: ${BAIDU_VECTOR_DB_DATABASE:-dify} - BAIDU_VECTOR_DB_ENDPOINT: ${BAIDU_VECTOR_DB_ENDPOINT:-http://127.0.0.1:5287} - BAIDU_VECTOR_DB_REPLICAS: ${BAIDU_VECTOR_DB_REPLICAS:-3} - BAIDU_VECTOR_DB_SHARD: ${BAIDU_VECTOR_DB_SHARD:-1} - BROKER_USE_SSL: ${BROKER_USE_SSL:-false} - CELERY_AUTO_SCALE: ${CELERY_AUTO_SCALE:-false} - CELERY_BROKER_URL: ${CELERY_BROKER_URL:-redis://:difyai123456@redis:6379/1} - CELERY_MAX_WORKERS: ${CELERY_MAX_WORKERS:-} - CELERY_MIN_WORKERS: ${CELERY_MIN_WORKERS:-} - CELERY_SENTINEL_MASTER_NAME: ${CELERY_SENTINEL_MASTER_NAME:-} - CELERY_SENTINEL_SOCKET_TIMEOUT: ${CELERY_SENTINEL_SOCKET_TIMEOUT:-0.1} - CELERY_USE_SENTINEL: ${CELERY_USE_SENTINEL:-false} - CELERY_WORKER_AMOUNT: ${CELERY_WORKER_AMOUNT:-} - CELERY_WORKER_CLASS: ${CELERY_WORKER_CLASS:-} - CERTBOT_DOMAIN: ${CERTBOT_DOMAIN:-your_domain.com} - CERTBOT_EMAIL: ${CERTBOT_EMAIL:-your_email@example.com} - CERTBOT_OPTIONS: ${CERTBOT_OPTIONS:-} - CHECK_UPDATE_URL: ${CHECK_UPDATE_URL:-https://updates.dify.ai} - CHROMA_AUTH_CREDENTIALS: ${CHROMA_AUTH_CREDENTIALS:-} - CHROMA_AUTH_PROVIDER: ${CHROMA_AUTH_PROVIDER:-chromadb.auth.token_authn.TokenAuthClientProvider} - CHROMA_DATABASE: ${CHROMA_DATABASE:-default_database} - CHROMA_HOST: ${CHROMA_HOST:-127.0.0.1} - CHROMA_IS_PERSISTENT: ${CHROMA_IS_PERSISTENT:-TRUE} - CHROMA_PORT: ${CHROMA_PORT:-8000} - CHROMA_SERVER_AUTHN_CREDENTIALS: ${CHROMA_SERVER_AUTHN_CREDENTIALS:-difyai123456} - CHROMA_SERVER_AUTHN_PROVIDER: ${CHROMA_SERVER_AUTHN_PROVIDER:-chromadb.auth.token_authn.TokenAuthenticationServerProvider} - CHROMA_TENANT: ${CHROMA_TENANT:-default_tenant} - CODE_EXECUTION_API_KEY: ${CODE_EXECUTION_API_KEY:-dify-sandbox} - CODE_EXECUTION_CONNECT_TIMEOUT: ${CODE_EXECUTION_CONNECT_TIMEOUT:-10} - CODE_EXECUTION_ENDPOINT: ${CODE_EXECUTION_ENDPOINT:-http://sandbox:8194} - CODE_EXECUTION_READ_TIMEOUT: ${CODE_EXECUTION_READ_TIMEOUT:-60} - CODE_EXECUTION_WRITE_TIMEOUT: ${CODE_EXECUTION_WRITE_TIMEOUT:-10} - CODE_GENERATION_MAX_TOKENS: ${CODE_GENERATION_MAX_TOKENS:-1024} - CODE_MAX_DEPTH: ${CODE_MAX_DEPTH:-5} - CODE_MAX_NUMBER: ${CODE_MAX_NUMBER:-9223372036854775807} - CODE_MAX_NUMBER_ARRAY_LENGTH: ${CODE_MAX_NUMBER_ARRAY_LENGTH:-1000} - CODE_MAX_OBJECT_ARRAY_LENGTH: ${CODE_MAX_OBJECT_ARRAY_LENGTH:-30} - CODE_MAX_PRECISION: ${CODE_MAX_PRECISION:-20} - CODE_MAX_STRING_ARRAY_LENGTH: ${CODE_MAX_STRING_ARRAY_LENGTH:-30} - CODE_MAX_STRING_LENGTH: ${CODE_MAX_STRING_LENGTH:-80000} - CODE_MIN_NUMBER: ${CODE_MIN_NUMBER:--9223372036854775808} - CONSOLE_API_URL: ${CONSOLE_API_URL:-} - CONSOLE_CORS_ALLOW_ORIGINS: ${CONSOLE_CORS_ALLOW_ORIGINS:-*} - CONSOLE_WEB_URL: ${CONSOLE_WEB_URL:-} - COUCHBASE_BUCKET_NAME: ${COUCHBASE_BUCKET_NAME:-Embeddings} - COUCHBASE_CONNECTION_STRING: ${COUCHBASE_CONNECTION_STRING:-couchbase://couchbase-server} - COUCHBASE_PASSWORD: ${COUCHBASE_PASSWORD:-password} - COUCHBASE_SCOPE_NAME: ${COUCHBASE_SCOPE_NAME:-_default} - COUCHBASE_USER: ${COUCHBASE_USER:-Administrator} - CREATE_TIDB_SERVICE_JOB_ENABLED: ${CREATE_TIDB_SERVICE_JOB_ENABLED:-false} - CSP_WHITELIST: ${CSP_WHITELIST:-} - DB_DATABASE: ${DB_DATABASE:-dify} - DB_HOST: ${DB_HOST:-db} - DB_PASSWORD: ${DB_PASSWORD:-difyai123456} - DB_PLUGIN_DATABASE: ${DB_PLUGIN_DATABASE:-dify_plugin} - DB_PORT: ${DB_PORT:-5432} - DB_USERNAME: ${DB_USERNAME:-postgres} - DEBUG: ${DEBUG:-false} - DEPLOY_ENV: ${DEPLOY_ENV:-PRODUCTION} - DIFY_BIND_ADDRESS: ${DIFY_BIND_ADDRESS:-0.0.0.0} - DIFY_PORT: ${DIFY_PORT:-5001} - ELASTICSEARCH_HOST: ${ELASTICSEARCH_HOST:-0.0.0.0} - ELASTICSEARCH_PASSWORD: ${ELASTICSEARCH_PASSWORD:-elastic} - ELASTICSEARCH_PORT: ${ELASTICSEARCH_PORT:-9200} - ELASTICSEARCH_USERNAME: ${ELASTICSEARCH_USERNAME:-elastic} - ENDPOINT_URL_TEMPLATE: ${ENDPOINT_URL_TEMPLATE:-http://localhost/e/{hook_id}} - ETCD_AUTO_COMPACTION_MODE: ${ETCD_AUTO_COMPACTION_MODE:-revision} - ETCD_AUTO_COMPACTION_RETENTION: ${ETCD_AUTO_COMPACTION_RETENTION:-1000} - ETCD_ENDPOINTS: ${ETCD_ENDPOINTS:-etcd:2379} - ETCD_QUOTA_BACKEND_BYTES: ${ETCD_QUOTA_BACKEND_BYTES:-4294967296} - ETCD_SNAPSHOT_COUNT: ${ETCD_SNAPSHOT_COUNT:-50000} - ETL_TYPE: ${ETL_TYPE:-dify} - EXPOSE_NGINX_PORT: ${PANEL_APP_PORT_HTTP:-8080} - EXPOSE_NGINX_SSL_PORT: ${PANEL_APP_PORT_HTTPS:-8443} - EXPOSE_PLUGIN_DAEMON_PORT: ${EXPOSE_PLUGIN_DAEMON_PORT:-5002} - EXPOSE_PLUGIN_DEBUGGING_HOST: ${EXPOSE_PLUGIN_DEBUGGING_HOST:-localhost} - EXPOSE_PLUGIN_DEBUGGING_PORT: ${EXPOSE_PLUGIN_DEBUGGING_PORT:-5003} - FILES_ACCESS_TIMEOUT: ${FILES_ACCESS_TIMEOUT:-300} - FILES_URL: ${FILES_URL:-} - FLASK_DEBUG: ${FLASK_DEBUG:-false} - FORCE_VERIFYING_SIGNATURE: ${FORCE_VERIFYING_SIGNATURE:-true} - GOOGLE_STORAGE_BUCKET_NAME: ${GOOGLE_STORAGE_BUCKET_NAME:-your-bucket-name} - GOOGLE_STORAGE_SERVICE_ACCOUNT_JSON_BASE64: ${GOOGLE_STORAGE_SERVICE_ACCOUNT_JSON_BASE64:-} - GUNICORN_TIMEOUT: ${GUNICORN_TIMEOUT:-360} - HTTP_REQUEST_NODE_MAX_BINARY_SIZE: ${HTTP_REQUEST_NODE_MAX_BINARY_SIZE:-10485760} - HTTP_REQUEST_NODE_MAX_TEXT_SIZE: ${HTTP_REQUEST_NODE_MAX_TEXT_SIZE:-1048576} - HUAWEI_OBS_ACCESS_KEY: ${HUAWEI_OBS_ACCESS_KEY:-your-access-key} - HUAWEI_OBS_BUCKET_NAME: ${HUAWEI_OBS_BUCKET_NAME:-your-bucket-name} - HUAWEI_OBS_SECRET_KEY: ${HUAWEI_OBS_SECRET_KEY:-your-secret-key} - HUAWEI_OBS_SERVER: ${HUAWEI_OBS_SERVER:-your-server-url} - INDEXING_MAX_SEGMENTATION_TOKENS_LENGTH: ${INDEXING_MAX_SEGMENTATION_TOKENS_LENGTH:-4000} - INIT_PASSWORD: ${INIT_PASSWORD:-} - INNER_API_KEY_FOR_PLUGIN: ${PLUGIN_DIFY_INNER_API_KEY:-QaHbTe77CtuXmsfyhR7+vRjI/+XbV1AaFy691iy+kGDv2Jvy0/eAh8Y1} - INVITE_EXPIRY_HOURS: ${INVITE_EXPIRY_HOURS:-72} - KIBANA_PORT: ${KIBANA_PORT:-5601} - LINDORM_PASSWORD: ${LINDORM_PASSWORD:-lindorm} - LINDORM_URL: ${LINDORM_URL:-http://lindorm:30070} - LINDORM_USERNAME: ${LINDORM_USERNAME:-lindorm} - LOG_DATEFORMAT: ${LOG_DATEFORMAT:-%Y-%m-%d %H:%M:%S} - LOG_FILE: ${LOG_FILE:-/app/logs/server.log} - LOG_FILE_BACKUP_COUNT: ${LOG_FILE_BACKUP_COUNT:-5} - LOG_FILE_MAX_SIZE: ${LOG_FILE_MAX_SIZE:-20} - LOG_LEVEL: ${LOG_LEVEL:-INFO} - LOG_TZ: ${LOG_TZ:-UTC} - MAIL_DEFAULT_SEND_FROM: ${MAIL_DEFAULT_SEND_FROM:-} - MAIL_TYPE: ${MAIL_TYPE:-resend} - MARKETPLACE_API_URL: ${MARKETPLACE_API_URL:-https://marketplace.dify.ai} - MARKETPLACE_ENABLED: ${MARKETPLACE_ENABLED:-true} - MAX_SUBMIT_COUNT: ${MAX_SUBMIT_COUNT:-100} - MAX_VARIABLE_SIZE: ${MAX_VARIABLE_SIZE:-204800} - MIGRATION_ENABLED: ${MIGRATION_ENABLED:-true} - MILVUS_AUTHORIZATION_ENABLED: ${MILVUS_AUTHORIZATION_ENABLED:-true} - MILVUS_ENABLE_HYBRID_SEARCH: ${MILVUS_ENABLE_HYBRID_SEARCH:-False} - MILVUS_PASSWORD: ${MILVUS_PASSWORD:-Milvus} - MILVUS_TOKEN: ${MILVUS_TOKEN:-} - MILVUS_URI: ${MILVUS_URI:-http://127.0.0.1:19530} - MILVUS_USER: ${MILVUS_USER:-root} - MINIO_ACCESS_KEY: ${MINIO_ACCESS_KEY:-minioadmin} - MINIO_ADDRESS: ${MINIO_ADDRESS:-minio:9000} - MINIO_SECRET_KEY: ${MINIO_SECRET_KEY:-minioadmin} - MODE: api - MULTIMODAL_SEND_FORMAT: ${MULTIMODAL_SEND_FORMAT:-base64} - MYSCALE_DATABASE: ${MYSCALE_DATABASE:-dify} - MYSCALE_FTS_PARAMS: ${MYSCALE_FTS_PARAMS:-} - MYSCALE_HOST: ${MYSCALE_HOST:-myscale} - MYSCALE_PASSWORD: ${MYSCALE_PASSWORD:-} - MYSCALE_PORT: ${MYSCALE_PORT:-8123} - MYSCALE_USER: ${MYSCALE_USER:-default} - NGINX_CLIENT_MAX_BODY_SIZE: ${NGINX_CLIENT_MAX_BODY_SIZE:-15M} - NGINX_ENABLE_CERTBOT_CHALLENGE: ${NGINX_ENABLE_CERTBOT_CHALLENGE:-false} - NGINX_HTTPS_ENABLED: ${NGINX_HTTPS_ENABLED:-false} - NGINX_KEEPALIVE_TIMEOUT: ${NGINX_KEEPALIVE_TIMEOUT:-65} - NGINX_PORT: ${NGINX_PORT:-80} - NGINX_PROXY_READ_TIMEOUT: ${NGINX_PROXY_READ_TIMEOUT:-3600s} - NGINX_PROXY_SEND_TIMEOUT: ${NGINX_PROXY_SEND_TIMEOUT:-3600s} - NGINX_SERVER_NAME: ${NGINX_SERVER_NAME:-_} - NGINX_SSL_CERT_FILENAME: ${NGINX_SSL_CERT_FILENAME:-dify.crt} - NGINX_SSL_CERT_KEY_FILENAME: ${NGINX_SSL_CERT_KEY_FILENAME:-dify.key} - NGINX_SSL_PORT: ${NGINX_SSL_PORT:-443} - NGINX_SSL_PROTOCOLS: ${NGINX_SSL_PROTOCOLS:-TLSv1.1 TLSv1.2 TLSv1.3} - NGINX_WORKER_PROCESSES: ${NGINX_WORKER_PROCESSES:-auto} - NOTION_CLIENT_ID: ${NOTION_CLIENT_ID:-} - NOTION_CLIENT_SECRET: ${NOTION_CLIENT_SECRET:-} - NOTION_INTEGRATION_TYPE: ${NOTION_INTEGRATION_TYPE:-public} - NOTION_INTERNAL_SECRET: ${NOTION_INTERNAL_SECRET:-} - OCEANBASE_CLUSTER_NAME: ${OCEANBASE_CLUSTER_NAME:-difyai} - OCEANBASE_MEMORY_LIMIT: ${OCEANBASE_MEMORY_LIMIT:-6G} - OCEANBASE_VECTOR_DATABASE: ${OCEANBASE_VECTOR_DATABASE:-test} - OCEANBASE_VECTOR_HOST: ${OCEANBASE_VECTOR_HOST:-oceanbase} - OCEANBASE_VECTOR_PASSWORD: ${OCEANBASE_VECTOR_PASSWORD:-difyai123456} - OCEANBASE_VECTOR_PORT: ${OCEANBASE_VECTOR_PORT:-2881} - OCEANBASE_VECTOR_USER: ${OCEANBASE_VECTOR_USER:-root@test} - OCI_ACCESS_KEY: ${OCI_ACCESS_KEY:-your-access-key} - OCI_BUCKET_NAME: ${OCI_BUCKET_NAME:-your-bucket-name} - OCI_ENDPOINT: ${OCI_ENDPOINT:-https://objectstorage.us-ashburn-1.oraclecloud.com} - OCI_REGION: ${OCI_REGION:-us-ashburn-1} - OCI_SECRET_KEY: ${OCI_SECRET_KEY:-your-secret-key} - OPENAI_API_BASE: ${OPENAI_API_BASE:-https://api.openai.com/v1} - OPENDAL_FS_ROOT: ${OPENDAL_FS_ROOT:-storage} - OPENDAL_SCHEME: ${OPENDAL_SCHEME:-fs} - OPENSEARCH_BOOTSTRAP_MEMORY_LOCK: ${OPENSEARCH_BOOTSTRAP_MEMORY_LOCK:-true} - OPENSEARCH_DISCOVERY_TYPE: ${OPENSEARCH_DISCOVERY_TYPE:-single-node} - OPENSEARCH_HOST: ${OPENSEARCH_HOST:-opensearch} - OPENSEARCH_INITIAL_ADMIN_PASSWORD: ${OPENSEARCH_INITIAL_ADMIN_PASSWORD:-Qazwsxedc!@#123} - OPENSEARCH_JAVA_OPTS_MAX: ${OPENSEARCH_JAVA_OPTS_MAX:-1024m} - OPENSEARCH_JAVA_OPTS_MIN: ${OPENSEARCH_JAVA_OPTS_MIN:-512m} - OPENSEARCH_MEMLOCK_HARD: ${OPENSEARCH_MEMLOCK_HARD:--1} - OPENSEARCH_MEMLOCK_SOFT: ${OPENSEARCH_MEMLOCK_SOFT:--1} - OPENSEARCH_NOFILE_HARD: ${OPENSEARCH_NOFILE_HARD:-65536} - OPENSEARCH_NOFILE_SOFT: ${OPENSEARCH_NOFILE_SOFT:-65536} - OPENSEARCH_PASSWORD: ${OPENSEARCH_PASSWORD:-admin} - OPENSEARCH_PORT: ${OPENSEARCH_PORT:-9200} - OPENSEARCH_SECURE: ${OPENSEARCH_SECURE:-true} - OPENSEARCH_USER: ${OPENSEARCH_USER:-admin} - ORACLE_CHARACTERSET: ${ORACLE_CHARACTERSET:-AL32UTF8} - ORACLE_DATABASE: ${ORACLE_DATABASE:-FREEPDB1} - ORACLE_HOST: ${ORACLE_HOST:-oracle} - ORACLE_PASSWORD: ${ORACLE_PASSWORD:-dify} - ORACLE_PORT: ${ORACLE_PORT:-1521} - ORACLE_PWD: ${ORACLE_PWD:-Dify123456} - ORACLE_USER: ${ORACLE_USER:-dify} - PGDATA: ${PGDATA:-/var/lib/postgresql/data/pgdata} - PGUSER: ${PGUSER:-${DB_USERNAME}} - PGVECTOR_DATABASE: ${PGVECTOR_DATABASE:-dify} - PGVECTOR_HOST: ${PGVECTOR_HOST:-pgvector} - PGVECTOR_MAX_CONNECTION: ${PGVECTOR_MAX_CONNECTION:-5} - PGVECTOR_MIN_CONNECTION: ${PGVECTOR_MIN_CONNECTION:-1} - PGVECTOR_PASSWORD: ${PGVECTOR_PASSWORD:-difyai123456} - PGVECTOR_PGDATA: ${PGVECTOR_PGDATA:-/var/lib/postgresql/data/pgdata} - PGVECTOR_PGUSER: ${PGVECTOR_PGUSER:-postgres} - PGVECTOR_PORT: ${PGVECTOR_PORT:-5432} - PGVECTOR_POSTGRES_DB: ${PGVECTOR_POSTGRES_DB:-dify} - PGVECTOR_POSTGRES_PASSWORD: ${PGVECTOR_POSTGRES_PASSWORD:-difyai123456} - PGVECTOR_USER: ${PGVECTOR_USER:-postgres} - PGVECTO_RS_DATABASE: ${PGVECTO_RS_DATABASE:-dify} - PGVECTO_RS_HOST: ${PGVECTO_RS_HOST:-pgvecto-rs} - PGVECTO_RS_PASSWORD: ${PGVECTO_RS_PASSWORD:-difyai123456} - PGVECTO_RS_PORT: ${PGVECTO_RS_PORT:-5432} - PGVECTO_RS_USER: ${PGVECTO_RS_USER:-postgres} - PLUGIN_DAEMON_KEY: ${PLUGIN_DAEMON_KEY:-lYkiYYT6owG+71oLerGzA7GXCgOT++6ovaezWAjpCjf+Sjc3ZtU+qUEi} - PLUGIN_DAEMON_PORT: ${PLUGIN_DAEMON_PORT:-5002} - PLUGIN_DAEMON_URL: ${PLUGIN_DAEMON_URL:-http://plugin_daemon:5002} - PLUGIN_DEBUGGING_HOST: ${PLUGIN_DEBUGGING_HOST:-0.0.0.0} - PLUGIN_DEBUGGING_PORT: ${PLUGIN_DEBUGGING_PORT:-5003} - PLUGIN_DIFY_INNER_API_KEY: ${PLUGIN_DIFY_INNER_API_KEY:-QaHbTe77CtuXmsfyhR7+vRjI/+XbV1AaFy691iy+kGDv2Jvy0/eAh8Y1} - PLUGIN_DIFY_INNER_API_URL: ${PLUGIN_DIFY_INNER_API_URL:-http://api:5001} - PLUGIN_MAX_PACKAGE_SIZE: ${PLUGIN_MAX_PACKAGE_SIZE:-52428800} - PLUGIN_PPROF_ENABLED: ${PLUGIN_PPROF_ENABLED:-false} - POSITION_PROVIDER_EXCLUDES: ${POSITION_PROVIDER_EXCLUDES:-} - POSITION_PROVIDER_INCLUDES: ${POSITION_PROVIDER_INCLUDES:-} - POSITION_PROVIDER_PINS: ${POSITION_PROVIDER_PINS:-} - POSITION_TOOL_EXCLUDES: ${POSITION_TOOL_EXCLUDES:-} - POSITION_TOOL_INCLUDES: ${POSITION_TOOL_INCLUDES:-} - POSITION_TOOL_PINS: ${POSITION_TOOL_PINS:-} - POSTGRES_DB: ${POSTGRES_DB:-${DB_DATABASE}} - POSTGRES_EFFECTIVE_CACHE_SIZE: ${POSTGRES_EFFECTIVE_CACHE_SIZE:-4096MB} - POSTGRES_MAINTENANCE_WORK_MEM: ${POSTGRES_MAINTENANCE_WORK_MEM:-64MB} - POSTGRES_MAX_CONNECTIONS: ${POSTGRES_MAX_CONNECTIONS:-100} - POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-${DB_PASSWORD}} - POSTGRES_SHARED_BUFFERS: ${POSTGRES_SHARED_BUFFERS:-128MB} - POSTGRES_WORK_MEM: ${POSTGRES_WORK_MEM:-4MB} - PROMPT_GENERATION_MAX_TOKENS: ${PROMPT_GENERATION_MAX_TOKENS:-512} - QDRANT_API_KEY: ${QDRANT_API_KEY:-difyai123456} - QDRANT_CLIENT_TIMEOUT: ${QDRANT_CLIENT_TIMEOUT:-20} - QDRANT_GRPC_ENABLED: ${QDRANT_GRPC_ENABLED:-false} - QDRANT_GRPC_PORT: ${QDRANT_GRPC_PORT:-6334} - QDRANT_URL: ${QDRANT_URL:-http://qdrant:6333} - REDIS_CLUSTERS: ${REDIS_CLUSTERS:-} - REDIS_CLUSTERS_PASSWORD: ${REDIS_CLUSTERS_PASSWORD:-} - REDIS_DB: ${REDIS_DB:-0} - REDIS_HOST: ${REDIS_HOST:-redis} - REDIS_PASSWORD: ${REDIS_PASSWORD:-difyai123456} - REDIS_PORT: ${REDIS_PORT:-6379} - REDIS_SENTINELS: ${REDIS_SENTINELS:-} - REDIS_SENTINEL_PASSWORD: ${REDIS_SENTINEL_PASSWORD:-} - REDIS_SENTINEL_SERVICE_NAME: ${REDIS_SENTINEL_SERVICE_NAME:-} - REDIS_SENTINEL_SOCKET_TIMEOUT: ${REDIS_SENTINEL_SOCKET_TIMEOUT:-0.1} - REDIS_SENTINEL_USERNAME: ${REDIS_SENTINEL_USERNAME:-} - REDIS_USERNAME: ${REDIS_USERNAME:-} - REDIS_USE_CLUSTERS: ${REDIS_USE_CLUSTERS:-false} - REDIS_USE_SENTINEL: ${REDIS_USE_SENTINEL:-false} - REDIS_USE_SSL: ${REDIS_USE_SSL:-false} - REFRESH_TOKEN_EXPIRE_DAYS: ${REFRESH_TOKEN_EXPIRE_DAYS:-30} - RELYT_DATABASE: ${RELYT_DATABASE:-postgres} - RELYT_HOST: ${RELYT_HOST:-db} - RELYT_PASSWORD: ${RELYT_PASSWORD:-difyai123456} - RELYT_PORT: ${RELYT_PORT:-5432} - RELYT_USER: ${RELYT_USER:-postgres} - RESEND_API_KEY: ${RESEND_API_KEY:-your-resend-api-key} - RESEND_API_URL: ${RESEND_API_URL:-https://api.resend.com} - RESET_PASSWORD_TOKEN_EXPIRY_MINUTES: ${RESET_PASSWORD_TOKEN_EXPIRY_MINUTES:-5} - S3_ACCESS_KEY: ${S3_ACCESS_KEY:-} - S3_BUCKET_NAME: ${S3_BUCKET_NAME:-difyai} - S3_ENDPOINT: ${S3_ENDPOINT:-} - S3_REGION: ${S3_REGION:-us-east-1} - S3_SECRET_KEY: ${S3_SECRET_KEY:-} - S3_USE_AWS_MANAGED_IAM: ${S3_USE_AWS_MANAGED_IAM:-false} - SANDBOX_API_KEY: ${SANDBOX_API_KEY:-dify-sandbox} - SANDBOX_ENABLE_NETWORK: ${SANDBOX_ENABLE_NETWORK:-true} - SANDBOX_GIN_MODE: ${SANDBOX_GIN_MODE:-release} - SANDBOX_HTTPS_PROXY: ${SANDBOX_HTTPS_PROXY:-http://ssrf_proxy:3128} - SANDBOX_HTTP_PROXY: ${SANDBOX_HTTP_PROXY:-http://ssrf_proxy:3128} - SANDBOX_PORT: ${SANDBOX_PORT:-8194} - SANDBOX_WORKER_TIMEOUT: ${SANDBOX_WORKER_TIMEOUT:-15} - SCARF_NO_ANALYTICS: ${SCARF_NO_ANALYTICS:-true} - SECRET_KEY: ${SECRET_KEY:-sk-9f73s3ljTXVcMT3Blb3ljTqtsKiGHXVcMT3BlbkFJLK7U} - SENTRY_DSN: ${API_SENTRY_DSN:-} - SENTRY_PROFILES_SAMPLE_RATE: ${API_SENTRY_PROFILES_SAMPLE_RATE:-1.0} - SENTRY_TRACES_SAMPLE_RATE: ${API_SENTRY_TRACES_SAMPLE_RATE:-1.0} - SERVER_WORKER_AMOUNT: ${SERVER_WORKER_AMOUNT:-1} - SERVER_WORKER_CLASS: ${SERVER_WORKER_CLASS:-gevent} - SERVER_WORKER_CONNECTIONS: ${SERVER_WORKER_CONNECTIONS:-10} - SERVICE_API_URL: ${SERVICE_API_URL:-} - SMTP_OPPORTUNISTIC_TLS: ${SMTP_OPPORTUNISTIC_TLS:-false} - SMTP_PASSWORD: ${SMTP_PASSWORD:-} - SMTP_PORT: ${SMTP_PORT:-465} - SMTP_SERVER: ${SMTP_SERVER:-} - SMTP_USERNAME: ${SMTP_USERNAME:-} - SMTP_USE_TLS: ${SMTP_USE_TLS:-true} - SQLALCHEMY_ECHO: ${SQLALCHEMY_ECHO:-false} - SQLALCHEMY_POOL_RECYCLE: ${SQLALCHEMY_POOL_RECYCLE:-3600} - SQLALCHEMY_POOL_SIZE: ${SQLALCHEMY_POOL_SIZE:-30} - SSRF_COREDUMP_DIR: ${SSRF_COREDUMP_DIR:-/var/spool/squid} - SSRF_DEFAULT_CONNECT_TIME_OUT: ${SSRF_DEFAULT_CONNECT_TIME_OUT:-5} - SSRF_DEFAULT_READ_TIME_OUT: ${SSRF_DEFAULT_READ_TIME_OUT:-5} - SSRF_DEFAULT_TIME_OUT: ${SSRF_DEFAULT_TIME_OUT:-5} - SSRF_DEFAULT_WRITE_TIME_OUT: ${SSRF_DEFAULT_WRITE_TIME_OUT:-5} - SSRF_HTTP_PORT: ${SSRF_HTTP_PORT:-3128} - SSRF_PROXY_HTTPS_URL: ${SSRF_PROXY_HTTPS_URL:-http://ssrf_proxy:3128} - SSRF_PROXY_HTTP_URL: ${SSRF_PROXY_HTTP_URL:-http://ssrf_proxy:3128} - SSRF_REVERSE_PROXY_PORT: ${SSRF_REVERSE_PROXY_PORT:-8194} - SSRF_SANDBOX_HOST: ${SSRF_SANDBOX_HOST:-sandbox} - STORAGE_TYPE: ${STORAGE_TYPE:-opendal} - SUPABASE_API_KEY: ${SUPABASE_API_KEY:-your-access-key} - SUPABASE_BUCKET_NAME: ${SUPABASE_BUCKET_NAME:-your-bucket-name} - SUPABASE_URL: ${SUPABASE_URL:-your-server-url} - TEMPLATE_TRANSFORM_MAX_LENGTH: ${TEMPLATE_TRANSFORM_MAX_LENGTH:-80000} - TENCENT_COS_BUCKET_NAME: ${TENCENT_COS_BUCKET_NAME:-your-bucket-name} - TENCENT_COS_REGION: ${TENCENT_COS_REGION:-your-region} - TENCENT_COS_SCHEME: ${TENCENT_COS_SCHEME:-your-scheme} - TENCENT_COS_SECRET_ID: ${TENCENT_COS_SECRET_ID:-your-secret-id} - TENCENT_COS_SECRET_KEY: ${TENCENT_COS_SECRET_KEY:-your-secret-key} - TENCENT_VECTOR_DB_API_KEY: ${TENCENT_VECTOR_DB_API_KEY:-dify} - TENCENT_VECTOR_DB_DATABASE: ${TENCENT_VECTOR_DB_DATABASE:-dify} - TENCENT_VECTOR_DB_REPLICAS: ${TENCENT_VECTOR_DB_REPLICAS:-2} - TENCENT_VECTOR_DB_SHARD: ${TENCENT_VECTOR_DB_SHARD:-1} - TENCENT_VECTOR_DB_TIMEOUT: ${TENCENT_VECTOR_DB_TIMEOUT:-30} - TENCENT_VECTOR_DB_URL: ${TENCENT_VECTOR_DB_URL:-http://127.0.0.1} - TENCENT_VECTOR_DB_USERNAME: ${TENCENT_VECTOR_DB_USERNAME:-dify} - TEXT_GENERATION_TIMEOUT_MS: ${TEXT_GENERATION_TIMEOUT_MS:-60000} - TIDB_API_URL: ${TIDB_API_URL:-http://127.0.0.1} - TIDB_IAM_API_URL: ${TIDB_IAM_API_URL:-http://127.0.0.1} - TIDB_ON_QDRANT_API_KEY: ${TIDB_ON_QDRANT_API_KEY:-dify} - TIDB_ON_QDRANT_CLIENT_TIMEOUT: ${TIDB_ON_QDRANT_CLIENT_TIMEOUT:-20} - TIDB_ON_QDRANT_GRPC_ENABLED: ${TIDB_ON_QDRANT_GRPC_ENABLED:-false} - TIDB_ON_QDRANT_GRPC_PORT: ${TIDB_ON_QDRANT_GRPC_PORT:-6334} - TIDB_ON_QDRANT_URL: ${TIDB_ON_QDRANT_URL:-http://127.0.0.1} - TIDB_PRIVATE_KEY: ${TIDB_PRIVATE_KEY:-dify} - TIDB_PROJECT_ID: ${TIDB_PROJECT_ID:-dify} - TIDB_PUBLIC_KEY: ${TIDB_PUBLIC_KEY:-dify} - TIDB_REGION: ${TIDB_REGION:-regions/aws-us-east-1} - TIDB_SPEND_LIMIT: ${TIDB_SPEND_LIMIT:-100} - TIDB_VECTOR_DATABASE: ${TIDB_VECTOR_DATABASE:-dify} - TIDB_VECTOR_HOST: ${TIDB_VECTOR_HOST:-tidb} - TIDB_VECTOR_PASSWORD: ${TIDB_VECTOR_PASSWORD:-} - TIDB_VECTOR_PORT: ${TIDB_VECTOR_PORT:-4000} - TIDB_VECTOR_USER: ${TIDB_VECTOR_USER:-} - TOP_K_MAX_VALUE: ${TOP_K_MAX_VALUE:-10} - UNSTRUCTURED_API_KEY: ${UNSTRUCTURED_API_KEY:-} - UNSTRUCTURED_API_URL: ${UNSTRUCTURED_API_URL:-} - UPLOAD_AUDIO_FILE_SIZE_LIMIT: ${UPLOAD_AUDIO_FILE_SIZE_LIMIT:-50} - UPLOAD_FILE_BATCH_LIMIT: ${UPLOAD_FILE_BATCH_LIMIT:-5} - UPLOAD_FILE_SIZE_LIMIT: ${UPLOAD_FILE_SIZE_LIMIT:-15} - UPLOAD_IMAGE_FILE_SIZE_LIMIT: ${UPLOAD_IMAGE_FILE_SIZE_LIMIT:-10} - UPLOAD_VIDEO_FILE_SIZE_LIMIT: ${UPLOAD_VIDEO_FILE_SIZE_LIMIT:-100} - UPSTASH_VECTOR_TOKEN: ${UPSTASH_VECTOR_TOKEN:-dify} - UPSTASH_VECTOR_URL: ${UPSTASH_VECTOR_URL:-https://xxx-vector.upstash.io} - VECTOR_STORE: ${VECTOR_STORE:-weaviate} - VIKINGDB_ACCESS_KEY: ${VIKINGDB_ACCESS_KEY:-your-ak} - VIKINGDB_CONNECTION_TIMEOUT: ${VIKINGDB_CONNECTION_TIMEOUT:-30} - VIKINGDB_HOST: ${VIKINGDB_HOST:-api-vikingdb.xxx.volces.com} - VIKINGDB_REGION: ${VIKINGDB_REGION:-cn-shanghai} - VIKINGDB_SCHEMA: ${VIKINGDB_SCHEMA:-http} - VIKINGDB_SECRET_KEY: ${VIKINGDB_SECRET_KEY:-your-sk} - VIKINGDB_SOCKET_TIMEOUT: ${VIKINGDB_SOCKET_TIMEOUT:-30} - VOLCENGINE_TOS_ACCESS_KEY: ${VOLCENGINE_TOS_ACCESS_KEY:-your-access-key} - VOLCENGINE_TOS_BUCKET_NAME: ${VOLCENGINE_TOS_BUCKET_NAME:-your-bucket-name} - VOLCENGINE_TOS_ENDPOINT: ${VOLCENGINE_TOS_ENDPOINT:-your-server-url} - VOLCENGINE_TOS_REGION: ${VOLCENGINE_TOS_REGION:-your-region} - VOLCENGINE_TOS_SECRET_KEY: ${VOLCENGINE_TOS_SECRET_KEY:-your-secret-key} - WEAVIATE_API_KEY: ${WEAVIATE_API_KEY:-WVF5YThaHlkYwhGUSmCRgsX3tD5ngdN8pkih} - WEAVIATE_AUTHENTICATION_ANONYMOUS_ACCESS_ENABLED: ${WEAVIATE_AUTHENTICATION_ANONYMOUS_ACCESS_ENABLED:-true} - WEAVIATE_AUTHENTICATION_APIKEY_ALLOWED_KEYS: ${WEAVIATE_AUTHENTICATION_APIKEY_ALLOWED_KEYS:-WVF5YThaHlkYwhGUSmCRgsX3tD5ngdN8pkih} - WEAVIATE_AUTHENTICATION_APIKEY_ENABLED: ${WEAVIATE_AUTHENTICATION_APIKEY_ENABLED:-true} - WEAVIATE_AUTHENTICATION_APIKEY_USERS: ${WEAVIATE_AUTHENTICATION_APIKEY_USERS:-hello@dify.ai} - WEAVIATE_AUTHORIZATION_ADMINLIST_ENABLED: ${WEAVIATE_AUTHORIZATION_ADMINLIST_ENABLED:-true} - WEAVIATE_AUTHORIZATION_ADMINLIST_USERS: ${WEAVIATE_AUTHORIZATION_ADMINLIST_USERS:-hello@dify.ai} - WEAVIATE_CLUSTER_HOSTNAME: ${WEAVIATE_CLUSTER_HOSTNAME:-node1} - WEAVIATE_DEFAULT_VECTORIZER_MODULE: ${WEAVIATE_DEFAULT_VECTORIZER_MODULE:-none} - WEAVIATE_ENDPOINT: ${WEAVIATE_ENDPOINT:-http://weaviate:8080} - WEAVIATE_PERSISTENCE_DATA_PATH: ${WEAVIATE_PERSISTENCE_DATA_PATH:-/var/lib/weaviate} - WEAVIATE_QUERY_DEFAULTS_LIMIT: ${WEAVIATE_QUERY_DEFAULTS_LIMIT:-25} - WEB_API_CORS_ALLOW_ORIGINS: ${WEB_API_CORS_ALLOW_ORIGINS:-*} - WEB_SENTRY_DSN: ${WEB_SENTRY_DSN:-} - WORKFLOW_CALL_MAX_DEPTH: ${WORKFLOW_CALL_MAX_DEPTH:-5} - WORKFLOW_FILE_UPLOAD_LIMIT: ${WORKFLOW_FILE_UPLOAD_LIMIT:-10} - WORKFLOW_MAX_EXECUTION_STEPS: ${WORKFLOW_MAX_EXECUTION_STEPS:-500} - WORKFLOW_MAX_EXECUTION_TIME: ${WORKFLOW_MAX_EXECUTION_TIME:-1200} - WORKFLOW_PARALLEL_DEPTH_LIMIT: ${WORKFLOW_PARALLEL_DEPTH_LIMIT:-3} - image: langgenius/dify-api:1.0.0 - networks: - - ssrf_proxy_network - - default - restart: always - volumes: - - ${DIFY_ROOT_PATH}/volumes/app/storage:/app/api/storage - certbot: - command: - - tail - - -f - - /dev/null - container_name: certbot-dify - entrypoint: - - /docker-entrypoint.sh - environment: - - CERTBOT_EMAIL=${CERTBOT_EMAIL} - - CERTBOT_DOMAIN=${CERTBOT_DOMAIN} - - CERTBOT_OPTIONS=${CERTBOT_OPTIONS:-} - image: certbot/certbot - profiles: - - certbot - volumes: - - ${DIFY_ROOT_PATH}/volumes/certbot/conf:/etc/letsencrypt - - ${DIFY_ROOT_PATH}/volumes/certbot/www:/var/www/html - - ${DIFY_ROOT_PATH}/volumes/certbot/logs:/var/log/letsencrypt - - ${DIFY_ROOT_PATH}/volumes/certbot/conf/live:/etc/letsencrypt/live - - ${DIFY_ROOT_PATH}/certbot/update-cert.template.txt:/update-cert.template.txt - - ${DIFY_ROOT_PATH}/certbot/docker-entrypoint.sh:/docker-entrypoint.sh - chroma: - container_name: chroma-dify - environment: - CHROMA_SERVER_AUTHN_CREDENTIALS: ${CHROMA_SERVER_AUTHN_CREDENTIALS:-difyai123456} - CHROMA_SERVER_AUTHN_PROVIDER: ${CHROMA_SERVER_AUTHN_PROVIDER:-chromadb.auth.token_authn.TokenAuthenticationServerProvider} - IS_PERSISTENT: ${CHROMA_IS_PERSISTENT:-TRUE} - image: ghcr.io/chroma-core/chroma:0.5.20 - profiles: - - chroma - restart: always - volumes: - - ${DIFY_ROOT_PATH}/volumes/chroma:/chroma/chroma - couchbase-server: - build: ./conf/couchbase-server - command: sh -c "/opt/couchbase/init/init-cbserver.sh" - container_name: couchbase-server - entrypoint: - - '' - environment: - - CLUSTER_NAME=dify_search - - COUCHBASE_ADMINISTRATOR_USERNAME=${COUCHBASE_USER:-Administrator} - - COUCHBASE_ADMINISTRATOR_PASSWORD=${COUCHBASE_PASSWORD:-password} - - COUCHBASE_BUCKET=${COUCHBASE_BUCKET_NAME:-Embeddings} - - COUCHBASE_BUCKET_RAMSIZE=512 - - COUCHBASE_RAM_SIZE=2048 - - COUCHBASE_EVENTING_RAM_SIZE=512 - - COUCHBASE_INDEX_RAM_SIZE=512 - - COUCHBASE_FTS_RAM_SIZE=1024 - healthcheck: - interval: 10s - retries: 10 - start_period: 30s - test: - - CMD-SHELL - - curl -s -f -u Administrator:password http://localhost:8091/pools/default/buckets - | grep -q '\[{' || exit 1 - timeout: 10s - hostname: couchbase-server - profiles: - - couchbase - restart: always - stdin_open: true - tty: true - volumes: - - ${DIFY_ROOT_PATH}/volumes/couchbase/data:/opt/couchbase/var/lib/couchbase/data - working_dir: /opt/couchbase - db: - command: "postgres -c 'max_connections=${POSTGRES_MAX_CONNECTIONS:-100}'\n \ - \ -c 'shared_buffers=${POSTGRES_SHARED_BUFFERS:-128MB}'\n -c 'work_mem=${POSTGRES_WORK_MEM:-4MB}'\n\ - \ -c 'maintenance_work_mem=${POSTGRES_MAINTENANCE_WORK_MEM:-64MB}'\n\ - \ -c 'effective_cache_size=${POSTGRES_EFFECTIVE_CACHE_SIZE:-4096MB}'\n" - container_name: db-dify - environment: - PGDATA: ${PGDATA:-/var/lib/postgresql/data/pgdata} - PGUSER: ${PGUSER:-postgres} - POSTGRES_DB: ${POSTGRES_DB:-dify} - POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-difyai123456} - healthcheck: - interval: 1s - retries: 30 - test: - - CMD - - pg_isready - timeout: 3s - image: postgres:15-alpine - ports: - - ${EXPOSE_DB_PORT:-5432}:5432 - restart: always - volumes: - - ${DIFY_ROOT_PATH}/volumes/db/data:/var/lib/postgresql/data - elasticsearch: - container_name: elasticsearch-dify - deploy: - resources: - limits: - memory: 2g - entrypoint: - - sh - - -c - - sh /docker-entrypoint-mount.sh - environment: - ELASTIC_PASSWORD: ${ELASTICSEARCH_PASSWORD:-elastic} - VECTOR_STORE: ${VECTOR_STORE:-} - cluster.name: dify-es-cluster - discovery.type: single-node - node.name: dify-es0 - xpack.license.self_generated.type: basic - xpack.security.enabled: 'true' - xpack.security.enrollment.enabled: 'false' - xpack.security.http.ssl.enabled: 'false' - healthcheck: - interval: 30s - retries: 50 - test: - - CMD - - curl - - -s - - http://localhost:9200/_cluster/health?pretty - timeout: 10s - image: docker.elastic.co/elasticsearch/elasticsearch:8.14.3 - ports: - - ${ELASTICSEARCH_PORT:-9200}:9200 - profiles: - - elasticsearch - - elasticsearch-ja - restart: always - volumes: - - ${DIFY_ROOT_PATH}/elasticsearch/docker-entrypoint.sh:/docker-entrypoint-mount.sh - - dify_es01_data:/usr/share/elasticsearch/data - etcd: - command: etcd -advertise-client-urls=http://127.0.0.1:2379 -listen-client-urls - http://0.0.0.0:2379 --data-dir /etcd - container_name: milvus-etcd-dify - environment: - ETCD_AUTO_COMPACTION_MODE: ${ETCD_AUTO_COMPACTION_MODE:-revision} - ETCD_AUTO_COMPACTION_RETENTION: ${ETCD_AUTO_COMPACTION_RETENTION:-1000} - ETCD_QUOTA_BACKEND_BYTES: ${ETCD_QUOTA_BACKEND_BYTES:-4294967296} - ETCD_SNAPSHOT_COUNT: ${ETCD_SNAPSHOT_COUNT:-50000} - healthcheck: - interval: 30s - retries: 3 - test: - - CMD - - etcdctl - - endpoint - - health - timeout: 20s - image: quay.io/coreos/etcd:v3.5.5 - networks: - - milvus - profiles: - - milvus - volumes: - - ${DIFY_ROOT_PATH}/volumes/milvus/etcd:/etcd - kibana: - container_name: kibana-dify - depends_on: - - elasticsearch - environment: - ELASTICSEARCH_HOSTS: http://elasticsearch:9200 - I18N_LOCALE: zh-CN - NO_PROXY: localhost,127.0.0.1,elasticsearch,kibana - SERVER_PORT: '5601' - XPACK_ENCRYPTEDSAVEDOBJECTS_ENCRYPTIONKEY: d1a66dfd-c4d3-4a0a-8290-2abcb83ab3aa - XPACK_FLEET_ISAIRGAPPED: 'true' - XPACK_SECURITY_ENABLED: 'true' - XPACK_SECURITY_ENROLLMENT_ENABLED: 'false' - XPACK_SECURITY_HTTP_SSL_ENABLED: 'false' - healthcheck: - interval: 30s - retries: 3 - test: - - CMD-SHELL - - curl -s http://localhost:5601 >/dev/null || exit 1 - timeout: 10s - image: docker.elastic.co/kibana/kibana:8.14.3 - ports: - - ${KIBANA_PORT:-5601}:5601 - profiles: - - elasticsearch - restart: always - milvus-standalone: - command: - - milvus - - run - - standalone - container_name: milvus-standalone-dify - depends_on: - - etcd - - minio - environment: - ETCD_ENDPOINTS: ${ETCD_ENDPOINTS:-etcd:2379} - MINIO_ADDRESS: ${MINIO_ADDRESS:-minio:9000} - common.security.authorizationEnabled: ${MILVUS_AUTHORIZATION_ENABLED:-true} - healthcheck: - interval: 30s - retries: 3 - start_period: 90s - test: - - CMD - - curl - - -f - - http://localhost:9091/healthz - timeout: 20s - image: milvusdb/milvus:v2.5.0-beta - networks: - - milvus - ports: - - 19530:19530 - - 9091:9091 - profiles: - - milvus - volumes: - - ${DIFY_ROOT_PATH}/volumes/milvus/milvus:/var/lib/milvus - minio: - command: minio server /minio_data --console-address ":9001" - container_name: milvus-minio-dify - environment: - MINIO_ACCESS_KEY: ${MINIO_ACCESS_KEY:-minioadmin} - MINIO_SECRET_KEY: ${MINIO_SECRET_KEY:-minioadmin} - healthcheck: - interval: 30s - retries: 3 - test: - - CMD - - curl - - -f - - http://localhost:9000/minio/health/live - timeout: 20s - image: minio/minio:RELEASE.2023-03-20T20-16-18Z - networks: - - milvus - profiles: - - milvus - volumes: - - ${DIFY_ROOT_PATH}/volumes/milvus/minio:/minio_data - myscale: - container_name: myscale-dify - image: myscale/myscaledb:1.6.4 - ports: - - ${MYSCALE_PORT:-8123}:${MYSCALE_PORT:-8123} - profiles: - - myscale - restart: always - tty: true - volumes: - - ${DIFY_ROOT_PATH}/volumes/myscale/data:/var/lib/clickhouse - - ${DIFY_ROOT_PATH}/volumes/myscale/log:/var/log/clickhouse-server - - ${DIFY_ROOT_PATH}/volumes/myscale/config/users.d/custom_users_config.xml:/etc/clickhouse-server/users.d/custom_users_config.xml - nginx: - container_name: nginx-dify - depends_on: - - api - - web - entrypoint: - - sh - - -c - - "cp /docker-entrypoint-mount.sh /docker-entrypoint.sh && sed -i 's/\r$$//' /docker-entrypoint.sh\ - \ && chmod +x /docker-entrypoint.sh && /docker-entrypoint.sh" - environment: - CERTBOT_DOMAIN: ${CERTBOT_DOMAIN:-} - NGINX_CLIENT_MAX_BODY_SIZE: ${NGINX_CLIENT_MAX_BODY_SIZE:-15M} - NGINX_ENABLE_CERTBOT_CHALLENGE: ${NGINX_ENABLE_CERTBOT_CHALLENGE:-false} - NGINX_HTTPS_ENABLED: ${NGINX_HTTPS_ENABLED:-false} - NGINX_KEEPALIVE_TIMEOUT: ${NGINX_KEEPALIVE_TIMEOUT:-65} - NGINX_PORT: ${NGINX_PORT:-80} - NGINX_PROXY_READ_TIMEOUT: ${NGINX_PROXY_READ_TIMEOUT:-3600s} - NGINX_PROXY_SEND_TIMEOUT: ${NGINX_PROXY_SEND_TIMEOUT:-3600s} - NGINX_SERVER_NAME: ${NGINX_SERVER_NAME:-_} - NGINX_SSL_CERT_FILENAME: ${NGINX_SSL_CERT_FILENAME:-dify.crt} - NGINX_SSL_CERT_KEY_FILENAME: ${NGINX_SSL_CERT_KEY_FILENAME:-dify.key} - NGINX_SSL_PORT: ${NGINX_SSL_PORT:-443} - NGINX_SSL_PROTOCOLS: ${NGINX_SSL_PROTOCOLS:-TLSv1.1 TLSv1.2 TLSv1.3} - NGINX_WORKER_PROCESSES: ${NGINX_WORKER_PROCESSES:-auto} - image: nginx:latest - ports: - - ${PANEL_APP_PORT_HTTP:-80}:${NGINX_PORT:-80} - - ${PANEL_APP_PORT_HTTPS:-443}:${NGINX_SSL_PORT:-443} - restart: always - volumes: - - ${DIFY_ROOT_PATH}/nginx/nginx.conf.template:/etc/nginx/nginx.conf.template - - ${DIFY_ROOT_PATH}/nginx/proxy.conf.template:/etc/nginx/proxy.conf.template - - ${DIFY_ROOT_PATH}/nginx/https.conf.template:/etc/nginx/https.conf.template - - ${DIFY_ROOT_PATH}/nginx/conf.d:/etc/nginx/conf.d - - ${DIFY_ROOT_PATH}/nginx/docker-entrypoint.sh:/docker-entrypoint-mount.sh - - ${DIFY_ROOT_PATH}/nginx/ssl:/etc/ssl - - ${DIFY_ROOT_PATH}/volumes/certbot/conf/live:/etc/letsencrypt/live - - ${DIFY_ROOT_PATH}/volumes/certbot/conf:/etc/letsencrypt - - ${DIFY_ROOT_PATH}/volumes/certbot/www:/var/www/html - oceanbase: - container_name: oceanbase-dify - environment: - OB_CLUSTER_NAME: ${OCEANBASE_CLUSTER_NAME:-difyai} - OB_MEMORY_LIMIT: ${OCEANBASE_MEMORY_LIMIT:-6G} - OB_SERVER_IP: 127.0.0.1 - OB_SYS_PASSWORD: ${OCEANBASE_VECTOR_PASSWORD:-difyai123456} - OB_TENANT_PASSWORD: ${OCEANBASE_VECTOR_PASSWORD:-difyai123456} - image: quay.io/oceanbase/oceanbase-ce:4.3.3.0-100000142024101215 - profiles: - - oceanbase - restart: always - volumes: - - ${DIFY_ROOT_PATH}/volumes/oceanbase/data:/root/ob - - ${DIFY_ROOT_PATH}/volumes/oceanbase/conf:/root/.obd/cluster - - ${DIFY_ROOT_PATH}/volumes/oceanbase/init.d:/root/boot/init.d - opensearch: - container_name: opensearch-dify - environment: - OPENSEARCH_INITIAL_ADMIN_PASSWORD: ${OPENSEARCH_INITIAL_ADMIN_PASSWORD:-Qazwsxedc!@#123} - OPENSEARCH_JAVA_OPTS: -Xms${OPENSEARCH_JAVA_OPTS_MIN:-512m} -Xmx${OPENSEARCH_JAVA_OPTS_MAX:-1024m} - bootstrap.memory_lock: ${OPENSEARCH_BOOTSTRAP_MEMORY_LOCK:-true} - discovery.type: ${OPENSEARCH_DISCOVERY_TYPE:-single-node} - image: opensearchproject/opensearch:latest - networks: - - opensearch-net - profiles: - - opensearch - ulimits: - memlock: - hard: ${OPENSEARCH_MEMLOCK_HARD:--1} - soft: ${OPENSEARCH_MEMLOCK_SOFT:--1} - nofile: - hard: ${OPENSEARCH_NOFILE_HARD:-65536} - soft: ${OPENSEARCH_NOFILE_SOFT:-65536} - volumes: - - ${DIFY_ROOT_PATH}/volumes/opensearch/data:/usr/share/opensearch/data - opensearch-dashboards: - container_name: opensearch-dashboards-dify - depends_on: - - opensearch - environment: - OPENSEARCH_HOSTS: '["https://opensearch:9200"]' - image: opensearchproject/opensearch-dashboards:latest - networks: - - opensearch-net - profiles: - - opensearch - volumes: - - ${DIFY_ROOT_PATH}/volumes/opensearch/opensearch_dashboards.yml:/usr/share/opensearch-dashboards/config/opensearch_dashboards.yml - oracle: - container_name: oracle-dify - environment: - ORACLE_CHARACTERSET: ${ORACLE_CHARACTERSET:-AL32UTF8} - ORACLE_PWD: ${ORACLE_PWD:-Dify123456} - image: container-registry.oracle.com/database/free:latest - profiles: - - oracle - restart: always - volumes: - - source: oradata - target: /opt/oracle/oradata - type: volume - - ${DIFY_ROOT_PATH}/startupscripts:/opt/oracle/scripts/startup - pgvecto-rs: - container_name: pgvecto-rs-dify - environment: - PGDATA: ${PGVECTOR_PGDATA:-/var/lib/postgresql/data/pgdata} - PGUSER: ${PGVECTOR_PGUSER:-postgres} - POSTGRES_DB: ${PGVECTOR_POSTGRES_DB:-dify} - POSTGRES_PASSWORD: ${PGVECTOR_POSTGRES_PASSWORD:-difyai123456} - healthcheck: - interval: 1s - retries: 30 - test: - - CMD - - pg_isready - timeout: 3s - image: tensorchord/pgvecto-rs:pg16-v0.3.0 - profiles: - - pgvecto-rs - restart: always - volumes: - - ${DIFY_ROOT_PATH}/volumes/pgvecto_rs/data:/var/lib/postgresql/data - pgvector: - container_name: pgvector-dify - environment: - PGDATA: ${PGVECTOR_PGDATA:-/var/lib/postgresql/data/pgdata} - PGUSER: ${PGVECTOR_PGUSER:-postgres} - POSTGRES_DB: ${PGVECTOR_POSTGRES_DB:-dify} - POSTGRES_PASSWORD: ${PGVECTOR_POSTGRES_PASSWORD:-difyai123456} - healthcheck: - interval: 1s - retries: 30 - test: - - CMD - - pg_isready - timeout: 3s - image: pgvector/pgvector:pg16 - profiles: - - pgvector - restart: always - volumes: - - ${DIFY_ROOT_PATH}/volumes/pgvector/data:/var/lib/postgresql/data - plugin_daemon: - container_name: plugin_daemon-dify - environment: - ACCESS_TOKEN_EXPIRE_MINUTES: ${ACCESS_TOKEN_EXPIRE_MINUTES:-60} - ALIYUN_OSS_ACCESS_KEY: ${ALIYUN_OSS_ACCESS_KEY:-your-access-key} - ALIYUN_OSS_AUTH_VERSION: ${ALIYUN_OSS_AUTH_VERSION:-v4} - ALIYUN_OSS_BUCKET_NAME: ${ALIYUN_OSS_BUCKET_NAME:-your-bucket-name} - ALIYUN_OSS_ENDPOINT: ${ALIYUN_OSS_ENDPOINT:-https://oss-ap-southeast-1-internal.aliyuncs.com} - ALIYUN_OSS_PATH: ${ALIYUN_OSS_PATH:-your-path} - ALIYUN_OSS_REGION: ${ALIYUN_OSS_REGION:-ap-southeast-1} - ALIYUN_OSS_SECRET_KEY: ${ALIYUN_OSS_SECRET_KEY:-your-secret-key} - ANALYTICDB_ACCOUNT: ${ANALYTICDB_ACCOUNT:-testaccount} - ANALYTICDB_HOST: ${ANALYTICDB_HOST:-gp-test.aliyuncs.com} - ANALYTICDB_INSTANCE_ID: ${ANALYTICDB_INSTANCE_ID:-gp-ab123456} - ANALYTICDB_KEY_ID: ${ANALYTICDB_KEY_ID:-your-ak} - ANALYTICDB_KEY_SECRET: ${ANALYTICDB_KEY_SECRET:-your-sk} - ANALYTICDB_MAX_CONNECTION: ${ANALYTICDB_MAX_CONNECTION:-5} - ANALYTICDB_MIN_CONNECTION: ${ANALYTICDB_MIN_CONNECTION:-1} - ANALYTICDB_NAMESPACE: ${ANALYTICDB_NAMESPACE:-dify} - ANALYTICDB_NAMESPACE_PASSWORD: ${ANALYTICDB_NAMESPACE_PASSWORD:-difypassword} - ANALYTICDB_PASSWORD: ${ANALYTICDB_PASSWORD:-testpassword} - ANALYTICDB_PORT: ${ANALYTICDB_PORT:-5432} - ANALYTICDB_REGION_ID: ${ANALYTICDB_REGION_ID:-cn-hangzhou} - API_SENTRY_DSN: ${API_SENTRY_DSN:-} - API_SENTRY_PROFILES_SAMPLE_RATE: ${API_SENTRY_PROFILES_SAMPLE_RATE:-1.0} - API_SENTRY_TRACES_SAMPLE_RATE: ${API_SENTRY_TRACES_SAMPLE_RATE:-1.0} - API_TOOL_DEFAULT_CONNECT_TIMEOUT: ${API_TOOL_DEFAULT_CONNECT_TIMEOUT:-10} - API_TOOL_DEFAULT_READ_TIMEOUT: ${API_TOOL_DEFAULT_READ_TIMEOUT:-60} - APP_API_URL: ${APP_API_URL:-} - APP_MAX_ACTIVE_REQUESTS: ${APP_MAX_ACTIVE_REQUESTS:-0} - APP_MAX_EXECUTION_TIME: ${APP_MAX_EXECUTION_TIME:-1200} - APP_WEB_URL: ${APP_WEB_URL:-} - AZURE_BLOB_ACCOUNT_KEY: ${AZURE_BLOB_ACCOUNT_KEY:-difyai} - AZURE_BLOB_ACCOUNT_NAME: ${AZURE_BLOB_ACCOUNT_NAME:-difyai} - AZURE_BLOB_ACCOUNT_URL: ${AZURE_BLOB_ACCOUNT_URL:-https://.blob.core.windows.net} - AZURE_BLOB_CONTAINER_NAME: ${AZURE_BLOB_CONTAINER_NAME:-difyai-container} - BAIDU_OBS_ACCESS_KEY: ${BAIDU_OBS_ACCESS_KEY:-your-access-key} - BAIDU_OBS_BUCKET_NAME: ${BAIDU_OBS_BUCKET_NAME:-your-bucket-name} - BAIDU_OBS_ENDPOINT: ${BAIDU_OBS_ENDPOINT:-your-server-url} - BAIDU_OBS_SECRET_KEY: ${BAIDU_OBS_SECRET_KEY:-your-secret-key} - BAIDU_VECTOR_DB_ACCOUNT: ${BAIDU_VECTOR_DB_ACCOUNT:-root} - BAIDU_VECTOR_DB_API_KEY: ${BAIDU_VECTOR_DB_API_KEY:-dify} - BAIDU_VECTOR_DB_CONNECTION_TIMEOUT_MS: ${BAIDU_VECTOR_DB_CONNECTION_TIMEOUT_MS:-30000} - BAIDU_VECTOR_DB_DATABASE: ${BAIDU_VECTOR_DB_DATABASE:-dify} - BAIDU_VECTOR_DB_ENDPOINT: ${BAIDU_VECTOR_DB_ENDPOINT:-http://127.0.0.1:5287} - BAIDU_VECTOR_DB_REPLICAS: ${BAIDU_VECTOR_DB_REPLICAS:-3} - BAIDU_VECTOR_DB_SHARD: ${BAIDU_VECTOR_DB_SHARD:-1} - BROKER_USE_SSL: ${BROKER_USE_SSL:-false} - CELERY_AUTO_SCALE: ${CELERY_AUTO_SCALE:-false} - CELERY_BROKER_URL: ${CELERY_BROKER_URL:-redis://:difyai123456@redis:6379/1} - CELERY_MAX_WORKERS: ${CELERY_MAX_WORKERS:-} - CELERY_MIN_WORKERS: ${CELERY_MIN_WORKERS:-} - CELERY_SENTINEL_MASTER_NAME: ${CELERY_SENTINEL_MASTER_NAME:-} - CELERY_SENTINEL_SOCKET_TIMEOUT: ${CELERY_SENTINEL_SOCKET_TIMEOUT:-0.1} - CELERY_USE_SENTINEL: ${CELERY_USE_SENTINEL:-false} - CELERY_WORKER_AMOUNT: ${CELERY_WORKER_AMOUNT:-} - CELERY_WORKER_CLASS: ${CELERY_WORKER_CLASS:-} - CERTBOT_DOMAIN: ${CERTBOT_DOMAIN:-your_domain.com} - CERTBOT_EMAIL: ${CERTBOT_EMAIL:-your_email@example.com} - CERTBOT_OPTIONS: ${CERTBOT_OPTIONS:-} - CHECK_UPDATE_URL: ${CHECK_UPDATE_URL:-https://updates.dify.ai} - CHROMA_AUTH_CREDENTIALS: ${CHROMA_AUTH_CREDENTIALS:-} - CHROMA_AUTH_PROVIDER: ${CHROMA_AUTH_PROVIDER:-chromadb.auth.token_authn.TokenAuthClientProvider} - CHROMA_DATABASE: ${CHROMA_DATABASE:-default_database} - CHROMA_HOST: ${CHROMA_HOST:-127.0.0.1} - CHROMA_IS_PERSISTENT: ${CHROMA_IS_PERSISTENT:-TRUE} - CHROMA_PORT: ${CHROMA_PORT:-8000} - CHROMA_SERVER_AUTHN_CREDENTIALS: ${CHROMA_SERVER_AUTHN_CREDENTIALS:-difyai123456} - CHROMA_SERVER_AUTHN_PROVIDER: ${CHROMA_SERVER_AUTHN_PROVIDER:-chromadb.auth.token_authn.TokenAuthenticationServerProvider} - CHROMA_TENANT: ${CHROMA_TENANT:-default_tenant} - CODE_EXECUTION_API_KEY: ${CODE_EXECUTION_API_KEY:-dify-sandbox} - CODE_EXECUTION_CONNECT_TIMEOUT: ${CODE_EXECUTION_CONNECT_TIMEOUT:-10} - CODE_EXECUTION_ENDPOINT: ${CODE_EXECUTION_ENDPOINT:-http://sandbox:8194} - CODE_EXECUTION_READ_TIMEOUT: ${CODE_EXECUTION_READ_TIMEOUT:-60} - CODE_EXECUTION_WRITE_TIMEOUT: ${CODE_EXECUTION_WRITE_TIMEOUT:-10} - CODE_GENERATION_MAX_TOKENS: ${CODE_GENERATION_MAX_TOKENS:-1024} - CODE_MAX_DEPTH: ${CODE_MAX_DEPTH:-5} - CODE_MAX_NUMBER: ${CODE_MAX_NUMBER:-9223372036854775807} - CODE_MAX_NUMBER_ARRAY_LENGTH: ${CODE_MAX_NUMBER_ARRAY_LENGTH:-1000} - CODE_MAX_OBJECT_ARRAY_LENGTH: ${CODE_MAX_OBJECT_ARRAY_LENGTH:-30} - CODE_MAX_PRECISION: ${CODE_MAX_PRECISION:-20} - CODE_MAX_STRING_ARRAY_LENGTH: ${CODE_MAX_STRING_ARRAY_LENGTH:-30} - CODE_MAX_STRING_LENGTH: ${CODE_MAX_STRING_LENGTH:-80000} - CODE_MIN_NUMBER: ${CODE_MIN_NUMBER:--9223372036854775808} - CONSOLE_API_URL: ${CONSOLE_API_URL:-} - CONSOLE_CORS_ALLOW_ORIGINS: ${CONSOLE_CORS_ALLOW_ORIGINS:-*} - CONSOLE_WEB_URL: ${CONSOLE_WEB_URL:-} - COUCHBASE_BUCKET_NAME: ${COUCHBASE_BUCKET_NAME:-Embeddings} - COUCHBASE_CONNECTION_STRING: ${COUCHBASE_CONNECTION_STRING:-couchbase://couchbase-server} - COUCHBASE_PASSWORD: ${COUCHBASE_PASSWORD:-password} - COUCHBASE_SCOPE_NAME: ${COUCHBASE_SCOPE_NAME:-_default} - COUCHBASE_USER: ${COUCHBASE_USER:-Administrator} - CREATE_TIDB_SERVICE_JOB_ENABLED: ${CREATE_TIDB_SERVICE_JOB_ENABLED:-false} - CSP_WHITELIST: ${CSP_WHITELIST:-} - DB_DATABASE: ${DB_PLUGIN_DATABASE:-dify_plugin} - DB_HOST: ${DB_HOST:-db} - DB_PASSWORD: ${DB_PASSWORD:-difyai123456} - DB_PLUGIN_DATABASE: ${DB_PLUGIN_DATABASE:-dify_plugin} - DB_PORT: ${DB_PORT:-5432} - DB_USERNAME: ${DB_USERNAME:-postgres} - DEBUG: ${DEBUG:-false} - DEPLOY_ENV: ${DEPLOY_ENV:-PRODUCTION} - DIFY_BIND_ADDRESS: ${DIFY_BIND_ADDRESS:-0.0.0.0} - DIFY_INNER_API_KEY: ${INNER_API_KEY_FOR_PLUGIN:-QaHbTe77CtuXmsfyhR7+vRjI/+XbV1AaFy691iy+kGDv2Jvy0/eAh8Y1} - DIFY_INNER_API_URL: ${PLUGIN_DIFY_INNER_API_URL:-http://api:5001} - DIFY_PORT: ${DIFY_PORT:-5001} - ELASTICSEARCH_HOST: ${ELASTICSEARCH_HOST:-0.0.0.0} - ELASTICSEARCH_PASSWORD: ${ELASTICSEARCH_PASSWORD:-elastic} - ELASTICSEARCH_PORT: ${ELASTICSEARCH_PORT:-9200} - ELASTICSEARCH_USERNAME: ${ELASTICSEARCH_USERNAME:-elastic} - ENDPOINT_URL_TEMPLATE: ${ENDPOINT_URL_TEMPLATE:-http://localhost/e/{hook_id}} - ETCD_AUTO_COMPACTION_MODE: ${ETCD_AUTO_COMPACTION_MODE:-revision} - ETCD_AUTO_COMPACTION_RETENTION: ${ETCD_AUTO_COMPACTION_RETENTION:-1000} - ETCD_ENDPOINTS: ${ETCD_ENDPOINTS:-etcd:2379} - ETCD_QUOTA_BACKEND_BYTES: ${ETCD_QUOTA_BACKEND_BYTES:-4294967296} - ETCD_SNAPSHOT_COUNT: ${ETCD_SNAPSHOT_COUNT:-50000} - ETL_TYPE: ${ETL_TYPE:-dify} - EXPOSE_NGINX_PORT: ${PANEL_APP_PORT_HTTP:-8080} - EXPOSE_NGINX_SSL_PORT: ${PANEL_APP_PORT_HTTPS:-8443} - EXPOSE_PLUGIN_DAEMON_PORT: ${EXPOSE_PLUGIN_DAEMON_PORT:-5002} - EXPOSE_PLUGIN_DEBUGGING_HOST: ${EXPOSE_PLUGIN_DEBUGGING_HOST:-localhost} - EXPOSE_PLUGIN_DEBUGGING_PORT: ${EXPOSE_PLUGIN_DEBUGGING_PORT:-5003} - FILES_ACCESS_TIMEOUT: ${FILES_ACCESS_TIMEOUT:-300} - FILES_URL: ${FILES_URL:-} - FLASK_DEBUG: ${FLASK_DEBUG:-false} - FORCE_VERIFYING_SIGNATURE: ${FORCE_VERIFYING_SIGNATURE:-true} - GOOGLE_STORAGE_BUCKET_NAME: ${GOOGLE_STORAGE_BUCKET_NAME:-your-bucket-name} - GOOGLE_STORAGE_SERVICE_ACCOUNT_JSON_BASE64: ${GOOGLE_STORAGE_SERVICE_ACCOUNT_JSON_BASE64:-} - GUNICORN_TIMEOUT: ${GUNICORN_TIMEOUT:-360} - HTTP_REQUEST_NODE_MAX_BINARY_SIZE: ${HTTP_REQUEST_NODE_MAX_BINARY_SIZE:-10485760} - HTTP_REQUEST_NODE_MAX_TEXT_SIZE: ${HTTP_REQUEST_NODE_MAX_TEXT_SIZE:-1048576} - HUAWEI_OBS_ACCESS_KEY: ${HUAWEI_OBS_ACCESS_KEY:-your-access-key} - HUAWEI_OBS_BUCKET_NAME: ${HUAWEI_OBS_BUCKET_NAME:-your-bucket-name} - HUAWEI_OBS_SECRET_KEY: ${HUAWEI_OBS_SECRET_KEY:-your-secret-key} - HUAWEI_OBS_SERVER: ${HUAWEI_OBS_SERVER:-your-server-url} - INDEXING_MAX_SEGMENTATION_TOKENS_LENGTH: ${INDEXING_MAX_SEGMENTATION_TOKENS_LENGTH:-4000} - INIT_PASSWORD: ${INIT_PASSWORD:-} - INVITE_EXPIRY_HOURS: ${INVITE_EXPIRY_HOURS:-72} - KIBANA_PORT: ${KIBANA_PORT:-5601} - LINDORM_PASSWORD: ${LINDORM_PASSWORD:-lindorm} - LINDORM_URL: ${LINDORM_URL:-http://lindorm:30070} - LINDORM_USERNAME: ${LINDORM_USERNAME:-lindorm} - LOG_DATEFORMAT: ${LOG_DATEFORMAT:-%Y-%m-%d %H:%M:%S} - LOG_FILE: ${LOG_FILE:-/app/logs/server.log} - LOG_FILE_BACKUP_COUNT: ${LOG_FILE_BACKUP_COUNT:-5} - LOG_FILE_MAX_SIZE: ${LOG_FILE_MAX_SIZE:-20} - LOG_LEVEL: ${LOG_LEVEL:-INFO} - LOG_TZ: ${LOG_TZ:-UTC} - MAIL_DEFAULT_SEND_FROM: ${MAIL_DEFAULT_SEND_FROM:-} - MAIL_TYPE: ${MAIL_TYPE:-resend} - MARKETPLACE_API_URL: ${MARKETPLACE_API_URL:-https://marketplace.dify.ai} - MARKETPLACE_ENABLED: ${MARKETPLACE_ENABLED:-true} - MAX_PLUGIN_PACKAGE_SIZE: ${PLUGIN_MAX_PACKAGE_SIZE:-52428800} - MAX_SUBMIT_COUNT: ${MAX_SUBMIT_COUNT:-100} - MAX_VARIABLE_SIZE: ${MAX_VARIABLE_SIZE:-204800} - MIGRATION_ENABLED: ${MIGRATION_ENABLED:-true} - MILVUS_AUTHORIZATION_ENABLED: ${MILVUS_AUTHORIZATION_ENABLED:-true} - MILVUS_ENABLE_HYBRID_SEARCH: ${MILVUS_ENABLE_HYBRID_SEARCH:-False} - MILVUS_PASSWORD: ${MILVUS_PASSWORD:-Milvus} - MILVUS_TOKEN: ${MILVUS_TOKEN:-} - MILVUS_URI: ${MILVUS_URI:-http://127.0.0.1:19530} - MILVUS_USER: ${MILVUS_USER:-root} - MINIO_ACCESS_KEY: ${MINIO_ACCESS_KEY:-minioadmin} - MINIO_ADDRESS: ${MINIO_ADDRESS:-minio:9000} - MINIO_SECRET_KEY: ${MINIO_SECRET_KEY:-minioadmin} - MULTIMODAL_SEND_FORMAT: ${MULTIMODAL_SEND_FORMAT:-base64} - MYSCALE_DATABASE: ${MYSCALE_DATABASE:-dify} - MYSCALE_FTS_PARAMS: ${MYSCALE_FTS_PARAMS:-} - MYSCALE_HOST: ${MYSCALE_HOST:-myscale} - MYSCALE_PASSWORD: ${MYSCALE_PASSWORD:-} - MYSCALE_PORT: ${MYSCALE_PORT:-8123} - MYSCALE_USER: ${MYSCALE_USER:-default} - NGINX_CLIENT_MAX_BODY_SIZE: ${NGINX_CLIENT_MAX_BODY_SIZE:-15M} - NGINX_ENABLE_CERTBOT_CHALLENGE: ${NGINX_ENABLE_CERTBOT_CHALLENGE:-false} - NGINX_HTTPS_ENABLED: ${NGINX_HTTPS_ENABLED:-false} - NGINX_KEEPALIVE_TIMEOUT: ${NGINX_KEEPALIVE_TIMEOUT:-65} - NGINX_PORT: ${NGINX_PORT:-80} - NGINX_PROXY_READ_TIMEOUT: ${NGINX_PROXY_READ_TIMEOUT:-3600s} - NGINX_PROXY_SEND_TIMEOUT: ${NGINX_PROXY_SEND_TIMEOUT:-3600s} - NGINX_SERVER_NAME: ${NGINX_SERVER_NAME:-_} - NGINX_SSL_CERT_FILENAME: ${NGINX_SSL_CERT_FILENAME:-dify.crt} - NGINX_SSL_CERT_KEY_FILENAME: ${NGINX_SSL_CERT_KEY_FILENAME:-dify.key} - NGINX_SSL_PORT: ${NGINX_SSL_PORT:-443} - NGINX_SSL_PROTOCOLS: ${NGINX_SSL_PROTOCOLS:-TLSv1.1 TLSv1.2 TLSv1.3} - NGINX_WORKER_PROCESSES: ${NGINX_WORKER_PROCESSES:-auto} - NOTION_CLIENT_ID: ${NOTION_CLIENT_ID:-} - NOTION_CLIENT_SECRET: ${NOTION_CLIENT_SECRET:-} - NOTION_INTEGRATION_TYPE: ${NOTION_INTEGRATION_TYPE:-public} - NOTION_INTERNAL_SECRET: ${NOTION_INTERNAL_SECRET:-} - OCEANBASE_CLUSTER_NAME: ${OCEANBASE_CLUSTER_NAME:-difyai} - OCEANBASE_MEMORY_LIMIT: ${OCEANBASE_MEMORY_LIMIT:-6G} - OCEANBASE_VECTOR_DATABASE: ${OCEANBASE_VECTOR_DATABASE:-test} - OCEANBASE_VECTOR_HOST: ${OCEANBASE_VECTOR_HOST:-oceanbase} - OCEANBASE_VECTOR_PASSWORD: ${OCEANBASE_VECTOR_PASSWORD:-difyai123456} - OCEANBASE_VECTOR_PORT: ${OCEANBASE_VECTOR_PORT:-2881} - OCEANBASE_VECTOR_USER: ${OCEANBASE_VECTOR_USER:-root@test} - OCI_ACCESS_KEY: ${OCI_ACCESS_KEY:-your-access-key} - OCI_BUCKET_NAME: ${OCI_BUCKET_NAME:-your-bucket-name} - OCI_ENDPOINT: ${OCI_ENDPOINT:-https://objectstorage.us-ashburn-1.oraclecloud.com} - OCI_REGION: ${OCI_REGION:-us-ashburn-1} - OCI_SECRET_KEY: ${OCI_SECRET_KEY:-your-secret-key} - OPENAI_API_BASE: ${OPENAI_API_BASE:-https://api.openai.com/v1} - OPENDAL_FS_ROOT: ${OPENDAL_FS_ROOT:-storage} - OPENDAL_SCHEME: ${OPENDAL_SCHEME:-fs} - OPENSEARCH_BOOTSTRAP_MEMORY_LOCK: ${OPENSEARCH_BOOTSTRAP_MEMORY_LOCK:-true} - OPENSEARCH_DISCOVERY_TYPE: ${OPENSEARCH_DISCOVERY_TYPE:-single-node} - OPENSEARCH_HOST: ${OPENSEARCH_HOST:-opensearch} - OPENSEARCH_INITIAL_ADMIN_PASSWORD: ${OPENSEARCH_INITIAL_ADMIN_PASSWORD:-Qazwsxedc!@#123} - OPENSEARCH_JAVA_OPTS_MAX: ${OPENSEARCH_JAVA_OPTS_MAX:-1024m} - OPENSEARCH_JAVA_OPTS_MIN: ${OPENSEARCH_JAVA_OPTS_MIN:-512m} - OPENSEARCH_MEMLOCK_HARD: ${OPENSEARCH_MEMLOCK_HARD:--1} - OPENSEARCH_MEMLOCK_SOFT: ${OPENSEARCH_MEMLOCK_SOFT:--1} - OPENSEARCH_NOFILE_HARD: ${OPENSEARCH_NOFILE_HARD:-65536} - OPENSEARCH_NOFILE_SOFT: ${OPENSEARCH_NOFILE_SOFT:-65536} - OPENSEARCH_PASSWORD: ${OPENSEARCH_PASSWORD:-admin} - OPENSEARCH_PORT: ${OPENSEARCH_PORT:-9200} - OPENSEARCH_SECURE: ${OPENSEARCH_SECURE:-true} - OPENSEARCH_USER: ${OPENSEARCH_USER:-admin} - ORACLE_CHARACTERSET: ${ORACLE_CHARACTERSET:-AL32UTF8} - ORACLE_DATABASE: ${ORACLE_DATABASE:-FREEPDB1} - ORACLE_HOST: ${ORACLE_HOST:-oracle} - ORACLE_PASSWORD: ${ORACLE_PASSWORD:-dify} - ORACLE_PORT: ${ORACLE_PORT:-1521} - ORACLE_PWD: ${ORACLE_PWD:-Dify123456} - ORACLE_USER: ${ORACLE_USER:-dify} - PGDATA: ${PGDATA:-/var/lib/postgresql/data/pgdata} - PGUSER: ${PGUSER:-${DB_USERNAME}} - PGVECTOR_DATABASE: ${PGVECTOR_DATABASE:-dify} - PGVECTOR_HOST: ${PGVECTOR_HOST:-pgvector} - PGVECTOR_MAX_CONNECTION: ${PGVECTOR_MAX_CONNECTION:-5} - PGVECTOR_MIN_CONNECTION: ${PGVECTOR_MIN_CONNECTION:-1} - PGVECTOR_PASSWORD: ${PGVECTOR_PASSWORD:-difyai123456} - PGVECTOR_PGDATA: ${PGVECTOR_PGDATA:-/var/lib/postgresql/data/pgdata} - PGVECTOR_PGUSER: ${PGVECTOR_PGUSER:-postgres} - PGVECTOR_PORT: ${PGVECTOR_PORT:-5432} - PGVECTOR_POSTGRES_DB: ${PGVECTOR_POSTGRES_DB:-dify} - PGVECTOR_POSTGRES_PASSWORD: ${PGVECTOR_POSTGRES_PASSWORD:-difyai123456} - PGVECTOR_USER: ${PGVECTOR_USER:-postgres} - PGVECTO_RS_DATABASE: ${PGVECTO_RS_DATABASE:-dify} - PGVECTO_RS_HOST: ${PGVECTO_RS_HOST:-pgvecto-rs} - PGVECTO_RS_PASSWORD: ${PGVECTO_RS_PASSWORD:-difyai123456} - PGVECTO_RS_PORT: ${PGVECTO_RS_PORT:-5432} - PGVECTO_RS_USER: ${PGVECTO_RS_USER:-postgres} - PLUGIN_DAEMON_KEY: ${PLUGIN_DAEMON_KEY:-lYkiYYT6owG+71oLerGzA7GXCgOT++6ovaezWAjpCjf+Sjc3ZtU+qUEi} - PLUGIN_DAEMON_PORT: ${PLUGIN_DAEMON_PORT:-5002} - PLUGIN_DAEMON_URL: ${PLUGIN_DAEMON_URL:-http://plugin_daemon:5002} - PLUGIN_DEBUGGING_HOST: ${PLUGIN_DEBUGGING_HOST:-0.0.0.0} - PLUGIN_DEBUGGING_PORT: ${PLUGIN_DEBUGGING_PORT:-5003} - PLUGIN_DIFY_INNER_API_KEY: ${PLUGIN_DIFY_INNER_API_KEY:-QaHbTe77CtuXmsfyhR7+vRjI/+XbV1AaFy691iy+kGDv2Jvy0/eAh8Y1} - PLUGIN_DIFY_INNER_API_URL: ${PLUGIN_DIFY_INNER_API_URL:-http://api:5001} - PLUGIN_MAX_PACKAGE_SIZE: ${PLUGIN_MAX_PACKAGE_SIZE:-52428800} - PLUGIN_PPROF_ENABLED: ${PLUGIN_PPROF_ENABLED:-false} - PLUGIN_REMOTE_INSTALLING_HOST: ${PLUGIN_REMOTE_INSTALL_HOST:-0.0.0.0} - PLUGIN_REMOTE_INSTALLING_PORT: ${PLUGIN_REMOTE_INSTALL_PORT:-5003} - PLUGIN_WORKING_PATH: ${PLUGIN_WORKING_PATH:-/app/storage/cwd} - POSITION_PROVIDER_EXCLUDES: ${POSITION_PROVIDER_EXCLUDES:-} - POSITION_PROVIDER_INCLUDES: ${POSITION_PROVIDER_INCLUDES:-} - POSITION_PROVIDER_PINS: ${POSITION_PROVIDER_PINS:-} - POSITION_TOOL_EXCLUDES: ${POSITION_TOOL_EXCLUDES:-} - POSITION_TOOL_INCLUDES: ${POSITION_TOOL_INCLUDES:-} - POSITION_TOOL_PINS: ${POSITION_TOOL_PINS:-} - POSTGRES_DB: ${POSTGRES_DB:-${DB_DATABASE}} - POSTGRES_EFFECTIVE_CACHE_SIZE: ${POSTGRES_EFFECTIVE_CACHE_SIZE:-4096MB} - POSTGRES_MAINTENANCE_WORK_MEM: ${POSTGRES_MAINTENANCE_WORK_MEM:-64MB} - POSTGRES_MAX_CONNECTIONS: ${POSTGRES_MAX_CONNECTIONS:-100} - POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-${DB_PASSWORD}} - POSTGRES_SHARED_BUFFERS: ${POSTGRES_SHARED_BUFFERS:-128MB} - POSTGRES_WORK_MEM: ${POSTGRES_WORK_MEM:-4MB} - PPROF_ENABLED: ${PLUGIN_PPROF_ENABLED:-false} - PROMPT_GENERATION_MAX_TOKENS: ${PROMPT_GENERATION_MAX_TOKENS:-512} - QDRANT_API_KEY: ${QDRANT_API_KEY:-difyai123456} - QDRANT_CLIENT_TIMEOUT: ${QDRANT_CLIENT_TIMEOUT:-20} - QDRANT_GRPC_ENABLED: ${QDRANT_GRPC_ENABLED:-false} - QDRANT_GRPC_PORT: ${QDRANT_GRPC_PORT:-6334} - QDRANT_URL: ${QDRANT_URL:-http://qdrant:6333} - REDIS_CLUSTERS: ${REDIS_CLUSTERS:-} - REDIS_CLUSTERS_PASSWORD: ${REDIS_CLUSTERS_PASSWORD:-} - REDIS_DB: ${REDIS_DB:-0} - REDIS_HOST: ${REDIS_HOST:-redis} - REDIS_PASSWORD: ${REDIS_PASSWORD:-difyai123456} - REDIS_PORT: ${REDIS_PORT:-6379} - REDIS_SENTINELS: ${REDIS_SENTINELS:-} - REDIS_SENTINEL_PASSWORD: ${REDIS_SENTINEL_PASSWORD:-} - REDIS_SENTINEL_SERVICE_NAME: ${REDIS_SENTINEL_SERVICE_NAME:-} - REDIS_SENTINEL_SOCKET_TIMEOUT: ${REDIS_SENTINEL_SOCKET_TIMEOUT:-0.1} - REDIS_SENTINEL_USERNAME: ${REDIS_SENTINEL_USERNAME:-} - REDIS_USERNAME: ${REDIS_USERNAME:-} - REDIS_USE_CLUSTERS: ${REDIS_USE_CLUSTERS:-false} - REDIS_USE_SENTINEL: ${REDIS_USE_SENTINEL:-false} - REDIS_USE_SSL: ${REDIS_USE_SSL:-false} - REFRESH_TOKEN_EXPIRE_DAYS: ${REFRESH_TOKEN_EXPIRE_DAYS:-30} - RELYT_DATABASE: ${RELYT_DATABASE:-postgres} - RELYT_HOST: ${RELYT_HOST:-db} - RELYT_PASSWORD: ${RELYT_PASSWORD:-difyai123456} - RELYT_PORT: ${RELYT_PORT:-5432} - RELYT_USER: ${RELYT_USER:-postgres} - RESEND_API_KEY: ${RESEND_API_KEY:-your-resend-api-key} - RESEND_API_URL: ${RESEND_API_URL:-https://api.resend.com} - RESET_PASSWORD_TOKEN_EXPIRY_MINUTES: ${RESET_PASSWORD_TOKEN_EXPIRY_MINUTES:-5} - S3_ACCESS_KEY: ${S3_ACCESS_KEY:-} - S3_BUCKET_NAME: ${S3_BUCKET_NAME:-difyai} - S3_ENDPOINT: ${S3_ENDPOINT:-} - S3_REGION: ${S3_REGION:-us-east-1} - S3_SECRET_KEY: ${S3_SECRET_KEY:-} - S3_USE_AWS_MANAGED_IAM: ${S3_USE_AWS_MANAGED_IAM:-false} - SANDBOX_API_KEY: ${SANDBOX_API_KEY:-dify-sandbox} - SANDBOX_ENABLE_NETWORK: ${SANDBOX_ENABLE_NETWORK:-true} - SANDBOX_GIN_MODE: ${SANDBOX_GIN_MODE:-release} - SANDBOX_HTTPS_PROXY: ${SANDBOX_HTTPS_PROXY:-http://ssrf_proxy:3128} - SANDBOX_HTTP_PROXY: ${SANDBOX_HTTP_PROXY:-http://ssrf_proxy:3128} - SANDBOX_PORT: ${SANDBOX_PORT:-8194} - SANDBOX_WORKER_TIMEOUT: ${SANDBOX_WORKER_TIMEOUT:-15} - SCARF_NO_ANALYTICS: ${SCARF_NO_ANALYTICS:-true} - SECRET_KEY: ${SECRET_KEY:-sk-9f73s3ljTXVcMT3Blb3ljTqtsKiGHXVcMT3BlbkFJLK7U} - SENTRY_DSN: ${SENTRY_DSN:-} - SERVER_KEY: ${PLUGIN_DAEMON_KEY:-lYkiYYT6owG+71oLerGzA7GXCgOT++6ovaezWAjpCjf+Sjc3ZtU+qUEi} - SERVER_PORT: ${PLUGIN_DAEMON_PORT:-5002} - SERVER_WORKER_AMOUNT: ${SERVER_WORKER_AMOUNT:-1} - SERVER_WORKER_CLASS: ${SERVER_WORKER_CLASS:-gevent} - SERVER_WORKER_CONNECTIONS: ${SERVER_WORKER_CONNECTIONS:-10} - SERVICE_API_URL: ${SERVICE_API_URL:-} - SMTP_OPPORTUNISTIC_TLS: ${SMTP_OPPORTUNISTIC_TLS:-false} - SMTP_PASSWORD: ${SMTP_PASSWORD:-} - SMTP_PORT: ${SMTP_PORT:-465} - SMTP_SERVER: ${SMTP_SERVER:-} - SMTP_USERNAME: ${SMTP_USERNAME:-} - SMTP_USE_TLS: ${SMTP_USE_TLS:-true} - SQLALCHEMY_ECHO: ${SQLALCHEMY_ECHO:-false} - SQLALCHEMY_POOL_RECYCLE: ${SQLALCHEMY_POOL_RECYCLE:-3600} - SQLALCHEMY_POOL_SIZE: ${SQLALCHEMY_POOL_SIZE:-30} - SSRF_COREDUMP_DIR: ${SSRF_COREDUMP_DIR:-/var/spool/squid} - SSRF_DEFAULT_CONNECT_TIME_OUT: ${SSRF_DEFAULT_CONNECT_TIME_OUT:-5} - SSRF_DEFAULT_READ_TIME_OUT: ${SSRF_DEFAULT_READ_TIME_OUT:-5} - SSRF_DEFAULT_TIME_OUT: ${SSRF_DEFAULT_TIME_OUT:-5} - SSRF_DEFAULT_WRITE_TIME_OUT: ${SSRF_DEFAULT_WRITE_TIME_OUT:-5} - SSRF_HTTP_PORT: ${SSRF_HTTP_PORT:-3128} - SSRF_PROXY_HTTPS_URL: ${SSRF_PROXY_HTTPS_URL:-http://ssrf_proxy:3128} - SSRF_PROXY_HTTP_URL: ${SSRF_PROXY_HTTP_URL:-http://ssrf_proxy:3128} - SSRF_REVERSE_PROXY_PORT: ${SSRF_REVERSE_PROXY_PORT:-8194} - SSRF_SANDBOX_HOST: ${SSRF_SANDBOX_HOST:-sandbox} - STORAGE_TYPE: ${STORAGE_TYPE:-opendal} - SUPABASE_API_KEY: ${SUPABASE_API_KEY:-your-access-key} - SUPABASE_BUCKET_NAME: ${SUPABASE_BUCKET_NAME:-your-bucket-name} - SUPABASE_URL: ${SUPABASE_URL:-your-server-url} - TEMPLATE_TRANSFORM_MAX_LENGTH: ${TEMPLATE_TRANSFORM_MAX_LENGTH:-80000} - TENCENT_COS_BUCKET_NAME: ${TENCENT_COS_BUCKET_NAME:-your-bucket-name} - TENCENT_COS_REGION: ${TENCENT_COS_REGION:-your-region} - TENCENT_COS_SCHEME: ${TENCENT_COS_SCHEME:-your-scheme} - TENCENT_COS_SECRET_ID: ${TENCENT_COS_SECRET_ID:-your-secret-id} - TENCENT_COS_SECRET_KEY: ${TENCENT_COS_SECRET_KEY:-your-secret-key} - TENCENT_VECTOR_DB_API_KEY: ${TENCENT_VECTOR_DB_API_KEY:-dify} - TENCENT_VECTOR_DB_DATABASE: ${TENCENT_VECTOR_DB_DATABASE:-dify} - TENCENT_VECTOR_DB_REPLICAS: ${TENCENT_VECTOR_DB_REPLICAS:-2} - TENCENT_VECTOR_DB_SHARD: ${TENCENT_VECTOR_DB_SHARD:-1} - TENCENT_VECTOR_DB_TIMEOUT: ${TENCENT_VECTOR_DB_TIMEOUT:-30} - TENCENT_VECTOR_DB_URL: ${TENCENT_VECTOR_DB_URL:-http://127.0.0.1} - TENCENT_VECTOR_DB_USERNAME: ${TENCENT_VECTOR_DB_USERNAME:-dify} - TEXT_GENERATION_TIMEOUT_MS: ${TEXT_GENERATION_TIMEOUT_MS:-60000} - TIDB_API_URL: ${TIDB_API_URL:-http://127.0.0.1} - TIDB_IAM_API_URL: ${TIDB_IAM_API_URL:-http://127.0.0.1} - TIDB_ON_QDRANT_API_KEY: ${TIDB_ON_QDRANT_API_KEY:-dify} - TIDB_ON_QDRANT_CLIENT_TIMEOUT: ${TIDB_ON_QDRANT_CLIENT_TIMEOUT:-20} - TIDB_ON_QDRANT_GRPC_ENABLED: ${TIDB_ON_QDRANT_GRPC_ENABLED:-false} - TIDB_ON_QDRANT_GRPC_PORT: ${TIDB_ON_QDRANT_GRPC_PORT:-6334} - TIDB_ON_QDRANT_URL: ${TIDB_ON_QDRANT_URL:-http://127.0.0.1} - TIDB_PRIVATE_KEY: ${TIDB_PRIVATE_KEY:-dify} - TIDB_PROJECT_ID: ${TIDB_PROJECT_ID:-dify} - TIDB_PUBLIC_KEY: ${TIDB_PUBLIC_KEY:-dify} - TIDB_REGION: ${TIDB_REGION:-regions/aws-us-east-1} - TIDB_SPEND_LIMIT: ${TIDB_SPEND_LIMIT:-100} - TIDB_VECTOR_DATABASE: ${TIDB_VECTOR_DATABASE:-dify} - TIDB_VECTOR_HOST: ${TIDB_VECTOR_HOST:-tidb} - TIDB_VECTOR_PASSWORD: ${TIDB_VECTOR_PASSWORD:-} - TIDB_VECTOR_PORT: ${TIDB_VECTOR_PORT:-4000} - TIDB_VECTOR_USER: ${TIDB_VECTOR_USER:-} - TOP_K_MAX_VALUE: ${TOP_K_MAX_VALUE:-10} - UNSTRUCTURED_API_KEY: ${UNSTRUCTURED_API_KEY:-} - UNSTRUCTURED_API_URL: ${UNSTRUCTURED_API_URL:-} - UPLOAD_AUDIO_FILE_SIZE_LIMIT: ${UPLOAD_AUDIO_FILE_SIZE_LIMIT:-50} - UPLOAD_FILE_BATCH_LIMIT: ${UPLOAD_FILE_BATCH_LIMIT:-5} - UPLOAD_FILE_SIZE_LIMIT: ${UPLOAD_FILE_SIZE_LIMIT:-15} - UPLOAD_IMAGE_FILE_SIZE_LIMIT: ${UPLOAD_IMAGE_FILE_SIZE_LIMIT:-10} - UPLOAD_VIDEO_FILE_SIZE_LIMIT: ${UPLOAD_VIDEO_FILE_SIZE_LIMIT:-100} - UPSTASH_VECTOR_TOKEN: ${UPSTASH_VECTOR_TOKEN:-dify} - UPSTASH_VECTOR_URL: ${UPSTASH_VECTOR_URL:-https://xxx-vector.upstash.io} - VECTOR_STORE: ${VECTOR_STORE:-weaviate} - VIKINGDB_ACCESS_KEY: ${VIKINGDB_ACCESS_KEY:-your-ak} - VIKINGDB_CONNECTION_TIMEOUT: ${VIKINGDB_CONNECTION_TIMEOUT:-30} - VIKINGDB_HOST: ${VIKINGDB_HOST:-api-vikingdb.xxx.volces.com} - VIKINGDB_REGION: ${VIKINGDB_REGION:-cn-shanghai} - VIKINGDB_SCHEMA: ${VIKINGDB_SCHEMA:-http} - VIKINGDB_SECRET_KEY: ${VIKINGDB_SECRET_KEY:-your-sk} - VIKINGDB_SOCKET_TIMEOUT: ${VIKINGDB_SOCKET_TIMEOUT:-30} - VOLCENGINE_TOS_ACCESS_KEY: ${VOLCENGINE_TOS_ACCESS_KEY:-your-access-key} - VOLCENGINE_TOS_BUCKET_NAME: ${VOLCENGINE_TOS_BUCKET_NAME:-your-bucket-name} - VOLCENGINE_TOS_ENDPOINT: ${VOLCENGINE_TOS_ENDPOINT:-your-server-url} - VOLCENGINE_TOS_REGION: ${VOLCENGINE_TOS_REGION:-your-region} - VOLCENGINE_TOS_SECRET_KEY: ${VOLCENGINE_TOS_SECRET_KEY:-your-secret-key} - WEAVIATE_API_KEY: ${WEAVIATE_API_KEY:-WVF5YThaHlkYwhGUSmCRgsX3tD5ngdN8pkih} - WEAVIATE_AUTHENTICATION_ANONYMOUS_ACCESS_ENABLED: ${WEAVIATE_AUTHENTICATION_ANONYMOUS_ACCESS_ENABLED:-true} - WEAVIATE_AUTHENTICATION_APIKEY_ALLOWED_KEYS: ${WEAVIATE_AUTHENTICATION_APIKEY_ALLOWED_KEYS:-WVF5YThaHlkYwhGUSmCRgsX3tD5ngdN8pkih} - WEAVIATE_AUTHENTICATION_APIKEY_ENABLED: ${WEAVIATE_AUTHENTICATION_APIKEY_ENABLED:-true} - WEAVIATE_AUTHENTICATION_APIKEY_USERS: ${WEAVIATE_AUTHENTICATION_APIKEY_USERS:-hello@dify.ai} - WEAVIATE_AUTHORIZATION_ADMINLIST_ENABLED: ${WEAVIATE_AUTHORIZATION_ADMINLIST_ENABLED:-true} - WEAVIATE_AUTHORIZATION_ADMINLIST_USERS: ${WEAVIATE_AUTHORIZATION_ADMINLIST_USERS:-hello@dify.ai} - WEAVIATE_CLUSTER_HOSTNAME: ${WEAVIATE_CLUSTER_HOSTNAME:-node1} - WEAVIATE_DEFAULT_VECTORIZER_MODULE: ${WEAVIATE_DEFAULT_VECTORIZER_MODULE:-none} - WEAVIATE_ENDPOINT: ${WEAVIATE_ENDPOINT:-http://weaviate:8080} - WEAVIATE_PERSISTENCE_DATA_PATH: ${WEAVIATE_PERSISTENCE_DATA_PATH:-/var/lib/weaviate} - WEAVIATE_QUERY_DEFAULTS_LIMIT: ${WEAVIATE_QUERY_DEFAULTS_LIMIT:-25} - WEB_API_CORS_ALLOW_ORIGINS: ${WEB_API_CORS_ALLOW_ORIGINS:-*} - WEB_SENTRY_DSN: ${WEB_SENTRY_DSN:-} - WORKFLOW_CALL_MAX_DEPTH: ${WORKFLOW_CALL_MAX_DEPTH:-5} - WORKFLOW_FILE_UPLOAD_LIMIT: ${WORKFLOW_FILE_UPLOAD_LIMIT:-10} - WORKFLOW_MAX_EXECUTION_STEPS: ${WORKFLOW_MAX_EXECUTION_STEPS:-500} - WORKFLOW_MAX_EXECUTION_TIME: ${WORKFLOW_MAX_EXECUTION_TIME:-1200} - WORKFLOW_PARALLEL_DEPTH_LIMIT: ${WORKFLOW_PARALLEL_DEPTH_LIMIT:-3} - image: langgenius/dify-plugin-daemon:0.0.3-local - ports: - - ${EXPOSE_PLUGIN_DEBUGGING_PORT:-5003}:${PLUGIN_DEBUGGING_PORT:-5003} - restart: always - volumes: - - ${DIFY_ROOT_PATH}/volumes/plugin_daemon:/app/storage - qdrant: - container_name: qdrant-dify - environment: - QDRANT_API_KEY: ${QDRANT_API_KEY:-difyai123456} - image: langgenius/qdrant:v1.7.3 - profiles: - - qdrant - restart: always - volumes: - - ${DIFY_ROOT_PATH}/volumes/qdrant:/qdrant/storage - redis: - command: redis-server --requirepass ${REDIS_PASSWORD:-difyai123456} - container_name: redis-dify - environment: - REDISCLI_AUTH: ${REDIS_PASSWORD:-difyai123456} - healthcheck: - test: - - CMD - - redis-cli - - ping - image: redis:6-alpine - restart: always - volumes: - - ${DIFY_ROOT_PATH}/volumes/redis/data:/data - sandbox: - container_name: sandbox-dify - environment: - API_KEY: ${SANDBOX_API_KEY:-dify-sandbox} - ENABLE_NETWORK: ${SANDBOX_ENABLE_NETWORK:-true} - GIN_MODE: ${SANDBOX_GIN_MODE:-release} - HTTPS_PROXY: ${SANDBOX_HTTPS_PROXY:-http://ssrf_proxy:3128} - HTTP_PROXY: ${SANDBOX_HTTP_PROXY:-http://ssrf_proxy:3128} - SANDBOX_PORT: ${SANDBOX_PORT:-8194} - WORKER_TIMEOUT: ${SANDBOX_WORKER_TIMEOUT:-15} - healthcheck: - test: - - CMD - - curl - - -f - - http://localhost:8194/health - image: langgenius/dify-sandbox:0.2.10 - networks: - - ssrf_proxy_network - restart: always - volumes: - - ${DIFY_ROOT_PATH}/volumes/sandbox/dependencies:/dependencies - - ${DIFY_ROOT_PATH}/volumes/sandbox/conf:/conf - ssrf_proxy: - container_name: ssrf_proxy-dify - entrypoint: - - sh - - -c - - "cp /docker-entrypoint-mount.sh /docker-entrypoint.sh && sed -i 's/\r$$//' /docker-entrypoint.sh\ - \ && chmod +x /docker-entrypoint.sh && /docker-entrypoint.sh" - environment: - COREDUMP_DIR: ${SSRF_COREDUMP_DIR:-/var/spool/squid} - HTTP_PORT: ${SSRF_HTTP_PORT:-3128} - REVERSE_PROXY_PORT: ${SSRF_REVERSE_PROXY_PORT:-8194} - SANDBOX_HOST: ${SSRF_SANDBOX_HOST:-sandbox} - SANDBOX_PORT: ${SANDBOX_PORT:-8194} - image: ubuntu/squid:latest - networks: - - ssrf_proxy_network - - default - restart: always - volumes: - - ${DIFY_ROOT_PATH}/ssrf_proxy/squid.conf.template:/etc/squid/squid.conf.template - - ${DIFY_ROOT_PATH}/ssrf_proxy/docker-entrypoint.sh:/docker-entrypoint-mount.sh - unstructured: - container_name: unstructured-dify - image: downloads.unstructured.io/unstructured-io/unstructured-api:latest - profiles: - - unstructured - restart: always - volumes: - - ${DIFY_ROOT_PATH}/volumes/unstructured:/app/data - weaviate: - container_name: weaviate-dify - environment: - AUTHENTICATION_ANONYMOUS_ACCESS_ENABLED: ${WEAVIATE_AUTHENTICATION_ANONYMOUS_ACCESS_ENABLED:-false} - AUTHENTICATION_APIKEY_ALLOWED_KEYS: ${WEAVIATE_AUTHENTICATION_APIKEY_ALLOWED_KEYS:-WVF5YThaHlkYwhGUSmCRgsX3tD5ngdN8pkih} - AUTHENTICATION_APIKEY_ENABLED: ${WEAVIATE_AUTHENTICATION_APIKEY_ENABLED:-true} - AUTHENTICATION_APIKEY_USERS: ${WEAVIATE_AUTHENTICATION_APIKEY_USERS:-hello@dify.ai} - AUTHORIZATION_ADMINLIST_ENABLED: ${WEAVIATE_AUTHORIZATION_ADMINLIST_ENABLED:-true} - AUTHORIZATION_ADMINLIST_USERS: ${WEAVIATE_AUTHORIZATION_ADMINLIST_USERS:-hello@dify.ai} - CLUSTER_HOSTNAME: ${WEAVIATE_CLUSTER_HOSTNAME:-node1} - DEFAULT_VECTORIZER_MODULE: ${WEAVIATE_DEFAULT_VECTORIZER_MODULE:-none} - PERSISTENCE_DATA_PATH: ${WEAVIATE_PERSISTENCE_DATA_PATH:-/var/lib/weaviate} - QUERY_DEFAULTS_LIMIT: ${WEAVIATE_QUERY_DEFAULTS_LIMIT:-25} - image: semitechnologies/weaviate:1.19.0 - profiles: - - '' - - weaviate - restart: always - volumes: - - ${DIFY_ROOT_PATH}/volumes/weaviate:/var/lib/weaviate - web: - container_name: dify - environment: - APP_API_URL: ${APP_API_URL:-} - CONSOLE_API_URL: ${CONSOLE_API_URL:-} - CSP_WHITELIST: ${CSP_WHITELIST:-} - INDEXING_MAX_SEGMENTATION_TOKENS_LENGTH: ${INDEXING_MAX_SEGMENTATION_TOKENS_LENGTH:-} - MARKETPLACE_API_URL: ${MARKETPLACE_API_URL:-https://marketplace.dify.ai} - MARKETPLACE_URL: ${MARKETPLACE_URL:-https://marketplace.dify.ai} - NEXT_TELEMETRY_DISABLED: ${NEXT_TELEMETRY_DISABLED:-0} - SENTRY_DSN: ${WEB_SENTRY_DSN:-} - TEXT_GENERATION_TIMEOUT_MS: ${TEXT_GENERATION_TIMEOUT_MS:-60000} - TOP_K_MAX_VALUE: ${TOP_K_MAX_VALUE:-} - image: langgenius/dify-web:1.0.0 - restart: always - worker: - container_name: worker-dify - depends_on: - - db - - redis - environment: - ACCESS_TOKEN_EXPIRE_MINUTES: ${ACCESS_TOKEN_EXPIRE_MINUTES:-60} - ALIYUN_OSS_ACCESS_KEY: ${ALIYUN_OSS_ACCESS_KEY:-your-access-key} - ALIYUN_OSS_AUTH_VERSION: ${ALIYUN_OSS_AUTH_VERSION:-v4} - ALIYUN_OSS_BUCKET_NAME: ${ALIYUN_OSS_BUCKET_NAME:-your-bucket-name} - ALIYUN_OSS_ENDPOINT: ${ALIYUN_OSS_ENDPOINT:-https://oss-ap-southeast-1-internal.aliyuncs.com} - ALIYUN_OSS_PATH: ${ALIYUN_OSS_PATH:-your-path} - ALIYUN_OSS_REGION: ${ALIYUN_OSS_REGION:-ap-southeast-1} - ALIYUN_OSS_SECRET_KEY: ${ALIYUN_OSS_SECRET_KEY:-your-secret-key} - ANALYTICDB_ACCOUNT: ${ANALYTICDB_ACCOUNT:-testaccount} - ANALYTICDB_HOST: ${ANALYTICDB_HOST:-gp-test.aliyuncs.com} - ANALYTICDB_INSTANCE_ID: ${ANALYTICDB_INSTANCE_ID:-gp-ab123456} - ANALYTICDB_KEY_ID: ${ANALYTICDB_KEY_ID:-your-ak} - ANALYTICDB_KEY_SECRET: ${ANALYTICDB_KEY_SECRET:-your-sk} - ANALYTICDB_MAX_CONNECTION: ${ANALYTICDB_MAX_CONNECTION:-5} - ANALYTICDB_MIN_CONNECTION: ${ANALYTICDB_MIN_CONNECTION:-1} - ANALYTICDB_NAMESPACE: ${ANALYTICDB_NAMESPACE:-dify} - ANALYTICDB_NAMESPACE_PASSWORD: ${ANALYTICDB_NAMESPACE_PASSWORD:-difypassword} - ANALYTICDB_PASSWORD: ${ANALYTICDB_PASSWORD:-testpassword} - ANALYTICDB_PORT: ${ANALYTICDB_PORT:-5432} - ANALYTICDB_REGION_ID: ${ANALYTICDB_REGION_ID:-cn-hangzhou} - API_SENTRY_DSN: ${API_SENTRY_DSN:-} - API_SENTRY_PROFILES_SAMPLE_RATE: ${API_SENTRY_PROFILES_SAMPLE_RATE:-1.0} - API_SENTRY_TRACES_SAMPLE_RATE: ${API_SENTRY_TRACES_SAMPLE_RATE:-1.0} - API_TOOL_DEFAULT_CONNECT_TIMEOUT: ${API_TOOL_DEFAULT_CONNECT_TIMEOUT:-10} - API_TOOL_DEFAULT_READ_TIMEOUT: ${API_TOOL_DEFAULT_READ_TIMEOUT:-60} - APP_API_URL: ${APP_API_URL:-} - APP_MAX_ACTIVE_REQUESTS: ${APP_MAX_ACTIVE_REQUESTS:-0} - APP_MAX_EXECUTION_TIME: ${APP_MAX_EXECUTION_TIME:-1200} - APP_WEB_URL: ${APP_WEB_URL:-} - AZURE_BLOB_ACCOUNT_KEY: ${AZURE_BLOB_ACCOUNT_KEY:-difyai} - AZURE_BLOB_ACCOUNT_NAME: ${AZURE_BLOB_ACCOUNT_NAME:-difyai} - AZURE_BLOB_ACCOUNT_URL: ${AZURE_BLOB_ACCOUNT_URL:-https://.blob.core.windows.net} - AZURE_BLOB_CONTAINER_NAME: ${AZURE_BLOB_CONTAINER_NAME:-difyai-container} - BAIDU_OBS_ACCESS_KEY: ${BAIDU_OBS_ACCESS_KEY:-your-access-key} - BAIDU_OBS_BUCKET_NAME: ${BAIDU_OBS_BUCKET_NAME:-your-bucket-name} - BAIDU_OBS_ENDPOINT: ${BAIDU_OBS_ENDPOINT:-your-server-url} - BAIDU_OBS_SECRET_KEY: ${BAIDU_OBS_SECRET_KEY:-your-secret-key} - BAIDU_VECTOR_DB_ACCOUNT: ${BAIDU_VECTOR_DB_ACCOUNT:-root} - BAIDU_VECTOR_DB_API_KEY: ${BAIDU_VECTOR_DB_API_KEY:-dify} - BAIDU_VECTOR_DB_CONNECTION_TIMEOUT_MS: ${BAIDU_VECTOR_DB_CONNECTION_TIMEOUT_MS:-30000} - BAIDU_VECTOR_DB_DATABASE: ${BAIDU_VECTOR_DB_DATABASE:-dify} - BAIDU_VECTOR_DB_ENDPOINT: ${BAIDU_VECTOR_DB_ENDPOINT:-http://127.0.0.1:5287} - BAIDU_VECTOR_DB_REPLICAS: ${BAIDU_VECTOR_DB_REPLICAS:-3} - BAIDU_VECTOR_DB_SHARD: ${BAIDU_VECTOR_DB_SHARD:-1} - BROKER_USE_SSL: ${BROKER_USE_SSL:-false} - CELERY_AUTO_SCALE: ${CELERY_AUTO_SCALE:-false} - CELERY_BROKER_URL: ${CELERY_BROKER_URL:-redis://:difyai123456@redis:6379/1} - CELERY_MAX_WORKERS: ${CELERY_MAX_WORKERS:-} - CELERY_MIN_WORKERS: ${CELERY_MIN_WORKERS:-} - CELERY_SENTINEL_MASTER_NAME: ${CELERY_SENTINEL_MASTER_NAME:-} - CELERY_SENTINEL_SOCKET_TIMEOUT: ${CELERY_SENTINEL_SOCKET_TIMEOUT:-0.1} - CELERY_USE_SENTINEL: ${CELERY_USE_SENTINEL:-false} - CELERY_WORKER_AMOUNT: ${CELERY_WORKER_AMOUNT:-} - CELERY_WORKER_CLASS: ${CELERY_WORKER_CLASS:-} - CERTBOT_DOMAIN: ${CERTBOT_DOMAIN:-your_domain.com} - CERTBOT_EMAIL: ${CERTBOT_EMAIL:-your_email@example.com} - CERTBOT_OPTIONS: ${CERTBOT_OPTIONS:-} - CHECK_UPDATE_URL: ${CHECK_UPDATE_URL:-https://updates.dify.ai} - CHROMA_AUTH_CREDENTIALS: ${CHROMA_AUTH_CREDENTIALS:-} - CHROMA_AUTH_PROVIDER: ${CHROMA_AUTH_PROVIDER:-chromadb.auth.token_authn.TokenAuthClientProvider} - CHROMA_DATABASE: ${CHROMA_DATABASE:-default_database} - CHROMA_HOST: ${CHROMA_HOST:-127.0.0.1} - CHROMA_IS_PERSISTENT: ${CHROMA_IS_PERSISTENT:-TRUE} - CHROMA_PORT: ${CHROMA_PORT:-8000} - CHROMA_SERVER_AUTHN_CREDENTIALS: ${CHROMA_SERVER_AUTHN_CREDENTIALS:-difyai123456} - CHROMA_SERVER_AUTHN_PROVIDER: ${CHROMA_SERVER_AUTHN_PROVIDER:-chromadb.auth.token_authn.TokenAuthenticationServerProvider} - CHROMA_TENANT: ${CHROMA_TENANT:-default_tenant} - CODE_EXECUTION_API_KEY: ${CODE_EXECUTION_API_KEY:-dify-sandbox} - CODE_EXECUTION_CONNECT_TIMEOUT: ${CODE_EXECUTION_CONNECT_TIMEOUT:-10} - CODE_EXECUTION_ENDPOINT: ${CODE_EXECUTION_ENDPOINT:-http://sandbox:8194} - CODE_EXECUTION_READ_TIMEOUT: ${CODE_EXECUTION_READ_TIMEOUT:-60} - CODE_EXECUTION_WRITE_TIMEOUT: ${CODE_EXECUTION_WRITE_TIMEOUT:-10} - CODE_GENERATION_MAX_TOKENS: ${CODE_GENERATION_MAX_TOKENS:-1024} - CODE_MAX_DEPTH: ${CODE_MAX_DEPTH:-5} - CODE_MAX_NUMBER: ${CODE_MAX_NUMBER:-9223372036854775807} - CODE_MAX_NUMBER_ARRAY_LENGTH: ${CODE_MAX_NUMBER_ARRAY_LENGTH:-1000} - CODE_MAX_OBJECT_ARRAY_LENGTH: ${CODE_MAX_OBJECT_ARRAY_LENGTH:-30} - CODE_MAX_PRECISION: ${CODE_MAX_PRECISION:-20} - CODE_MAX_STRING_ARRAY_LENGTH: ${CODE_MAX_STRING_ARRAY_LENGTH:-30} - CODE_MAX_STRING_LENGTH: ${CODE_MAX_STRING_LENGTH:-80000} - CODE_MIN_NUMBER: ${CODE_MIN_NUMBER:--9223372036854775808} - CONSOLE_API_URL: ${CONSOLE_API_URL:-} - CONSOLE_CORS_ALLOW_ORIGINS: ${CONSOLE_CORS_ALLOW_ORIGINS:-*} - CONSOLE_WEB_URL: ${CONSOLE_WEB_URL:-} - COUCHBASE_BUCKET_NAME: ${COUCHBASE_BUCKET_NAME:-Embeddings} - COUCHBASE_CONNECTION_STRING: ${COUCHBASE_CONNECTION_STRING:-couchbase://couchbase-server} - COUCHBASE_PASSWORD: ${COUCHBASE_PASSWORD:-password} - COUCHBASE_SCOPE_NAME: ${COUCHBASE_SCOPE_NAME:-_default} - COUCHBASE_USER: ${COUCHBASE_USER:-Administrator} - CREATE_TIDB_SERVICE_JOB_ENABLED: ${CREATE_TIDB_SERVICE_JOB_ENABLED:-false} - CSP_WHITELIST: ${CSP_WHITELIST:-} - DB_DATABASE: ${DB_DATABASE:-dify} - DB_HOST: ${DB_HOST:-db} - DB_PASSWORD: ${DB_PASSWORD:-difyai123456} - DB_PLUGIN_DATABASE: ${DB_PLUGIN_DATABASE:-dify_plugin} - DB_PORT: ${DB_PORT:-5432} - DB_USERNAME: ${DB_USERNAME:-postgres} - DEBUG: ${DEBUG:-false} - DEPLOY_ENV: ${DEPLOY_ENV:-PRODUCTION} - DIFY_BIND_ADDRESS: ${DIFY_BIND_ADDRESS:-0.0.0.0} - DIFY_PORT: ${DIFY_PORT:-5001} - ELASTICSEARCH_HOST: ${ELASTICSEARCH_HOST:-0.0.0.0} - ELASTICSEARCH_PASSWORD: ${ELASTICSEARCH_PASSWORD:-elastic} - ELASTICSEARCH_PORT: ${ELASTICSEARCH_PORT:-9200} - ELASTICSEARCH_USERNAME: ${ELASTICSEARCH_USERNAME:-elastic} - ENDPOINT_URL_TEMPLATE: ${ENDPOINT_URL_TEMPLATE:-http://localhost/e/{hook_id}} - ETCD_AUTO_COMPACTION_MODE: ${ETCD_AUTO_COMPACTION_MODE:-revision} - ETCD_AUTO_COMPACTION_RETENTION: ${ETCD_AUTO_COMPACTION_RETENTION:-1000} - ETCD_ENDPOINTS: ${ETCD_ENDPOINTS:-etcd:2379} - ETCD_QUOTA_BACKEND_BYTES: ${ETCD_QUOTA_BACKEND_BYTES:-4294967296} - ETCD_SNAPSHOT_COUNT: ${ETCD_SNAPSHOT_COUNT:-50000} - ETL_TYPE: ${ETL_TYPE:-dify} - EXPOSE_NGINX_PORT: ${PANEL_APP_PORT_HTTP:-8080} - EXPOSE_NGINX_SSL_PORT: ${PANEL_APP_PORT_HTTPS:-8443} - EXPOSE_PLUGIN_DAEMON_PORT: ${EXPOSE_PLUGIN_DAEMON_PORT:-5002} - EXPOSE_PLUGIN_DEBUGGING_HOST: ${EXPOSE_PLUGIN_DEBUGGING_HOST:-localhost} - EXPOSE_PLUGIN_DEBUGGING_PORT: ${EXPOSE_PLUGIN_DEBUGGING_PORT:-5003} - FILES_ACCESS_TIMEOUT: ${FILES_ACCESS_TIMEOUT:-300} - FILES_URL: ${FILES_URL:-} - FLASK_DEBUG: ${FLASK_DEBUG:-false} - FORCE_VERIFYING_SIGNATURE: ${FORCE_VERIFYING_SIGNATURE:-true} - GOOGLE_STORAGE_BUCKET_NAME: ${GOOGLE_STORAGE_BUCKET_NAME:-your-bucket-name} - GOOGLE_STORAGE_SERVICE_ACCOUNT_JSON_BASE64: ${GOOGLE_STORAGE_SERVICE_ACCOUNT_JSON_BASE64:-} - GUNICORN_TIMEOUT: ${GUNICORN_TIMEOUT:-360} - HTTP_REQUEST_NODE_MAX_BINARY_SIZE: ${HTTP_REQUEST_NODE_MAX_BINARY_SIZE:-10485760} - HTTP_REQUEST_NODE_MAX_TEXT_SIZE: ${HTTP_REQUEST_NODE_MAX_TEXT_SIZE:-1048576} - HUAWEI_OBS_ACCESS_KEY: ${HUAWEI_OBS_ACCESS_KEY:-your-access-key} - HUAWEI_OBS_BUCKET_NAME: ${HUAWEI_OBS_BUCKET_NAME:-your-bucket-name} - HUAWEI_OBS_SECRET_KEY: ${HUAWEI_OBS_SECRET_KEY:-your-secret-key} - HUAWEI_OBS_SERVER: ${HUAWEI_OBS_SERVER:-your-server-url} - INDEXING_MAX_SEGMENTATION_TOKENS_LENGTH: ${INDEXING_MAX_SEGMENTATION_TOKENS_LENGTH:-4000} - INIT_PASSWORD: ${INIT_PASSWORD:-} - INNER_API_KEY_FOR_PLUGIN: ${PLUGIN_DIFY_INNER_API_KEY:-QaHbTe77CtuXmsfyhR7+vRjI/+XbV1AaFy691iy+kGDv2Jvy0/eAh8Y1} - INVITE_EXPIRY_HOURS: ${INVITE_EXPIRY_HOURS:-72} - KIBANA_PORT: ${KIBANA_PORT:-5601} - LINDORM_PASSWORD: ${LINDORM_PASSWORD:-lindorm} - LINDORM_URL: ${LINDORM_URL:-http://lindorm:30070} - LINDORM_USERNAME: ${LINDORM_USERNAME:-lindorm} - LOG_DATEFORMAT: ${LOG_DATEFORMAT:-%Y-%m-%d %H:%M:%S} - LOG_FILE: ${LOG_FILE:-/app/logs/server.log} - LOG_FILE_BACKUP_COUNT: ${LOG_FILE_BACKUP_COUNT:-5} - LOG_FILE_MAX_SIZE: ${LOG_FILE_MAX_SIZE:-20} - LOG_LEVEL: ${LOG_LEVEL:-INFO} - LOG_TZ: ${LOG_TZ:-UTC} - MAIL_DEFAULT_SEND_FROM: ${MAIL_DEFAULT_SEND_FROM:-} - MAIL_TYPE: ${MAIL_TYPE:-resend} - MARKETPLACE_API_URL: ${MARKETPLACE_API_URL:-https://marketplace.dify.ai} - MARKETPLACE_ENABLED: ${MARKETPLACE_ENABLED:-true} - MAX_SUBMIT_COUNT: ${MAX_SUBMIT_COUNT:-100} - MAX_VARIABLE_SIZE: ${MAX_VARIABLE_SIZE:-204800} - MIGRATION_ENABLED: ${MIGRATION_ENABLED:-true} - MILVUS_AUTHORIZATION_ENABLED: ${MILVUS_AUTHORIZATION_ENABLED:-true} - MILVUS_ENABLE_HYBRID_SEARCH: ${MILVUS_ENABLE_HYBRID_SEARCH:-False} - MILVUS_PASSWORD: ${MILVUS_PASSWORD:-Milvus} - MILVUS_TOKEN: ${MILVUS_TOKEN:-} - MILVUS_URI: ${MILVUS_URI:-http://127.0.0.1:19530} - MILVUS_USER: ${MILVUS_USER:-root} - MINIO_ACCESS_KEY: ${MINIO_ACCESS_KEY:-minioadmin} - MINIO_ADDRESS: ${MINIO_ADDRESS:-minio:9000} - MINIO_SECRET_KEY: ${MINIO_SECRET_KEY:-minioadmin} - MODE: worker - MULTIMODAL_SEND_FORMAT: ${MULTIMODAL_SEND_FORMAT:-base64} - MYSCALE_DATABASE: ${MYSCALE_DATABASE:-dify} - MYSCALE_FTS_PARAMS: ${MYSCALE_FTS_PARAMS:-} - MYSCALE_HOST: ${MYSCALE_HOST:-myscale} - MYSCALE_PASSWORD: ${MYSCALE_PASSWORD:-} - MYSCALE_PORT: ${MYSCALE_PORT:-8123} - MYSCALE_USER: ${MYSCALE_USER:-default} - NGINX_CLIENT_MAX_BODY_SIZE: ${NGINX_CLIENT_MAX_BODY_SIZE:-15M} - NGINX_ENABLE_CERTBOT_CHALLENGE: ${NGINX_ENABLE_CERTBOT_CHALLENGE:-false} - NGINX_HTTPS_ENABLED: ${NGINX_HTTPS_ENABLED:-false} - NGINX_KEEPALIVE_TIMEOUT: ${NGINX_KEEPALIVE_TIMEOUT:-65} - NGINX_PORT: ${NGINX_PORT:-80} - NGINX_PROXY_READ_TIMEOUT: ${NGINX_PROXY_READ_TIMEOUT:-3600s} - NGINX_PROXY_SEND_TIMEOUT: ${NGINX_PROXY_SEND_TIMEOUT:-3600s} - NGINX_SERVER_NAME: ${NGINX_SERVER_NAME:-_} - NGINX_SSL_CERT_FILENAME: ${NGINX_SSL_CERT_FILENAME:-dify.crt} - NGINX_SSL_CERT_KEY_FILENAME: ${NGINX_SSL_CERT_KEY_FILENAME:-dify.key} - NGINX_SSL_PORT: ${NGINX_SSL_PORT:-443} - NGINX_SSL_PROTOCOLS: ${NGINX_SSL_PROTOCOLS:-TLSv1.1 TLSv1.2 TLSv1.3} - NGINX_WORKER_PROCESSES: ${NGINX_WORKER_PROCESSES:-auto} - NOTION_CLIENT_ID: ${NOTION_CLIENT_ID:-} - NOTION_CLIENT_SECRET: ${NOTION_CLIENT_SECRET:-} - NOTION_INTEGRATION_TYPE: ${NOTION_INTEGRATION_TYPE:-public} - NOTION_INTERNAL_SECRET: ${NOTION_INTERNAL_SECRET:-} - OCEANBASE_CLUSTER_NAME: ${OCEANBASE_CLUSTER_NAME:-difyai} - OCEANBASE_MEMORY_LIMIT: ${OCEANBASE_MEMORY_LIMIT:-6G} - OCEANBASE_VECTOR_DATABASE: ${OCEANBASE_VECTOR_DATABASE:-test} - OCEANBASE_VECTOR_HOST: ${OCEANBASE_VECTOR_HOST:-oceanbase} - OCEANBASE_VECTOR_PASSWORD: ${OCEANBASE_VECTOR_PASSWORD:-difyai123456} - OCEANBASE_VECTOR_PORT: ${OCEANBASE_VECTOR_PORT:-2881} - OCEANBASE_VECTOR_USER: ${OCEANBASE_VECTOR_USER:-root@test} - OCI_ACCESS_KEY: ${OCI_ACCESS_KEY:-your-access-key} - OCI_BUCKET_NAME: ${OCI_BUCKET_NAME:-your-bucket-name} - OCI_ENDPOINT: ${OCI_ENDPOINT:-https://objectstorage.us-ashburn-1.oraclecloud.com} - OCI_REGION: ${OCI_REGION:-us-ashburn-1} - OCI_SECRET_KEY: ${OCI_SECRET_KEY:-your-secret-key} - OPENAI_API_BASE: ${OPENAI_API_BASE:-https://api.openai.com/v1} - OPENDAL_FS_ROOT: ${OPENDAL_FS_ROOT:-storage} - OPENDAL_SCHEME: ${OPENDAL_SCHEME:-fs} - OPENSEARCH_BOOTSTRAP_MEMORY_LOCK: ${OPENSEARCH_BOOTSTRAP_MEMORY_LOCK:-true} - OPENSEARCH_DISCOVERY_TYPE: ${OPENSEARCH_DISCOVERY_TYPE:-single-node} - OPENSEARCH_HOST: ${OPENSEARCH_HOST:-opensearch} - OPENSEARCH_INITIAL_ADMIN_PASSWORD: ${OPENSEARCH_INITIAL_ADMIN_PASSWORD:-Qazwsxedc!@#123} - OPENSEARCH_JAVA_OPTS_MAX: ${OPENSEARCH_JAVA_OPTS_MAX:-1024m} - OPENSEARCH_JAVA_OPTS_MIN: ${OPENSEARCH_JAVA_OPTS_MIN:-512m} - OPENSEARCH_MEMLOCK_HARD: ${OPENSEARCH_MEMLOCK_HARD:--1} - OPENSEARCH_MEMLOCK_SOFT: ${OPENSEARCH_MEMLOCK_SOFT:--1} - OPENSEARCH_NOFILE_HARD: ${OPENSEARCH_NOFILE_HARD:-65536} - OPENSEARCH_NOFILE_SOFT: ${OPENSEARCH_NOFILE_SOFT:-65536} - OPENSEARCH_PASSWORD: ${OPENSEARCH_PASSWORD:-admin} - OPENSEARCH_PORT: ${OPENSEARCH_PORT:-9200} - OPENSEARCH_SECURE: ${OPENSEARCH_SECURE:-true} - OPENSEARCH_USER: ${OPENSEARCH_USER:-admin} - ORACLE_CHARACTERSET: ${ORACLE_CHARACTERSET:-AL32UTF8} - ORACLE_DATABASE: ${ORACLE_DATABASE:-FREEPDB1} - ORACLE_HOST: ${ORACLE_HOST:-oracle} - ORACLE_PASSWORD: ${ORACLE_PASSWORD:-dify} - ORACLE_PORT: ${ORACLE_PORT:-1521} - ORACLE_PWD: ${ORACLE_PWD:-Dify123456} - ORACLE_USER: ${ORACLE_USER:-dify} - PGDATA: ${PGDATA:-/var/lib/postgresql/data/pgdata} - PGUSER: ${PGUSER:-${DB_USERNAME}} - PGVECTOR_DATABASE: ${PGVECTOR_DATABASE:-dify} - PGVECTOR_HOST: ${PGVECTOR_HOST:-pgvector} - PGVECTOR_MAX_CONNECTION: ${PGVECTOR_MAX_CONNECTION:-5} - PGVECTOR_MIN_CONNECTION: ${PGVECTOR_MIN_CONNECTION:-1} - PGVECTOR_PASSWORD: ${PGVECTOR_PASSWORD:-difyai123456} - PGVECTOR_PGDATA: ${PGVECTOR_PGDATA:-/var/lib/postgresql/data/pgdata} - PGVECTOR_PGUSER: ${PGVECTOR_PGUSER:-postgres} - PGVECTOR_PORT: ${PGVECTOR_PORT:-5432} - PGVECTOR_POSTGRES_DB: ${PGVECTOR_POSTGRES_DB:-dify} - PGVECTOR_POSTGRES_PASSWORD: ${PGVECTOR_POSTGRES_PASSWORD:-difyai123456} - PGVECTOR_USER: ${PGVECTOR_USER:-postgres} - PGVECTO_RS_DATABASE: ${PGVECTO_RS_DATABASE:-dify} - PGVECTO_RS_HOST: ${PGVECTO_RS_HOST:-pgvecto-rs} - PGVECTO_RS_PASSWORD: ${PGVECTO_RS_PASSWORD:-difyai123456} - PGVECTO_RS_PORT: ${PGVECTO_RS_PORT:-5432} - PGVECTO_RS_USER: ${PGVECTO_RS_USER:-postgres} - PLUGIN_DAEMON_KEY: ${PLUGIN_DAEMON_KEY:-lYkiYYT6owG+71oLerGzA7GXCgOT++6ovaezWAjpCjf+Sjc3ZtU+qUEi} - PLUGIN_DAEMON_PORT: ${PLUGIN_DAEMON_PORT:-5002} - PLUGIN_DAEMON_URL: ${PLUGIN_DAEMON_URL:-http://plugin_daemon:5002} - PLUGIN_DEBUGGING_HOST: ${PLUGIN_DEBUGGING_HOST:-0.0.0.0} - PLUGIN_DEBUGGING_PORT: ${PLUGIN_DEBUGGING_PORT:-5003} - PLUGIN_DIFY_INNER_API_KEY: ${PLUGIN_DIFY_INNER_API_KEY:-QaHbTe77CtuXmsfyhR7+vRjI/+XbV1AaFy691iy+kGDv2Jvy0/eAh8Y1} - PLUGIN_DIFY_INNER_API_URL: ${PLUGIN_DIFY_INNER_API_URL:-http://api:5001} - PLUGIN_MAX_PACKAGE_SIZE: ${PLUGIN_MAX_PACKAGE_SIZE:-52428800} - PLUGIN_PPROF_ENABLED: ${PLUGIN_PPROF_ENABLED:-false} - POSITION_PROVIDER_EXCLUDES: ${POSITION_PROVIDER_EXCLUDES:-} - POSITION_PROVIDER_INCLUDES: ${POSITION_PROVIDER_INCLUDES:-} - POSITION_PROVIDER_PINS: ${POSITION_PROVIDER_PINS:-} - POSITION_TOOL_EXCLUDES: ${POSITION_TOOL_EXCLUDES:-} - POSITION_TOOL_INCLUDES: ${POSITION_TOOL_INCLUDES:-} - POSITION_TOOL_PINS: ${POSITION_TOOL_PINS:-} - POSTGRES_DB: ${POSTGRES_DB:-${DB_DATABASE}} - POSTGRES_EFFECTIVE_CACHE_SIZE: ${POSTGRES_EFFECTIVE_CACHE_SIZE:-4096MB} - POSTGRES_MAINTENANCE_WORK_MEM: ${POSTGRES_MAINTENANCE_WORK_MEM:-64MB} - POSTGRES_MAX_CONNECTIONS: ${POSTGRES_MAX_CONNECTIONS:-100} - POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-${DB_PASSWORD}} - POSTGRES_SHARED_BUFFERS: ${POSTGRES_SHARED_BUFFERS:-128MB} - POSTGRES_WORK_MEM: ${POSTGRES_WORK_MEM:-4MB} - PROMPT_GENERATION_MAX_TOKENS: ${PROMPT_GENERATION_MAX_TOKENS:-512} - QDRANT_API_KEY: ${QDRANT_API_KEY:-difyai123456} - QDRANT_CLIENT_TIMEOUT: ${QDRANT_CLIENT_TIMEOUT:-20} - QDRANT_GRPC_ENABLED: ${QDRANT_GRPC_ENABLED:-false} - QDRANT_GRPC_PORT: ${QDRANT_GRPC_PORT:-6334} - QDRANT_URL: ${QDRANT_URL:-http://qdrant:6333} - REDIS_CLUSTERS: ${REDIS_CLUSTERS:-} - REDIS_CLUSTERS_PASSWORD: ${REDIS_CLUSTERS_PASSWORD:-} - REDIS_DB: ${REDIS_DB:-0} - REDIS_HOST: ${REDIS_HOST:-redis} - REDIS_PASSWORD: ${REDIS_PASSWORD:-difyai123456} - REDIS_PORT: ${REDIS_PORT:-6379} - REDIS_SENTINELS: ${REDIS_SENTINELS:-} - REDIS_SENTINEL_PASSWORD: ${REDIS_SENTINEL_PASSWORD:-} - REDIS_SENTINEL_SERVICE_NAME: ${REDIS_SENTINEL_SERVICE_NAME:-} - REDIS_SENTINEL_SOCKET_TIMEOUT: ${REDIS_SENTINEL_SOCKET_TIMEOUT:-0.1} - REDIS_SENTINEL_USERNAME: ${REDIS_SENTINEL_USERNAME:-} - REDIS_USERNAME: ${REDIS_USERNAME:-} - REDIS_USE_CLUSTERS: ${REDIS_USE_CLUSTERS:-false} - REDIS_USE_SENTINEL: ${REDIS_USE_SENTINEL:-false} - REDIS_USE_SSL: ${REDIS_USE_SSL:-false} - REFRESH_TOKEN_EXPIRE_DAYS: ${REFRESH_TOKEN_EXPIRE_DAYS:-30} - RELYT_DATABASE: ${RELYT_DATABASE:-postgres} - RELYT_HOST: ${RELYT_HOST:-db} - RELYT_PASSWORD: ${RELYT_PASSWORD:-difyai123456} - RELYT_PORT: ${RELYT_PORT:-5432} - RELYT_USER: ${RELYT_USER:-postgres} - RESEND_API_KEY: ${RESEND_API_KEY:-your-resend-api-key} - RESEND_API_URL: ${RESEND_API_URL:-https://api.resend.com} - RESET_PASSWORD_TOKEN_EXPIRY_MINUTES: ${RESET_PASSWORD_TOKEN_EXPIRY_MINUTES:-5} - S3_ACCESS_KEY: ${S3_ACCESS_KEY:-} - S3_BUCKET_NAME: ${S3_BUCKET_NAME:-difyai} - S3_ENDPOINT: ${S3_ENDPOINT:-} - S3_REGION: ${S3_REGION:-us-east-1} - S3_SECRET_KEY: ${S3_SECRET_KEY:-} - S3_USE_AWS_MANAGED_IAM: ${S3_USE_AWS_MANAGED_IAM:-false} - SANDBOX_API_KEY: ${SANDBOX_API_KEY:-dify-sandbox} - SANDBOX_ENABLE_NETWORK: ${SANDBOX_ENABLE_NETWORK:-true} - SANDBOX_GIN_MODE: ${SANDBOX_GIN_MODE:-release} - SANDBOX_HTTPS_PROXY: ${SANDBOX_HTTPS_PROXY:-http://ssrf_proxy:3128} - SANDBOX_HTTP_PROXY: ${SANDBOX_HTTP_PROXY:-http://ssrf_proxy:3128} - SANDBOX_PORT: ${SANDBOX_PORT:-8194} - SANDBOX_WORKER_TIMEOUT: ${SANDBOX_WORKER_TIMEOUT:-15} - SCARF_NO_ANALYTICS: ${SCARF_NO_ANALYTICS:-true} - SECRET_KEY: ${SECRET_KEY:-sk-9f73s3ljTXVcMT3Blb3ljTqtsKiGHXVcMT3BlbkFJLK7U} - SENTRY_DSN: ${API_SENTRY_DSN:-} - SENTRY_PROFILES_SAMPLE_RATE: ${API_SENTRY_PROFILES_SAMPLE_RATE:-1.0} - SENTRY_TRACES_SAMPLE_RATE: ${API_SENTRY_TRACES_SAMPLE_RATE:-1.0} - SERVER_WORKER_AMOUNT: ${SERVER_WORKER_AMOUNT:-1} - SERVER_WORKER_CLASS: ${SERVER_WORKER_CLASS:-gevent} - SERVER_WORKER_CONNECTIONS: ${SERVER_WORKER_CONNECTIONS:-10} - SERVICE_API_URL: ${SERVICE_API_URL:-} - SMTP_OPPORTUNISTIC_TLS: ${SMTP_OPPORTUNISTIC_TLS:-false} - SMTP_PASSWORD: ${SMTP_PASSWORD:-} - SMTP_PORT: ${SMTP_PORT:-465} - SMTP_SERVER: ${SMTP_SERVER:-} - SMTP_USERNAME: ${SMTP_USERNAME:-} - SMTP_USE_TLS: ${SMTP_USE_TLS:-true} - SQLALCHEMY_ECHO: ${SQLALCHEMY_ECHO:-false} - SQLALCHEMY_POOL_RECYCLE: ${SQLALCHEMY_POOL_RECYCLE:-3600} - SQLALCHEMY_POOL_SIZE: ${SQLALCHEMY_POOL_SIZE:-30} - SSRF_COREDUMP_DIR: ${SSRF_COREDUMP_DIR:-/var/spool/squid} - SSRF_DEFAULT_CONNECT_TIME_OUT: ${SSRF_DEFAULT_CONNECT_TIME_OUT:-5} - SSRF_DEFAULT_READ_TIME_OUT: ${SSRF_DEFAULT_READ_TIME_OUT:-5} - SSRF_DEFAULT_TIME_OUT: ${SSRF_DEFAULT_TIME_OUT:-5} - SSRF_DEFAULT_WRITE_TIME_OUT: ${SSRF_DEFAULT_WRITE_TIME_OUT:-5} - SSRF_HTTP_PORT: ${SSRF_HTTP_PORT:-3128} - SSRF_PROXY_HTTPS_URL: ${SSRF_PROXY_HTTPS_URL:-http://ssrf_proxy:3128} - SSRF_PROXY_HTTP_URL: ${SSRF_PROXY_HTTP_URL:-http://ssrf_proxy:3128} - SSRF_REVERSE_PROXY_PORT: ${SSRF_REVERSE_PROXY_PORT:-8194} - SSRF_SANDBOX_HOST: ${SSRF_SANDBOX_HOST:-sandbox} - STORAGE_TYPE: ${STORAGE_TYPE:-opendal} - SUPABASE_API_KEY: ${SUPABASE_API_KEY:-your-access-key} - SUPABASE_BUCKET_NAME: ${SUPABASE_BUCKET_NAME:-your-bucket-name} - SUPABASE_URL: ${SUPABASE_URL:-your-server-url} - TEMPLATE_TRANSFORM_MAX_LENGTH: ${TEMPLATE_TRANSFORM_MAX_LENGTH:-80000} - TENCENT_COS_BUCKET_NAME: ${TENCENT_COS_BUCKET_NAME:-your-bucket-name} - TENCENT_COS_REGION: ${TENCENT_COS_REGION:-your-region} - TENCENT_COS_SCHEME: ${TENCENT_COS_SCHEME:-your-scheme} - TENCENT_COS_SECRET_ID: ${TENCENT_COS_SECRET_ID:-your-secret-id} - TENCENT_COS_SECRET_KEY: ${TENCENT_COS_SECRET_KEY:-your-secret-key} - TENCENT_VECTOR_DB_API_KEY: ${TENCENT_VECTOR_DB_API_KEY:-dify} - TENCENT_VECTOR_DB_DATABASE: ${TENCENT_VECTOR_DB_DATABASE:-dify} - TENCENT_VECTOR_DB_REPLICAS: ${TENCENT_VECTOR_DB_REPLICAS:-2} - TENCENT_VECTOR_DB_SHARD: ${TENCENT_VECTOR_DB_SHARD:-1} - TENCENT_VECTOR_DB_TIMEOUT: ${TENCENT_VECTOR_DB_TIMEOUT:-30} - TENCENT_VECTOR_DB_URL: ${TENCENT_VECTOR_DB_URL:-http://127.0.0.1} - TENCENT_VECTOR_DB_USERNAME: ${TENCENT_VECTOR_DB_USERNAME:-dify} - TEXT_GENERATION_TIMEOUT_MS: ${TEXT_GENERATION_TIMEOUT_MS:-60000} - TIDB_API_URL: ${TIDB_API_URL:-http://127.0.0.1} - TIDB_IAM_API_URL: ${TIDB_IAM_API_URL:-http://127.0.0.1} - TIDB_ON_QDRANT_API_KEY: ${TIDB_ON_QDRANT_API_KEY:-dify} - TIDB_ON_QDRANT_CLIENT_TIMEOUT: ${TIDB_ON_QDRANT_CLIENT_TIMEOUT:-20} - TIDB_ON_QDRANT_GRPC_ENABLED: ${TIDB_ON_QDRANT_GRPC_ENABLED:-false} - TIDB_ON_QDRANT_GRPC_PORT: ${TIDB_ON_QDRANT_GRPC_PORT:-6334} - TIDB_ON_QDRANT_URL: ${TIDB_ON_QDRANT_URL:-http://127.0.0.1} - TIDB_PRIVATE_KEY: ${TIDB_PRIVATE_KEY:-dify} - TIDB_PROJECT_ID: ${TIDB_PROJECT_ID:-dify} - TIDB_PUBLIC_KEY: ${TIDB_PUBLIC_KEY:-dify} - TIDB_REGION: ${TIDB_REGION:-regions/aws-us-east-1} - TIDB_SPEND_LIMIT: ${TIDB_SPEND_LIMIT:-100} - TIDB_VECTOR_DATABASE: ${TIDB_VECTOR_DATABASE:-dify} - TIDB_VECTOR_HOST: ${TIDB_VECTOR_HOST:-tidb} - TIDB_VECTOR_PASSWORD: ${TIDB_VECTOR_PASSWORD:-} - TIDB_VECTOR_PORT: ${TIDB_VECTOR_PORT:-4000} - TIDB_VECTOR_USER: ${TIDB_VECTOR_USER:-} - TOP_K_MAX_VALUE: ${TOP_K_MAX_VALUE:-10} - UNSTRUCTURED_API_KEY: ${UNSTRUCTURED_API_KEY:-} - UNSTRUCTURED_API_URL: ${UNSTRUCTURED_API_URL:-} - UPLOAD_AUDIO_FILE_SIZE_LIMIT: ${UPLOAD_AUDIO_FILE_SIZE_LIMIT:-50} - UPLOAD_FILE_BATCH_LIMIT: ${UPLOAD_FILE_BATCH_LIMIT:-5} - UPLOAD_FILE_SIZE_LIMIT: ${UPLOAD_FILE_SIZE_LIMIT:-15} - UPLOAD_IMAGE_FILE_SIZE_LIMIT: ${UPLOAD_IMAGE_FILE_SIZE_LIMIT:-10} - UPLOAD_VIDEO_FILE_SIZE_LIMIT: ${UPLOAD_VIDEO_FILE_SIZE_LIMIT:-100} - UPSTASH_VECTOR_TOKEN: ${UPSTASH_VECTOR_TOKEN:-dify} - UPSTASH_VECTOR_URL: ${UPSTASH_VECTOR_URL:-https://xxx-vector.upstash.io} - VECTOR_STORE: ${VECTOR_STORE:-weaviate} - VIKINGDB_ACCESS_KEY: ${VIKINGDB_ACCESS_KEY:-your-ak} - VIKINGDB_CONNECTION_TIMEOUT: ${VIKINGDB_CONNECTION_TIMEOUT:-30} - VIKINGDB_HOST: ${VIKINGDB_HOST:-api-vikingdb.xxx.volces.com} - VIKINGDB_REGION: ${VIKINGDB_REGION:-cn-shanghai} - VIKINGDB_SCHEMA: ${VIKINGDB_SCHEMA:-http} - VIKINGDB_SECRET_KEY: ${VIKINGDB_SECRET_KEY:-your-sk} - VIKINGDB_SOCKET_TIMEOUT: ${VIKINGDB_SOCKET_TIMEOUT:-30} - VOLCENGINE_TOS_ACCESS_KEY: ${VOLCENGINE_TOS_ACCESS_KEY:-your-access-key} - VOLCENGINE_TOS_BUCKET_NAME: ${VOLCENGINE_TOS_BUCKET_NAME:-your-bucket-name} - VOLCENGINE_TOS_ENDPOINT: ${VOLCENGINE_TOS_ENDPOINT:-your-server-url} - VOLCENGINE_TOS_REGION: ${VOLCENGINE_TOS_REGION:-your-region} - VOLCENGINE_TOS_SECRET_KEY: ${VOLCENGINE_TOS_SECRET_KEY:-your-secret-key} - WEAVIATE_API_KEY: ${WEAVIATE_API_KEY:-WVF5YThaHlkYwhGUSmCRgsX3tD5ngdN8pkih} - WEAVIATE_AUTHENTICATION_ANONYMOUS_ACCESS_ENABLED: ${WEAVIATE_AUTHENTICATION_ANONYMOUS_ACCESS_ENABLED:-true} - WEAVIATE_AUTHENTICATION_APIKEY_ALLOWED_KEYS: ${WEAVIATE_AUTHENTICATION_APIKEY_ALLOWED_KEYS:-WVF5YThaHlkYwhGUSmCRgsX3tD5ngdN8pkih} - WEAVIATE_AUTHENTICATION_APIKEY_ENABLED: ${WEAVIATE_AUTHENTICATION_APIKEY_ENABLED:-true} - WEAVIATE_AUTHENTICATION_APIKEY_USERS: ${WEAVIATE_AUTHENTICATION_APIKEY_USERS:-hello@dify.ai} - WEAVIATE_AUTHORIZATION_ADMINLIST_ENABLED: ${WEAVIATE_AUTHORIZATION_ADMINLIST_ENABLED:-true} - WEAVIATE_AUTHORIZATION_ADMINLIST_USERS: ${WEAVIATE_AUTHORIZATION_ADMINLIST_USERS:-hello@dify.ai} - WEAVIATE_CLUSTER_HOSTNAME: ${WEAVIATE_CLUSTER_HOSTNAME:-node1} - WEAVIATE_DEFAULT_VECTORIZER_MODULE: ${WEAVIATE_DEFAULT_VECTORIZER_MODULE:-none} - WEAVIATE_ENDPOINT: ${WEAVIATE_ENDPOINT:-http://weaviate:8080} - WEAVIATE_PERSISTENCE_DATA_PATH: ${WEAVIATE_PERSISTENCE_DATA_PATH:-/var/lib/weaviate} - WEAVIATE_QUERY_DEFAULTS_LIMIT: ${WEAVIATE_QUERY_DEFAULTS_LIMIT:-25} - WEB_API_CORS_ALLOW_ORIGINS: ${WEB_API_CORS_ALLOW_ORIGINS:-*} - WEB_SENTRY_DSN: ${WEB_SENTRY_DSN:-} - WORKFLOW_CALL_MAX_DEPTH: ${WORKFLOW_CALL_MAX_DEPTH:-5} - WORKFLOW_FILE_UPLOAD_LIMIT: ${WORKFLOW_FILE_UPLOAD_LIMIT:-10} - WORKFLOW_MAX_EXECUTION_STEPS: ${WORKFLOW_MAX_EXECUTION_STEPS:-500} - WORKFLOW_MAX_EXECUTION_TIME: ${WORKFLOW_MAX_EXECUTION_TIME:-1200} - WORKFLOW_PARALLEL_DEPTH_LIMIT: ${WORKFLOW_PARALLEL_DEPTH_LIMIT:-3} - image: langgenius/dify-api:1.0.0 - networks: - - ssrf_proxy_network - - default - restart: always - volumes: - - ${DIFY_ROOT_PATH}/volumes/app/storage:/app/api/storage -volumes: - dify_es01_data: null - oradata: null -x-shared-env: - ACCESS_TOKEN_EXPIRE_MINUTES: ${ACCESS_TOKEN_EXPIRE_MINUTES:-60} - ALIYUN_OSS_ACCESS_KEY: ${ALIYUN_OSS_ACCESS_KEY:-your-access-key} - ALIYUN_OSS_AUTH_VERSION: ${ALIYUN_OSS_AUTH_VERSION:-v4} - ALIYUN_OSS_BUCKET_NAME: ${ALIYUN_OSS_BUCKET_NAME:-your-bucket-name} - ALIYUN_OSS_ENDPOINT: ${ALIYUN_OSS_ENDPOINT:-https://oss-ap-southeast-1-internal.aliyuncs.com} - ALIYUN_OSS_PATH: ${ALIYUN_OSS_PATH:-your-path} - ALIYUN_OSS_REGION: ${ALIYUN_OSS_REGION:-ap-southeast-1} - ALIYUN_OSS_SECRET_KEY: ${ALIYUN_OSS_SECRET_KEY:-your-secret-key} - ANALYTICDB_ACCOUNT: ${ANALYTICDB_ACCOUNT:-testaccount} - ANALYTICDB_HOST: ${ANALYTICDB_HOST:-gp-test.aliyuncs.com} - ANALYTICDB_INSTANCE_ID: ${ANALYTICDB_INSTANCE_ID:-gp-ab123456} - ANALYTICDB_KEY_ID: ${ANALYTICDB_KEY_ID:-your-ak} - ANALYTICDB_KEY_SECRET: ${ANALYTICDB_KEY_SECRET:-your-sk} - ANALYTICDB_MAX_CONNECTION: ${ANALYTICDB_MAX_CONNECTION:-5} - ANALYTICDB_MIN_CONNECTION: ${ANALYTICDB_MIN_CONNECTION:-1} - ANALYTICDB_NAMESPACE: ${ANALYTICDB_NAMESPACE:-dify} - ANALYTICDB_NAMESPACE_PASSWORD: ${ANALYTICDB_NAMESPACE_PASSWORD:-difypassword} - ANALYTICDB_PASSWORD: ${ANALYTICDB_PASSWORD:-testpassword} - ANALYTICDB_PORT: ${ANALYTICDB_PORT:-5432} - ANALYTICDB_REGION_ID: ${ANALYTICDB_REGION_ID:-cn-hangzhou} - API_SENTRY_DSN: ${API_SENTRY_DSN:-} - API_SENTRY_PROFILES_SAMPLE_RATE: ${API_SENTRY_PROFILES_SAMPLE_RATE:-1.0} - API_SENTRY_TRACES_SAMPLE_RATE: ${API_SENTRY_TRACES_SAMPLE_RATE:-1.0} - API_TOOL_DEFAULT_CONNECT_TIMEOUT: ${API_TOOL_DEFAULT_CONNECT_TIMEOUT:-10} - API_TOOL_DEFAULT_READ_TIMEOUT: ${API_TOOL_DEFAULT_READ_TIMEOUT:-60} - APP_API_URL: ${APP_API_URL:-} - APP_MAX_ACTIVE_REQUESTS: ${APP_MAX_ACTIVE_REQUESTS:-0} - APP_MAX_EXECUTION_TIME: ${APP_MAX_EXECUTION_TIME:-1200} - APP_WEB_URL: ${APP_WEB_URL:-} - AZURE_BLOB_ACCOUNT_KEY: ${AZURE_BLOB_ACCOUNT_KEY:-difyai} - AZURE_BLOB_ACCOUNT_NAME: ${AZURE_BLOB_ACCOUNT_NAME:-difyai} - AZURE_BLOB_ACCOUNT_URL: ${AZURE_BLOB_ACCOUNT_URL:-https://.blob.core.windows.net} - AZURE_BLOB_CONTAINER_NAME: ${AZURE_BLOB_CONTAINER_NAME:-difyai-container} - BAIDU_OBS_ACCESS_KEY: ${BAIDU_OBS_ACCESS_KEY:-your-access-key} - BAIDU_OBS_BUCKET_NAME: ${BAIDU_OBS_BUCKET_NAME:-your-bucket-name} - BAIDU_OBS_ENDPOINT: ${BAIDU_OBS_ENDPOINT:-your-server-url} - BAIDU_OBS_SECRET_KEY: ${BAIDU_OBS_SECRET_KEY:-your-secret-key} - BAIDU_VECTOR_DB_ACCOUNT: ${BAIDU_VECTOR_DB_ACCOUNT:-root} - BAIDU_VECTOR_DB_API_KEY: ${BAIDU_VECTOR_DB_API_KEY:-dify} - BAIDU_VECTOR_DB_CONNECTION_TIMEOUT_MS: ${BAIDU_VECTOR_DB_CONNECTION_TIMEOUT_MS:-30000} - BAIDU_VECTOR_DB_DATABASE: ${BAIDU_VECTOR_DB_DATABASE:-dify} - BAIDU_VECTOR_DB_ENDPOINT: ${BAIDU_VECTOR_DB_ENDPOINT:-http://127.0.0.1:5287} - BAIDU_VECTOR_DB_REPLICAS: ${BAIDU_VECTOR_DB_REPLICAS:-3} - BAIDU_VECTOR_DB_SHARD: ${BAIDU_VECTOR_DB_SHARD:-1} - BROKER_USE_SSL: ${BROKER_USE_SSL:-false} - CELERY_AUTO_SCALE: ${CELERY_AUTO_SCALE:-false} - CELERY_BROKER_URL: ${CELERY_BROKER_URL:-redis://:difyai123456@redis:6379/1} - CELERY_MAX_WORKERS: ${CELERY_MAX_WORKERS:-} - CELERY_MIN_WORKERS: ${CELERY_MIN_WORKERS:-} - CELERY_SENTINEL_MASTER_NAME: ${CELERY_SENTINEL_MASTER_NAME:-} - CELERY_SENTINEL_SOCKET_TIMEOUT: ${CELERY_SENTINEL_SOCKET_TIMEOUT:-0.1} - CELERY_USE_SENTINEL: ${CELERY_USE_SENTINEL:-false} - CELERY_WORKER_AMOUNT: ${CELERY_WORKER_AMOUNT:-} - CELERY_WORKER_CLASS: ${CELERY_WORKER_CLASS:-} - CERTBOT_DOMAIN: ${CERTBOT_DOMAIN:-your_domain.com} - CERTBOT_EMAIL: ${CERTBOT_EMAIL:-your_email@example.com} - CERTBOT_OPTIONS: ${CERTBOT_OPTIONS:-} - CHECK_UPDATE_URL: ${CHECK_UPDATE_URL:-https://updates.dify.ai} - CHROMA_AUTH_CREDENTIALS: ${CHROMA_AUTH_CREDENTIALS:-} - CHROMA_AUTH_PROVIDER: ${CHROMA_AUTH_PROVIDER:-chromadb.auth.token_authn.TokenAuthClientProvider} - CHROMA_DATABASE: ${CHROMA_DATABASE:-default_database} - CHROMA_HOST: ${CHROMA_HOST:-127.0.0.1} - CHROMA_IS_PERSISTENT: ${CHROMA_IS_PERSISTENT:-TRUE} - CHROMA_PORT: ${CHROMA_PORT:-8000} - CHROMA_SERVER_AUTHN_CREDENTIALS: ${CHROMA_SERVER_AUTHN_CREDENTIALS:-difyai123456} - CHROMA_SERVER_AUTHN_PROVIDER: ${CHROMA_SERVER_AUTHN_PROVIDER:-chromadb.auth.token_authn.TokenAuthenticationServerProvider} - CHROMA_TENANT: ${CHROMA_TENANT:-default_tenant} - CODE_EXECUTION_API_KEY: ${CODE_EXECUTION_API_KEY:-dify-sandbox} - CODE_EXECUTION_CONNECT_TIMEOUT: ${CODE_EXECUTION_CONNECT_TIMEOUT:-10} - CODE_EXECUTION_ENDPOINT: ${CODE_EXECUTION_ENDPOINT:-http://sandbox:8194} - CODE_EXECUTION_READ_TIMEOUT: ${CODE_EXECUTION_READ_TIMEOUT:-60} - CODE_EXECUTION_WRITE_TIMEOUT: ${CODE_EXECUTION_WRITE_TIMEOUT:-10} - CODE_GENERATION_MAX_TOKENS: ${CODE_GENERATION_MAX_TOKENS:-1024} - CODE_MAX_DEPTH: ${CODE_MAX_DEPTH:-5} - CODE_MAX_NUMBER: ${CODE_MAX_NUMBER:-9223372036854775807} - CODE_MAX_NUMBER_ARRAY_LENGTH: ${CODE_MAX_NUMBER_ARRAY_LENGTH:-1000} - CODE_MAX_OBJECT_ARRAY_LENGTH: ${CODE_MAX_OBJECT_ARRAY_LENGTH:-30} - CODE_MAX_PRECISION: ${CODE_MAX_PRECISION:-20} - CODE_MAX_STRING_ARRAY_LENGTH: ${CODE_MAX_STRING_ARRAY_LENGTH:-30} - CODE_MAX_STRING_LENGTH: ${CODE_MAX_STRING_LENGTH:-80000} - CODE_MIN_NUMBER: ${CODE_MIN_NUMBER:--9223372036854775808} - CONSOLE_API_URL: ${CONSOLE_API_URL:-} - CONSOLE_CORS_ALLOW_ORIGINS: ${CONSOLE_CORS_ALLOW_ORIGINS:-*} - CONSOLE_WEB_URL: ${CONSOLE_WEB_URL:-} - COUCHBASE_BUCKET_NAME: ${COUCHBASE_BUCKET_NAME:-Embeddings} - COUCHBASE_CONNECTION_STRING: ${COUCHBASE_CONNECTION_STRING:-couchbase://couchbase-server} - COUCHBASE_PASSWORD: ${COUCHBASE_PASSWORD:-password} - COUCHBASE_SCOPE_NAME: ${COUCHBASE_SCOPE_NAME:-_default} - COUCHBASE_USER: ${COUCHBASE_USER:-Administrator} - CREATE_TIDB_SERVICE_JOB_ENABLED: ${CREATE_TIDB_SERVICE_JOB_ENABLED:-false} - CSP_WHITELIST: ${CSP_WHITELIST:-} - DB_DATABASE: ${DB_DATABASE:-dify} - DB_HOST: ${DB_HOST:-db} - DB_PASSWORD: ${DB_PASSWORD:-difyai123456} - DB_PLUGIN_DATABASE: ${DB_PLUGIN_DATABASE:-dify_plugin} - DB_PORT: ${DB_PORT:-5432} - DB_USERNAME: ${DB_USERNAME:-postgres} - DEBUG: ${DEBUG:-false} - DEPLOY_ENV: ${DEPLOY_ENV:-PRODUCTION} - DIFY_BIND_ADDRESS: ${DIFY_BIND_ADDRESS:-0.0.0.0} - DIFY_PORT: ${DIFY_PORT:-5001} - ELASTICSEARCH_HOST: ${ELASTICSEARCH_HOST:-0.0.0.0} - ELASTICSEARCH_PASSWORD: ${ELASTICSEARCH_PASSWORD:-elastic} - ELASTICSEARCH_PORT: ${ELASTICSEARCH_PORT:-9200} - ELASTICSEARCH_USERNAME: ${ELASTICSEARCH_USERNAME:-elastic} - ENDPOINT_URL_TEMPLATE: ${ENDPOINT_URL_TEMPLATE:-http://localhost/e/{hook_id}} - ETCD_AUTO_COMPACTION_MODE: ${ETCD_AUTO_COMPACTION_MODE:-revision} - ETCD_AUTO_COMPACTION_RETENTION: ${ETCD_AUTO_COMPACTION_RETENTION:-1000} - ETCD_ENDPOINTS: ${ETCD_ENDPOINTS:-etcd:2379} - ETCD_QUOTA_BACKEND_BYTES: ${ETCD_QUOTA_BACKEND_BYTES:-4294967296} - ETCD_SNAPSHOT_COUNT: ${ETCD_SNAPSHOT_COUNT:-50000} - ETL_TYPE: ${ETL_TYPE:-dify} - EXPOSE_NGINX_PORT: ${PANEL_APP_PORT_HTTP:-8080} - EXPOSE_NGINX_SSL_PORT: ${PANEL_APP_PORT_HTTPS:-8443} - EXPOSE_PLUGIN_DAEMON_PORT: ${EXPOSE_PLUGIN_DAEMON_PORT:-5002} - EXPOSE_PLUGIN_DEBUGGING_HOST: ${EXPOSE_PLUGIN_DEBUGGING_HOST:-localhost} - EXPOSE_PLUGIN_DEBUGGING_PORT: ${EXPOSE_PLUGIN_DEBUGGING_PORT:-5003} - FILES_ACCESS_TIMEOUT: ${FILES_ACCESS_TIMEOUT:-300} - FILES_URL: ${FILES_URL:-} - FLASK_DEBUG: ${FLASK_DEBUG:-false} - FORCE_VERIFYING_SIGNATURE: ${FORCE_VERIFYING_SIGNATURE:-true} - GOOGLE_STORAGE_BUCKET_NAME: ${GOOGLE_STORAGE_BUCKET_NAME:-your-bucket-name} - GOOGLE_STORAGE_SERVICE_ACCOUNT_JSON_BASE64: ${GOOGLE_STORAGE_SERVICE_ACCOUNT_JSON_BASE64:-} - GUNICORN_TIMEOUT: ${GUNICORN_TIMEOUT:-360} - HTTP_REQUEST_NODE_MAX_BINARY_SIZE: ${HTTP_REQUEST_NODE_MAX_BINARY_SIZE:-10485760} - HTTP_REQUEST_NODE_MAX_TEXT_SIZE: ${HTTP_REQUEST_NODE_MAX_TEXT_SIZE:-1048576} - HUAWEI_OBS_ACCESS_KEY: ${HUAWEI_OBS_ACCESS_KEY:-your-access-key} - HUAWEI_OBS_BUCKET_NAME: ${HUAWEI_OBS_BUCKET_NAME:-your-bucket-name} - HUAWEI_OBS_SECRET_KEY: ${HUAWEI_OBS_SECRET_KEY:-your-secret-key} - HUAWEI_OBS_SERVER: ${HUAWEI_OBS_SERVER:-your-server-url} - INDEXING_MAX_SEGMENTATION_TOKENS_LENGTH: ${INDEXING_MAX_SEGMENTATION_TOKENS_LENGTH:-4000} - INIT_PASSWORD: ${INIT_PASSWORD:-} - INVITE_EXPIRY_HOURS: ${INVITE_EXPIRY_HOURS:-72} - KIBANA_PORT: ${KIBANA_PORT:-5601} - LINDORM_PASSWORD: ${LINDORM_PASSWORD:-lindorm} - LINDORM_URL: ${LINDORM_URL:-http://lindorm:30070} - LINDORM_USERNAME: ${LINDORM_USERNAME:-lindorm} - LOG_DATEFORMAT: ${LOG_DATEFORMAT:-%Y-%m-%d %H:%M:%S} - LOG_FILE: ${LOG_FILE:-/app/logs/server.log} - LOG_FILE_BACKUP_COUNT: ${LOG_FILE_BACKUP_COUNT:-5} - LOG_FILE_MAX_SIZE: ${LOG_FILE_MAX_SIZE:-20} - LOG_LEVEL: ${LOG_LEVEL:-INFO} - LOG_TZ: ${LOG_TZ:-UTC} - MAIL_DEFAULT_SEND_FROM: ${MAIL_DEFAULT_SEND_FROM:-} - MAIL_TYPE: ${MAIL_TYPE:-resend} - MARKETPLACE_API_URL: ${MARKETPLACE_API_URL:-https://marketplace.dify.ai} - MARKETPLACE_ENABLED: ${MARKETPLACE_ENABLED:-true} - MAX_SUBMIT_COUNT: ${MAX_SUBMIT_COUNT:-100} - MAX_VARIABLE_SIZE: ${MAX_VARIABLE_SIZE:-204800} - MIGRATION_ENABLED: ${MIGRATION_ENABLED:-true} - MILVUS_AUTHORIZATION_ENABLED: ${MILVUS_AUTHORIZATION_ENABLED:-true} - MILVUS_ENABLE_HYBRID_SEARCH: ${MILVUS_ENABLE_HYBRID_SEARCH:-False} - MILVUS_PASSWORD: ${MILVUS_PASSWORD:-Milvus} - MILVUS_TOKEN: ${MILVUS_TOKEN:-} - MILVUS_URI: ${MILVUS_URI:-http://127.0.0.1:19530} - MILVUS_USER: ${MILVUS_USER:-root} - MINIO_ACCESS_KEY: ${MINIO_ACCESS_KEY:-minioadmin} - MINIO_ADDRESS: ${MINIO_ADDRESS:-minio:9000} - MINIO_SECRET_KEY: ${MINIO_SECRET_KEY:-minioadmin} - MULTIMODAL_SEND_FORMAT: ${MULTIMODAL_SEND_FORMAT:-base64} - MYSCALE_DATABASE: ${MYSCALE_DATABASE:-dify} - MYSCALE_FTS_PARAMS: ${MYSCALE_FTS_PARAMS:-} - MYSCALE_HOST: ${MYSCALE_HOST:-myscale} - MYSCALE_PASSWORD: ${MYSCALE_PASSWORD:-} - MYSCALE_PORT: ${MYSCALE_PORT:-8123} - MYSCALE_USER: ${MYSCALE_USER:-default} - NGINX_CLIENT_MAX_BODY_SIZE: ${NGINX_CLIENT_MAX_BODY_SIZE:-15M} - NGINX_ENABLE_CERTBOT_CHALLENGE: ${NGINX_ENABLE_CERTBOT_CHALLENGE:-false} - NGINX_HTTPS_ENABLED: ${NGINX_HTTPS_ENABLED:-false} - NGINX_KEEPALIVE_TIMEOUT: ${NGINX_KEEPALIVE_TIMEOUT:-65} - NGINX_PORT: ${NGINX_PORT:-80} - NGINX_PROXY_READ_TIMEOUT: ${NGINX_PROXY_READ_TIMEOUT:-3600s} - NGINX_PROXY_SEND_TIMEOUT: ${NGINX_PROXY_SEND_TIMEOUT:-3600s} - NGINX_SERVER_NAME: ${NGINX_SERVER_NAME:-_} - NGINX_SSL_CERT_FILENAME: ${NGINX_SSL_CERT_FILENAME:-dify.crt} - NGINX_SSL_CERT_KEY_FILENAME: ${NGINX_SSL_CERT_KEY_FILENAME:-dify.key} - NGINX_SSL_PORT: ${NGINX_SSL_PORT:-443} - NGINX_SSL_PROTOCOLS: ${NGINX_SSL_PROTOCOLS:-TLSv1.1 TLSv1.2 TLSv1.3} - NGINX_WORKER_PROCESSES: ${NGINX_WORKER_PROCESSES:-auto} - NOTION_CLIENT_ID: ${NOTION_CLIENT_ID:-} - NOTION_CLIENT_SECRET: ${NOTION_CLIENT_SECRET:-} - NOTION_INTEGRATION_TYPE: ${NOTION_INTEGRATION_TYPE:-public} - NOTION_INTERNAL_SECRET: ${NOTION_INTERNAL_SECRET:-} - OCEANBASE_CLUSTER_NAME: ${OCEANBASE_CLUSTER_NAME:-difyai} - OCEANBASE_MEMORY_LIMIT: ${OCEANBASE_MEMORY_LIMIT:-6G} - OCEANBASE_VECTOR_DATABASE: ${OCEANBASE_VECTOR_DATABASE:-test} - OCEANBASE_VECTOR_HOST: ${OCEANBASE_VECTOR_HOST:-oceanbase} - OCEANBASE_VECTOR_PASSWORD: ${OCEANBASE_VECTOR_PASSWORD:-difyai123456} - OCEANBASE_VECTOR_PORT: ${OCEANBASE_VECTOR_PORT:-2881} - OCEANBASE_VECTOR_USER: ${OCEANBASE_VECTOR_USER:-root@test} - OCI_ACCESS_KEY: ${OCI_ACCESS_KEY:-your-access-key} - OCI_BUCKET_NAME: ${OCI_BUCKET_NAME:-your-bucket-name} - OCI_ENDPOINT: ${OCI_ENDPOINT:-https://objectstorage.us-ashburn-1.oraclecloud.com} - OCI_REGION: ${OCI_REGION:-us-ashburn-1} - OCI_SECRET_KEY: ${OCI_SECRET_KEY:-your-secret-key} - OPENAI_API_BASE: ${OPENAI_API_BASE:-https://api.openai.com/v1} - OPENDAL_FS_ROOT: ${OPENDAL_FS_ROOT:-storage} - OPENDAL_SCHEME: ${OPENDAL_SCHEME:-fs} - OPENSEARCH_BOOTSTRAP_MEMORY_LOCK: ${OPENSEARCH_BOOTSTRAP_MEMORY_LOCK:-true} - OPENSEARCH_DISCOVERY_TYPE: ${OPENSEARCH_DISCOVERY_TYPE:-single-node} - OPENSEARCH_HOST: ${OPENSEARCH_HOST:-opensearch} - OPENSEARCH_INITIAL_ADMIN_PASSWORD: ${OPENSEARCH_INITIAL_ADMIN_PASSWORD:-Qazwsxedc!@#123} - OPENSEARCH_JAVA_OPTS_MAX: ${OPENSEARCH_JAVA_OPTS_MAX:-1024m} - OPENSEARCH_JAVA_OPTS_MIN: ${OPENSEARCH_JAVA_OPTS_MIN:-512m} - OPENSEARCH_MEMLOCK_HARD: ${OPENSEARCH_MEMLOCK_HARD:--1} - OPENSEARCH_MEMLOCK_SOFT: ${OPENSEARCH_MEMLOCK_SOFT:--1} - OPENSEARCH_NOFILE_HARD: ${OPENSEARCH_NOFILE_HARD:-65536} - OPENSEARCH_NOFILE_SOFT: ${OPENSEARCH_NOFILE_SOFT:-65536} - OPENSEARCH_PASSWORD: ${OPENSEARCH_PASSWORD:-admin} - OPENSEARCH_PORT: ${OPENSEARCH_PORT:-9200} - OPENSEARCH_SECURE: ${OPENSEARCH_SECURE:-true} - OPENSEARCH_USER: ${OPENSEARCH_USER:-admin} - ORACLE_CHARACTERSET: ${ORACLE_CHARACTERSET:-AL32UTF8} - ORACLE_DATABASE: ${ORACLE_DATABASE:-FREEPDB1} - ORACLE_HOST: ${ORACLE_HOST:-oracle} - ORACLE_PASSWORD: ${ORACLE_PASSWORD:-dify} - ORACLE_PORT: ${ORACLE_PORT:-1521} - ORACLE_PWD: ${ORACLE_PWD:-Dify123456} - ORACLE_USER: ${ORACLE_USER:-dify} - PGDATA: ${PGDATA:-/var/lib/postgresql/data/pgdata} - PGUSER: ${PGUSER:-${DB_USERNAME}} - PGVECTOR_DATABASE: ${PGVECTOR_DATABASE:-dify} - PGVECTOR_HOST: ${PGVECTOR_HOST:-pgvector} - PGVECTOR_MAX_CONNECTION: ${PGVECTOR_MAX_CONNECTION:-5} - PGVECTOR_MIN_CONNECTION: ${PGVECTOR_MIN_CONNECTION:-1} - PGVECTOR_PASSWORD: ${PGVECTOR_PASSWORD:-difyai123456} - PGVECTOR_PGDATA: ${PGVECTOR_PGDATA:-/var/lib/postgresql/data/pgdata} - PGVECTOR_PGUSER: ${PGVECTOR_PGUSER:-postgres} - PGVECTOR_PORT: ${PGVECTOR_PORT:-5432} - PGVECTOR_POSTGRES_DB: ${PGVECTOR_POSTGRES_DB:-dify} - PGVECTOR_POSTGRES_PASSWORD: ${PGVECTOR_POSTGRES_PASSWORD:-difyai123456} - PGVECTOR_USER: ${PGVECTOR_USER:-postgres} - PGVECTO_RS_DATABASE: ${PGVECTO_RS_DATABASE:-dify} - PGVECTO_RS_HOST: ${PGVECTO_RS_HOST:-pgvecto-rs} - PGVECTO_RS_PASSWORD: ${PGVECTO_RS_PASSWORD:-difyai123456} - PGVECTO_RS_PORT: ${PGVECTO_RS_PORT:-5432} - PGVECTO_RS_USER: ${PGVECTO_RS_USER:-postgres} - PLUGIN_DAEMON_KEY: ${PLUGIN_DAEMON_KEY:-lYkiYYT6owG+71oLerGzA7GXCgOT++6ovaezWAjpCjf+Sjc3ZtU+qUEi} - PLUGIN_DAEMON_PORT: ${PLUGIN_DAEMON_PORT:-5002} - PLUGIN_DAEMON_URL: ${PLUGIN_DAEMON_URL:-http://plugin_daemon:5002} - PLUGIN_DEBUGGING_HOST: ${PLUGIN_DEBUGGING_HOST:-0.0.0.0} - PLUGIN_DEBUGGING_PORT: ${PLUGIN_DEBUGGING_PORT:-5003} - PLUGIN_DIFY_INNER_API_KEY: ${PLUGIN_DIFY_INNER_API_KEY:-QaHbTe77CtuXmsfyhR7+vRjI/+XbV1AaFy691iy+kGDv2Jvy0/eAh8Y1} - PLUGIN_DIFY_INNER_API_URL: ${PLUGIN_DIFY_INNER_API_URL:-http://api:5001} - PLUGIN_MAX_PACKAGE_SIZE: ${PLUGIN_MAX_PACKAGE_SIZE:-52428800} - PLUGIN_PPROF_ENABLED: ${PLUGIN_PPROF_ENABLED:-false} - POSITION_PROVIDER_EXCLUDES: ${POSITION_PROVIDER_EXCLUDES:-} - POSITION_PROVIDER_INCLUDES: ${POSITION_PROVIDER_INCLUDES:-} - POSITION_PROVIDER_PINS: ${POSITION_PROVIDER_PINS:-} - POSITION_TOOL_EXCLUDES: ${POSITION_TOOL_EXCLUDES:-} - POSITION_TOOL_INCLUDES: ${POSITION_TOOL_INCLUDES:-} - POSITION_TOOL_PINS: ${POSITION_TOOL_PINS:-} - POSTGRES_DB: ${POSTGRES_DB:-${DB_DATABASE}} - POSTGRES_EFFECTIVE_CACHE_SIZE: ${POSTGRES_EFFECTIVE_CACHE_SIZE:-4096MB} - POSTGRES_MAINTENANCE_WORK_MEM: ${POSTGRES_MAINTENANCE_WORK_MEM:-64MB} - POSTGRES_MAX_CONNECTIONS: ${POSTGRES_MAX_CONNECTIONS:-100} - POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-${DB_PASSWORD}} - POSTGRES_SHARED_BUFFERS: ${POSTGRES_SHARED_BUFFERS:-128MB} - POSTGRES_WORK_MEM: ${POSTGRES_WORK_MEM:-4MB} - PROMPT_GENERATION_MAX_TOKENS: ${PROMPT_GENERATION_MAX_TOKENS:-512} - QDRANT_API_KEY: ${QDRANT_API_KEY:-difyai123456} - QDRANT_CLIENT_TIMEOUT: ${QDRANT_CLIENT_TIMEOUT:-20} - QDRANT_GRPC_ENABLED: ${QDRANT_GRPC_ENABLED:-false} - QDRANT_GRPC_PORT: ${QDRANT_GRPC_PORT:-6334} - QDRANT_URL: ${QDRANT_URL:-http://qdrant:6333} - REDIS_CLUSTERS: ${REDIS_CLUSTERS:-} - REDIS_CLUSTERS_PASSWORD: ${REDIS_CLUSTERS_PASSWORD:-} - REDIS_DB: ${REDIS_DB:-0} - REDIS_HOST: ${REDIS_HOST:-redis} - REDIS_PASSWORD: ${REDIS_PASSWORD:-difyai123456} - REDIS_PORT: ${REDIS_PORT:-6379} - REDIS_SENTINELS: ${REDIS_SENTINELS:-} - REDIS_SENTINEL_PASSWORD: ${REDIS_SENTINEL_PASSWORD:-} - REDIS_SENTINEL_SERVICE_NAME: ${REDIS_SENTINEL_SERVICE_NAME:-} - REDIS_SENTINEL_SOCKET_TIMEOUT: ${REDIS_SENTINEL_SOCKET_TIMEOUT:-0.1} - REDIS_SENTINEL_USERNAME: ${REDIS_SENTINEL_USERNAME:-} - REDIS_USERNAME: ${REDIS_USERNAME:-} - REDIS_USE_CLUSTERS: ${REDIS_USE_CLUSTERS:-false} - REDIS_USE_SENTINEL: ${REDIS_USE_SENTINEL:-false} - REDIS_USE_SSL: ${REDIS_USE_SSL:-false} - REFRESH_TOKEN_EXPIRE_DAYS: ${REFRESH_TOKEN_EXPIRE_DAYS:-30} - RELYT_DATABASE: ${RELYT_DATABASE:-postgres} - RELYT_HOST: ${RELYT_HOST:-db} - RELYT_PASSWORD: ${RELYT_PASSWORD:-difyai123456} - RELYT_PORT: ${RELYT_PORT:-5432} - RELYT_USER: ${RELYT_USER:-postgres} - RESEND_API_KEY: ${RESEND_API_KEY:-your-resend-api-key} - RESEND_API_URL: ${RESEND_API_URL:-https://api.resend.com} - RESET_PASSWORD_TOKEN_EXPIRY_MINUTES: ${RESET_PASSWORD_TOKEN_EXPIRY_MINUTES:-5} - S3_ACCESS_KEY: ${S3_ACCESS_KEY:-} - S3_BUCKET_NAME: ${S3_BUCKET_NAME:-difyai} - S3_ENDPOINT: ${S3_ENDPOINT:-} - S3_REGION: ${S3_REGION:-us-east-1} - S3_SECRET_KEY: ${S3_SECRET_KEY:-} - S3_USE_AWS_MANAGED_IAM: ${S3_USE_AWS_MANAGED_IAM:-false} - SANDBOX_API_KEY: ${SANDBOX_API_KEY:-dify-sandbox} - SANDBOX_ENABLE_NETWORK: ${SANDBOX_ENABLE_NETWORK:-true} - SANDBOX_GIN_MODE: ${SANDBOX_GIN_MODE:-release} - SANDBOX_HTTPS_PROXY: ${SANDBOX_HTTPS_PROXY:-http://ssrf_proxy:3128} - SANDBOX_HTTP_PROXY: ${SANDBOX_HTTP_PROXY:-http://ssrf_proxy:3128} - SANDBOX_PORT: ${SANDBOX_PORT:-8194} - SANDBOX_WORKER_TIMEOUT: ${SANDBOX_WORKER_TIMEOUT:-15} - SCARF_NO_ANALYTICS: ${SCARF_NO_ANALYTICS:-true} - SECRET_KEY: ${SECRET_KEY:-sk-9f73s3ljTXVcMT3Blb3ljTqtsKiGHXVcMT3BlbkFJLK7U} - SENTRY_DSN: ${SENTRY_DSN:-} - SERVER_WORKER_AMOUNT: ${SERVER_WORKER_AMOUNT:-1} - SERVER_WORKER_CLASS: ${SERVER_WORKER_CLASS:-gevent} - SERVER_WORKER_CONNECTIONS: ${SERVER_WORKER_CONNECTIONS:-10} - SERVICE_API_URL: ${SERVICE_API_URL:-} - SMTP_OPPORTUNISTIC_TLS: ${SMTP_OPPORTUNISTIC_TLS:-false} - SMTP_PASSWORD: ${SMTP_PASSWORD:-} - SMTP_PORT: ${SMTP_PORT:-465} - SMTP_SERVER: ${SMTP_SERVER:-} - SMTP_USERNAME: ${SMTP_USERNAME:-} - SMTP_USE_TLS: ${SMTP_USE_TLS:-true} - SQLALCHEMY_ECHO: ${SQLALCHEMY_ECHO:-false} - SQLALCHEMY_POOL_RECYCLE: ${SQLALCHEMY_POOL_RECYCLE:-3600} - SQLALCHEMY_POOL_SIZE: ${SQLALCHEMY_POOL_SIZE:-30} - SSRF_COREDUMP_DIR: ${SSRF_COREDUMP_DIR:-/var/spool/squid} - SSRF_DEFAULT_CONNECT_TIME_OUT: ${SSRF_DEFAULT_CONNECT_TIME_OUT:-5} - SSRF_DEFAULT_READ_TIME_OUT: ${SSRF_DEFAULT_READ_TIME_OUT:-5} - SSRF_DEFAULT_TIME_OUT: ${SSRF_DEFAULT_TIME_OUT:-5} - SSRF_DEFAULT_WRITE_TIME_OUT: ${SSRF_DEFAULT_WRITE_TIME_OUT:-5} - SSRF_HTTP_PORT: ${SSRF_HTTP_PORT:-3128} - SSRF_PROXY_HTTPS_URL: ${SSRF_PROXY_HTTPS_URL:-http://ssrf_proxy:3128} - SSRF_PROXY_HTTP_URL: ${SSRF_PROXY_HTTP_URL:-http://ssrf_proxy:3128} - SSRF_REVERSE_PROXY_PORT: ${SSRF_REVERSE_PROXY_PORT:-8194} - SSRF_SANDBOX_HOST: ${SSRF_SANDBOX_HOST:-sandbox} - STORAGE_TYPE: ${STORAGE_TYPE:-opendal} - SUPABASE_API_KEY: ${SUPABASE_API_KEY:-your-access-key} - SUPABASE_BUCKET_NAME: ${SUPABASE_BUCKET_NAME:-your-bucket-name} - SUPABASE_URL: ${SUPABASE_URL:-your-server-url} - TEMPLATE_TRANSFORM_MAX_LENGTH: ${TEMPLATE_TRANSFORM_MAX_LENGTH:-80000} - TENCENT_COS_BUCKET_NAME: ${TENCENT_COS_BUCKET_NAME:-your-bucket-name} - TENCENT_COS_REGION: ${TENCENT_COS_REGION:-your-region} - TENCENT_COS_SCHEME: ${TENCENT_COS_SCHEME:-your-scheme} - TENCENT_COS_SECRET_ID: ${TENCENT_COS_SECRET_ID:-your-secret-id} - TENCENT_COS_SECRET_KEY: ${TENCENT_COS_SECRET_KEY:-your-secret-key} - TENCENT_VECTOR_DB_API_KEY: ${TENCENT_VECTOR_DB_API_KEY:-dify} - TENCENT_VECTOR_DB_DATABASE: ${TENCENT_VECTOR_DB_DATABASE:-dify} - TENCENT_VECTOR_DB_REPLICAS: ${TENCENT_VECTOR_DB_REPLICAS:-2} - TENCENT_VECTOR_DB_SHARD: ${TENCENT_VECTOR_DB_SHARD:-1} - TENCENT_VECTOR_DB_TIMEOUT: ${TENCENT_VECTOR_DB_TIMEOUT:-30} - TENCENT_VECTOR_DB_URL: ${TENCENT_VECTOR_DB_URL:-http://127.0.0.1} - TENCENT_VECTOR_DB_USERNAME: ${TENCENT_VECTOR_DB_USERNAME:-dify} - TEXT_GENERATION_TIMEOUT_MS: ${TEXT_GENERATION_TIMEOUT_MS:-60000} - TIDB_API_URL: ${TIDB_API_URL:-http://127.0.0.1} - TIDB_IAM_API_URL: ${TIDB_IAM_API_URL:-http://127.0.0.1} - TIDB_ON_QDRANT_API_KEY: ${TIDB_ON_QDRANT_API_KEY:-dify} - TIDB_ON_QDRANT_CLIENT_TIMEOUT: ${TIDB_ON_QDRANT_CLIENT_TIMEOUT:-20} - TIDB_ON_QDRANT_GRPC_ENABLED: ${TIDB_ON_QDRANT_GRPC_ENABLED:-false} - TIDB_ON_QDRANT_GRPC_PORT: ${TIDB_ON_QDRANT_GRPC_PORT:-6334} - TIDB_ON_QDRANT_URL: ${TIDB_ON_QDRANT_URL:-http://127.0.0.1} - TIDB_PRIVATE_KEY: ${TIDB_PRIVATE_KEY:-dify} - TIDB_PROJECT_ID: ${TIDB_PROJECT_ID:-dify} - TIDB_PUBLIC_KEY: ${TIDB_PUBLIC_KEY:-dify} - TIDB_REGION: ${TIDB_REGION:-regions/aws-us-east-1} - TIDB_SPEND_LIMIT: ${TIDB_SPEND_LIMIT:-100} - TIDB_VECTOR_DATABASE: ${TIDB_VECTOR_DATABASE:-dify} - TIDB_VECTOR_HOST: ${TIDB_VECTOR_HOST:-tidb} - TIDB_VECTOR_PASSWORD: ${TIDB_VECTOR_PASSWORD:-} - TIDB_VECTOR_PORT: ${TIDB_VECTOR_PORT:-4000} - TIDB_VECTOR_USER: ${TIDB_VECTOR_USER:-} - TOP_K_MAX_VALUE: ${TOP_K_MAX_VALUE:-10} - UNSTRUCTURED_API_KEY: ${UNSTRUCTURED_API_KEY:-} - UNSTRUCTURED_API_URL: ${UNSTRUCTURED_API_URL:-} - UPLOAD_AUDIO_FILE_SIZE_LIMIT: ${UPLOAD_AUDIO_FILE_SIZE_LIMIT:-50} - UPLOAD_FILE_BATCH_LIMIT: ${UPLOAD_FILE_BATCH_LIMIT:-5} - UPLOAD_FILE_SIZE_LIMIT: ${UPLOAD_FILE_SIZE_LIMIT:-15} - UPLOAD_IMAGE_FILE_SIZE_LIMIT: ${UPLOAD_IMAGE_FILE_SIZE_LIMIT:-10} - UPLOAD_VIDEO_FILE_SIZE_LIMIT: ${UPLOAD_VIDEO_FILE_SIZE_LIMIT:-100} - UPSTASH_VECTOR_TOKEN: ${UPSTASH_VECTOR_TOKEN:-dify} - UPSTASH_VECTOR_URL: ${UPSTASH_VECTOR_URL:-https://xxx-vector.upstash.io} - VECTOR_STORE: ${VECTOR_STORE:-weaviate} - VIKINGDB_ACCESS_KEY: ${VIKINGDB_ACCESS_KEY:-your-ak} - VIKINGDB_CONNECTION_TIMEOUT: ${VIKINGDB_CONNECTION_TIMEOUT:-30} - VIKINGDB_HOST: ${VIKINGDB_HOST:-api-vikingdb.xxx.volces.com} - VIKINGDB_REGION: ${VIKINGDB_REGION:-cn-shanghai} - VIKINGDB_SCHEMA: ${VIKINGDB_SCHEMA:-http} - VIKINGDB_SECRET_KEY: ${VIKINGDB_SECRET_KEY:-your-sk} - VIKINGDB_SOCKET_TIMEOUT: ${VIKINGDB_SOCKET_TIMEOUT:-30} - VOLCENGINE_TOS_ACCESS_KEY: ${VOLCENGINE_TOS_ACCESS_KEY:-your-access-key} - VOLCENGINE_TOS_BUCKET_NAME: ${VOLCENGINE_TOS_BUCKET_NAME:-your-bucket-name} - VOLCENGINE_TOS_ENDPOINT: ${VOLCENGINE_TOS_ENDPOINT:-your-server-url} - VOLCENGINE_TOS_REGION: ${VOLCENGINE_TOS_REGION:-your-region} - VOLCENGINE_TOS_SECRET_KEY: ${VOLCENGINE_TOS_SECRET_KEY:-your-secret-key} - WEAVIATE_API_KEY: ${WEAVIATE_API_KEY:-WVF5YThaHlkYwhGUSmCRgsX3tD5ngdN8pkih} - WEAVIATE_AUTHENTICATION_ANONYMOUS_ACCESS_ENABLED: ${WEAVIATE_AUTHENTICATION_ANONYMOUS_ACCESS_ENABLED:-true} - WEAVIATE_AUTHENTICATION_APIKEY_ALLOWED_KEYS: ${WEAVIATE_AUTHENTICATION_APIKEY_ALLOWED_KEYS:-WVF5YThaHlkYwhGUSmCRgsX3tD5ngdN8pkih} - WEAVIATE_AUTHENTICATION_APIKEY_ENABLED: ${WEAVIATE_AUTHENTICATION_APIKEY_ENABLED:-true} - WEAVIATE_AUTHENTICATION_APIKEY_USERS: ${WEAVIATE_AUTHENTICATION_APIKEY_USERS:-hello@dify.ai} - WEAVIATE_AUTHORIZATION_ADMINLIST_ENABLED: ${WEAVIATE_AUTHORIZATION_ADMINLIST_ENABLED:-true} - WEAVIATE_AUTHORIZATION_ADMINLIST_USERS: ${WEAVIATE_AUTHORIZATION_ADMINLIST_USERS:-hello@dify.ai} - WEAVIATE_CLUSTER_HOSTNAME: ${WEAVIATE_CLUSTER_HOSTNAME:-node1} - WEAVIATE_DEFAULT_VECTORIZER_MODULE: ${WEAVIATE_DEFAULT_VECTORIZER_MODULE:-none} - WEAVIATE_ENDPOINT: ${WEAVIATE_ENDPOINT:-http://weaviate:8080} - WEAVIATE_PERSISTENCE_DATA_PATH: ${WEAVIATE_PERSISTENCE_DATA_PATH:-/var/lib/weaviate} - WEAVIATE_QUERY_DEFAULTS_LIMIT: ${WEAVIATE_QUERY_DEFAULTS_LIMIT:-25} - WEB_API_CORS_ALLOW_ORIGINS: ${WEB_API_CORS_ALLOW_ORIGINS:-*} - WEB_SENTRY_DSN: ${WEB_SENTRY_DSN:-} - WORKFLOW_CALL_MAX_DEPTH: ${WORKFLOW_CALL_MAX_DEPTH:-5} - WORKFLOW_FILE_UPLOAD_LIMIT: ${WORKFLOW_FILE_UPLOAD_LIMIT:-10} - WORKFLOW_MAX_EXECUTION_STEPS: ${WORKFLOW_MAX_EXECUTION_STEPS:-500} - WORKFLOW_MAX_EXECUTION_TIME: ${WORKFLOW_MAX_EXECUTION_TIME:-1200} - WORKFLOW_PARALLEL_DEPTH_LIMIT: ${WORKFLOW_PARALLEL_DEPTH_LIMIT:-3} diff --git a/appstore/dify/1.0.0/envs/default.env b/appstore/dify/1.0.0/envs/default.env deleted file mode 100644 index cd05f46e6..000000000 --- a/appstore/dify/1.0.0/envs/default.env +++ /dev/null @@ -1,2 +0,0 @@ -# copyright© 2024 XinJiang Ms Studio -ENV_FILE=.env diff --git a/appstore/dify/1.0.0/envs/dify.env b/appstore/dify/1.0.0/envs/dify.env deleted file mode 100644 index 9f6732ed9..000000000 --- a/appstore/dify/1.0.0/envs/dify.env +++ /dev/null @@ -1,965 +0,0 @@ -# ------------------------------ -# Environment Variables for API service & worker -# ------------------------------ - -# ------------------------------ -# Common Variables -# ------------------------------ - -# The backend URL of the console API, -# used to concatenate the authorization callback. -# If empty, it is the same domain. -# Example: https://api.console.dify.ai -CONSOLE_API_URL= - -# The front-end URL of the console web, -# used to concatenate some front-end addresses and for CORS configuration use. -# If empty, it is the same domain. -# Example: https://console.dify.ai -CONSOLE_WEB_URL= - -# Service API Url, -# used to display Service API Base Url to the front-end. -# If empty, it is the same domain. -# Example: https://api.dify.ai -SERVICE_API_URL= - -# WebApp API backend Url, -# used to declare the back-end URL for the front-end API. -# If empty, it is the same domain. -# Example: https://api.app.dify.ai -APP_API_URL= - -# WebApp Url, -# used to display WebAPP API Base Url to the front-end. -# If empty, it is the same domain. -# Example: https://app.dify.ai -APP_WEB_URL= - -# File preview or download Url prefix. -# used to display File preview or download Url to the front-end or as Multi-model inputs; -# Url is signed and has expiration time. -FILES_URL= - -# ------------------------------ -# Server Configuration -# ------------------------------ - -# The log level for the application. -# Supported values are `DEBUG`, `INFO`, `WARNING`, `ERROR`, `CRITICAL` -LOG_LEVEL=INFO -# Log file path -LOG_FILE=/app/logs/server.log -# Log file max size, the unit is MB -LOG_FILE_MAX_SIZE=20 -# Log file max backup count -LOG_FILE_BACKUP_COUNT=5 -# Log dateformat -LOG_DATEFORMAT=%Y-%m-%d %H:%M:%S -# Log Timezone -LOG_TZ=UTC - -# Debug mode, default is false. -# It is recommended to turn on this configuration for local development -# to prevent some problems caused by monkey patch. -DEBUG=false - -# Flask debug mode, it can output trace information at the interface when turned on, -# which is convenient for debugging. -FLASK_DEBUG=false - -# A secretkey 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`. -SECRET_KEY=sk-9f73s3ljTXVcMT3Blb3ljTqtsKiGHXVcMT3BlbkFJLK7U - -# Password for admin user initialization. -# If left unset, admin user will not be prompted for a password -# when creating the initial admin account. -# The length of the password cannot exceed 30 charactors. -INIT_PASSWORD= - -# Deployment environment. -# Supported values are `PRODUCTION`, `TESTING`. Default is `PRODUCTION`. -# Testing environment. There will be a distinct color label on the front-end page, -# indicating that this environment is a testing environment. -DEPLOY_ENV=PRODUCTION - -# Whether to enable the version check policy. -# If set to empty, https://updates.dify.ai will be called for version check. -CHECK_UPDATE_URL=https://updates.dify.ai - -# Used to change the OpenAI base address, default is https://api.openai.com/v1. -# When OpenAI cannot be accessed in China, replace it with a domestic mirror address, -# or when a local model provides OpenAI compatible API, it can be replaced. -OPENAI_API_BASE=https://api.openai.com/v1 - -# When enabled, migrations will be executed prior to application startup -# and the application will start after the migrations have completed. -MIGRATION_ENABLED=true - -# File Access Time specifies a time interval in seconds for the file to be accessed. -# The default value is 300 seconds. -FILES_ACCESS_TIMEOUT=300 - -# Access token expiration time in minutes -ACCESS_TOKEN_EXPIRE_MINUTES=60 - -# Refresh token expiration time in days -REFRESH_TOKEN_EXPIRE_DAYS=30 - -# The maximum number of active requests for the application, where 0 means unlimited, should be a non-negative integer. -APP_MAX_ACTIVE_REQUESTS=0 -APP_MAX_EXECUTION_TIME=1200 - -# ------------------------------ -# Container Startup Related Configuration -# Only effective when starting with docker image or docker-compose. -# ------------------------------ - -# API service binding address, default: 0.0.0.0, i.e., all addresses can be accessed. -DIFY_BIND_ADDRESS=0.0.0.0 - -# API service binding port number, default 5001. -DIFY_PORT=5001 - -# The number of API server workers, i.e., the number of workers. -# Formula: number of cpu cores x 2 + 1 for sync, 1 for Gevent -# Reference: https://docs.gunicorn.org/en/stable/design.html#how-many-workers -SERVER_WORKER_AMOUNT=1 - -# Defaults to gevent. If using windows, it can be switched to sync or solo. -SERVER_WORKER_CLASS=gevent - -# Default number of worker connections, the default is 10. -SERVER_WORKER_CONNECTIONS=10 - -# Similar to SERVER_WORKER_CLASS. -# If using windows, it can be switched to sync or solo. -CELERY_WORKER_CLASS= - -# Request handling timeout. The default is 200, -# it is recommended to set it to 360 to support a longer sse connection time. -GUNICORN_TIMEOUT=360 - -# The number of Celery workers. The default is 1, and can be set as needed. -CELERY_WORKER_AMOUNT= - -# Flag indicating whether to enable autoscaling of Celery workers. -# -# Autoscaling is useful when tasks are CPU intensive and can be dynamically -# allocated and deallocated based on the workload. -# -# When autoscaling is enabled, the maximum and minimum number of workers can -# be specified. The autoscaling algorithm will dynamically adjust the number -# of workers within the specified range. -# -# Default is false (i.e., autoscaling is disabled). -# -# Example: -# CELERY_AUTO_SCALE=true -CELERY_AUTO_SCALE=false - -# The maximum number of Celery workers that can be autoscaled. -# This is optional and only used when autoscaling is enabled. -# Default is not set. -CELERY_MAX_WORKERS= - -# The minimum number of Celery workers that can be autoscaled. -# This is optional and only used when autoscaling is enabled. -# Default is not set. -CELERY_MIN_WORKERS= - -# API Tool configuration -API_TOOL_DEFAULT_CONNECT_TIMEOUT=10 -API_TOOL_DEFAULT_READ_TIMEOUT=60 - - -# ------------------------------ -# Database Configuration -# The database uses PostgreSQL. Please use the public schema. -# It is consistent with the configuration in the 'db' service below. -# ------------------------------ - -DB_USERNAME=postgres -DB_PASSWORD=difyai123456 -DB_HOST=db -DB_PORT=5432 -DB_DATABASE=dify -# The size of the database connection pool. -# The default is 30 connections, which can be appropriately increased. -SQLALCHEMY_POOL_SIZE=30 -# Database connection pool recycling time, the default is 3600 seconds. -SQLALCHEMY_POOL_RECYCLE=3600 -# Whether to print SQL, default is false. -SQLALCHEMY_ECHO=false - -# Maximum number of connections to the database -# Default is 100 -# -# Reference: https://www.postgresql.org/docs/current/runtime-config-connection.html#GUC-MAX-CONNECTIONS -POSTGRES_MAX_CONNECTIONS=100 - -# Sets the amount of shared memory used for postgres's shared buffers. -# Default is 128MB -# Recommended value: 25% of available memory -# Reference: https://www.postgresql.org/docs/current/runtime-config-resource.html#GUC-SHARED-BUFFERS -POSTGRES_SHARED_BUFFERS=128MB - -# Sets the amount of memory used by each database worker for working space. -# Default is 4MB -# -# Reference: https://www.postgresql.org/docs/current/runtime-config-resource.html#GUC-WORK-MEM -POSTGRES_WORK_MEM=4MB - -# Sets the amount of memory reserved for maintenance activities. -# Default is 64MB -# -# Reference: https://www.postgresql.org/docs/current/runtime-config-resource.html#GUC-MAINTENANCE-WORK-MEM -POSTGRES_MAINTENANCE_WORK_MEM=64MB - -# Sets the planner's assumption about the effective cache size. -# Default is 4096MB -# -# Reference: https://www.postgresql.org/docs/current/runtime-config-query.html#GUC-EFFECTIVE-CACHE-SIZE -POSTGRES_EFFECTIVE_CACHE_SIZE=4096MB - -# ------------------------------ -# Redis Configuration -# This Redis configuration is used for caching and for pub/sub during conversation. -# ------------------------------ - -REDIS_HOST=redis -REDIS_PORT=6379 -REDIS_USERNAME= -REDIS_PASSWORD=difyai123456 -REDIS_USE_SSL=false -REDIS_DB=0 - -# Whether to use Redis Sentinel mode. -# If set to true, the application will automatically discover and connect to the master node through Sentinel. -REDIS_USE_SENTINEL=false - -# List of Redis Sentinel nodes. If Sentinel mode is enabled, provide at least one Sentinel IP and port. -# Format: `:,:,:` -REDIS_SENTINELS= -REDIS_SENTINEL_SERVICE_NAME= -REDIS_SENTINEL_USERNAME= -REDIS_SENTINEL_PASSWORD= -REDIS_SENTINEL_SOCKET_TIMEOUT=0.1 - -# List of Redis Cluster nodes. If Cluster mode is enabled, provide at least one Cluster IP and port. -# Format: `:,:,:` -REDIS_USE_CLUSTERS=false -REDIS_CLUSTERS= -REDIS_CLUSTERS_PASSWORD= - -# ------------------------------ -# Celery Configuration -# ------------------------------ - -# Use redis as the broker, and redis db 1 for celery broker. -# Format as follows: `redis://:@:/` -# Example: redis://:difyai123456@redis:6379/1 -# If use Redis Sentinel, format as follows: `sentinel://:@:/` -# Example: sentinel://localhost:26379/1;sentinel://localhost:26380/1;sentinel://localhost:26381/1 -CELERY_BROKER_URL=redis://:difyai123456@redis:6379/1 -BROKER_USE_SSL=false - -# If you are using Redis Sentinel for high availability, configure the following settings. -CELERY_USE_SENTINEL=false -CELERY_SENTINEL_MASTER_NAME= -CELERY_SENTINEL_SOCKET_TIMEOUT=0.1 - -# ------------------------------ -# CORS Configuration -# Used to set the front-end cross-domain access policy. -# ------------------------------ - -# Specifies the allowed origins for cross-origin requests to the Web API, -# e.g. https://dify.app or * for all origins. -WEB_API_CORS_ALLOW_ORIGINS=* - -# Specifies the allowed origins for cross-origin requests to the console API, -# e.g. https://cloud.dify.ai or * for all origins. -CONSOLE_CORS_ALLOW_ORIGINS=* - -# ------------------------------ -# File Storage Configuration -# ------------------------------ - -# The type of storage to use for storing user files. -STORAGE_TYPE=opendal - -# Apache OpenDAL Configuration -# The configuration for OpenDAL consists of the following format: OPENDAL__. -# You can find all the service configurations (CONFIG_NAME) in the repository at: https://github.com/apache/opendal/tree/main/core/src/services. -# Dify will scan configurations starting with OPENDAL_ and automatically apply them. -# The scheme name for the OpenDAL storage. -OPENDAL_SCHEME=fs -# Configurations for OpenDAL Local File System. -OPENDAL_FS_ROOT=storage - -# S3 Configuration -# -S3_ENDPOINT= -S3_REGION=us-east-1 -S3_BUCKET_NAME=difyai -S3_ACCESS_KEY= -S3_SECRET_KEY= -# Whether to use AWS managed IAM roles for authenticating with the S3 service. -# If set to false, the access key and secret key must be provided. -S3_USE_AWS_MANAGED_IAM=false - -# Azure Blob Configuration -# -AZURE_BLOB_ACCOUNT_NAME=difyai -AZURE_BLOB_ACCOUNT_KEY=difyai -AZURE_BLOB_CONTAINER_NAME=difyai-container -AZURE_BLOB_ACCOUNT_URL=https://.blob.core.windows.net - -# Google Storage Configuration -# -GOOGLE_STORAGE_BUCKET_NAME=your-bucket-name -GOOGLE_STORAGE_SERVICE_ACCOUNT_JSON_BASE64= - -# The Alibaba Cloud OSS configurations, -# -ALIYUN_OSS_BUCKET_NAME=your-bucket-name -ALIYUN_OSS_ACCESS_KEY=your-access-key -ALIYUN_OSS_SECRET_KEY=your-secret-key -ALIYUN_OSS_ENDPOINT=https://oss-ap-southeast-1-internal.aliyuncs.com -ALIYUN_OSS_REGION=ap-southeast-1 -ALIYUN_OSS_AUTH_VERSION=v4 -# Don't start with '/'. OSS doesn't support leading slash in object names. -ALIYUN_OSS_PATH=your-path - -# Tencent COS Configuration -# -TENCENT_COS_BUCKET_NAME=your-bucket-name -TENCENT_COS_SECRET_KEY=your-secret-key -TENCENT_COS_SECRET_ID=your-secret-id -TENCENT_COS_REGION=your-region -TENCENT_COS_SCHEME=your-scheme - -# Oracle Storage Configuration -# -OCI_ENDPOINT=https://objectstorage.us-ashburn-1.oraclecloud.com -OCI_BUCKET_NAME=your-bucket-name -OCI_ACCESS_KEY=your-access-key -OCI_SECRET_KEY=your-secret-key -OCI_REGION=us-ashburn-1 - -# Huawei OBS Configuration -# -HUAWEI_OBS_BUCKET_NAME=your-bucket-name -HUAWEI_OBS_SECRET_KEY=your-secret-key -HUAWEI_OBS_ACCESS_KEY=your-access-key -HUAWEI_OBS_SERVER=your-server-url - -# Volcengine TOS Configuration -# -VOLCENGINE_TOS_BUCKET_NAME=your-bucket-name -VOLCENGINE_TOS_SECRET_KEY=your-secret-key -VOLCENGINE_TOS_ACCESS_KEY=your-access-key -VOLCENGINE_TOS_ENDPOINT=your-server-url -VOLCENGINE_TOS_REGION=your-region - -# Baidu OBS Storage Configuration -# -BAIDU_OBS_BUCKET_NAME=your-bucket-name -BAIDU_OBS_SECRET_KEY=your-secret-key -BAIDU_OBS_ACCESS_KEY=your-access-key -BAIDU_OBS_ENDPOINT=your-server-url - -# Supabase Storage Configuration -# -SUPABASE_BUCKET_NAME=your-bucket-name -SUPABASE_API_KEY=your-access-key -SUPABASE_URL=your-server-url - -# ------------------------------ -# Vector Database Configuration -# ------------------------------ - -# The type of vector store to use. -# Supported values are `weaviate`, `qdrant`, `milvus`, `myscale`, `relyt`, `pgvector`, `pgvecto-rs`, `chroma`, `opensearch`, `tidb_vector`, `oracle`, `tencent`, `elasticsearch`, `elasticsearch-ja`, `analyticdb`, `couchbase`, `vikingdb`, `oceanbase`. -VECTOR_STORE=weaviate - -# The Weaviate endpoint URL. Only available when VECTOR_STORE is `weaviate`. -WEAVIATE_ENDPOINT=http://weaviate:8080 -WEAVIATE_API_KEY=WVF5YThaHlkYwhGUSmCRgsX3tD5ngdN8pkih - -# The Qdrant endpoint URL. Only available when VECTOR_STORE is `qdrant`. -QDRANT_URL=http://qdrant:6333 -QDRANT_API_KEY=difyai123456 -QDRANT_CLIENT_TIMEOUT=20 -QDRANT_GRPC_ENABLED=false -QDRANT_GRPC_PORT=6334 - -# Milvus configuration Only available when VECTOR_STORE is `milvus`. -# The milvus uri. -MILVUS_URI=http://127.0.0.1:19530 -MILVUS_TOKEN= -MILVUS_USER=root -MILVUS_PASSWORD=Milvus -MILVUS_ENABLE_HYBRID_SEARCH=False - -# MyScale configuration, only available when VECTOR_STORE is `myscale` -# For multi-language support, please set MYSCALE_FTS_PARAMS with referring to: -# https://myscale.com/docs/en/text-search/#understanding-fts-index-parameters -MYSCALE_HOST=myscale -MYSCALE_PORT=8123 -MYSCALE_USER=default -MYSCALE_PASSWORD= -MYSCALE_DATABASE=dify -MYSCALE_FTS_PARAMS= - -# Couchbase configurations, only available when VECTOR_STORE is `couchbase` -# The connection string must include hostname defined in the docker-compose file (couchbase-server in this case) -COUCHBASE_CONNECTION_STRING=couchbase://couchbase-server -COUCHBASE_USER=Administrator -COUCHBASE_PASSWORD=password -COUCHBASE_BUCKET_NAME=Embeddings -COUCHBASE_SCOPE_NAME=_default - -# pgvector configurations, only available when VECTOR_STORE is `pgvector` -PGVECTOR_HOST=pgvector -PGVECTOR_PORT=5432 -PGVECTOR_USER=postgres -PGVECTOR_PASSWORD=difyai123456 -PGVECTOR_DATABASE=dify -PGVECTOR_MIN_CONNECTION=1 -PGVECTOR_MAX_CONNECTION=5 - -# pgvecto-rs configurations, only available when VECTOR_STORE is `pgvecto-rs` -PGVECTO_RS_HOST=pgvecto-rs -PGVECTO_RS_PORT=5432 -PGVECTO_RS_USER=postgres -PGVECTO_RS_PASSWORD=difyai123456 -PGVECTO_RS_DATABASE=dify - -# analyticdb configurations, only available when VECTOR_STORE is `analyticdb` -ANALYTICDB_KEY_ID=your-ak -ANALYTICDB_KEY_SECRET=your-sk -ANALYTICDB_REGION_ID=cn-hangzhou -ANALYTICDB_INSTANCE_ID=gp-ab123456 -ANALYTICDB_ACCOUNT=testaccount -ANALYTICDB_PASSWORD=testpassword -ANALYTICDB_NAMESPACE=dify -ANALYTICDB_NAMESPACE_PASSWORD=difypassword -ANALYTICDB_HOST=gp-test.aliyuncs.com -ANALYTICDB_PORT=5432 -ANALYTICDB_MIN_CONNECTION=1 -ANALYTICDB_MAX_CONNECTION=5 - -# TiDB vector configurations, only available when VECTOR_STORE is `tidb` -TIDB_VECTOR_HOST=tidb -TIDB_VECTOR_PORT=4000 -TIDB_VECTOR_USER= -TIDB_VECTOR_PASSWORD= -TIDB_VECTOR_DATABASE=dify - -# Tidb on qdrant configuration, only available when VECTOR_STORE is `tidb_on_qdrant` -TIDB_ON_QDRANT_URL=http://127.0.0.1 -TIDB_ON_QDRANT_API_KEY=dify -TIDB_ON_QDRANT_CLIENT_TIMEOUT=20 -TIDB_ON_QDRANT_GRPC_ENABLED=false -TIDB_ON_QDRANT_GRPC_PORT=6334 -TIDB_PUBLIC_KEY=dify -TIDB_PRIVATE_KEY=dify -TIDB_API_URL=http://127.0.0.1 -TIDB_IAM_API_URL=http://127.0.0.1 -TIDB_REGION=regions/aws-us-east-1 -TIDB_PROJECT_ID=dify -TIDB_SPEND_LIMIT=100 - -# Chroma configuration, only available when VECTOR_STORE is `chroma` -CHROMA_HOST=127.0.0.1 -CHROMA_PORT=8000 -CHROMA_TENANT=default_tenant -CHROMA_DATABASE=default_database -CHROMA_AUTH_PROVIDER=chromadb.auth.token_authn.TokenAuthClientProvider -CHROMA_AUTH_CREDENTIALS= - -# Oracle configuration, only available when VECTOR_STORE is `oracle` -ORACLE_HOST=oracle -ORACLE_PORT=1521 -ORACLE_USER=dify -ORACLE_PASSWORD=dify -ORACLE_DATABASE=FREEPDB1 - -# relyt configurations, only available when VECTOR_STORE is `relyt` -RELYT_HOST=db -RELYT_PORT=5432 -RELYT_USER=postgres -RELYT_PASSWORD=difyai123456 -RELYT_DATABASE=postgres - -# open search configuration, only available when VECTOR_STORE is `opensearch` -OPENSEARCH_HOST=opensearch -OPENSEARCH_PORT=9200 -OPENSEARCH_USER=admin -OPENSEARCH_PASSWORD=admin -OPENSEARCH_SECURE=true - -# tencent vector configurations, only available when VECTOR_STORE is `tencent` -TENCENT_VECTOR_DB_URL=http://127.0.0.1 -TENCENT_VECTOR_DB_API_KEY=dify -TENCENT_VECTOR_DB_TIMEOUT=30 -TENCENT_VECTOR_DB_USERNAME=dify -TENCENT_VECTOR_DB_DATABASE=dify -TENCENT_VECTOR_DB_SHARD=1 -TENCENT_VECTOR_DB_REPLICAS=2 - -# ElasticSearch configuration, only available when VECTOR_STORE is `elasticsearch` -ELASTICSEARCH_HOST=0.0.0.0 -ELASTICSEARCH_PORT=9200 -ELASTICSEARCH_USERNAME=elastic -ELASTICSEARCH_PASSWORD=elastic -KIBANA_PORT=5601 - -# baidu vector configurations, only available when VECTOR_STORE is `baidu` -BAIDU_VECTOR_DB_ENDPOINT=http://127.0.0.1:5287 -BAIDU_VECTOR_DB_CONNECTION_TIMEOUT_MS=30000 -BAIDU_VECTOR_DB_ACCOUNT=root -BAIDU_VECTOR_DB_API_KEY=dify -BAIDU_VECTOR_DB_DATABASE=dify -BAIDU_VECTOR_DB_SHARD=1 -BAIDU_VECTOR_DB_REPLICAS=3 - -# VikingDB configurations, only available when VECTOR_STORE is `vikingdb` -VIKINGDB_ACCESS_KEY=your-ak -VIKINGDB_SECRET_KEY=your-sk -VIKINGDB_REGION=cn-shanghai -VIKINGDB_HOST=api-vikingdb.xxx.volces.com -VIKINGDB_SCHEMA=http -VIKINGDB_CONNECTION_TIMEOUT=30 -VIKINGDB_SOCKET_TIMEOUT=30 - -# Lindorm configuration, only available when VECTOR_STORE is `lindorm` -LINDORM_URL=http://lindorm:30070 -LINDORM_USERNAME=lindorm -LINDORM_PASSWORD=lindorm - -# OceanBase Vector configuration, only available when VECTOR_STORE is `oceanbase` -OCEANBASE_VECTOR_HOST=oceanbase -OCEANBASE_VECTOR_PORT=2881 -OCEANBASE_VECTOR_USER=root@test -OCEANBASE_VECTOR_PASSWORD=difyai123456 -OCEANBASE_VECTOR_DATABASE=test -OCEANBASE_CLUSTER_NAME=difyai -OCEANBASE_MEMORY_LIMIT=6G - -# Upstash Vector configuration, only available when VECTOR_STORE is `upstash` -UPSTASH_VECTOR_URL=https://xxx-vector.upstash.io -UPSTASH_VECTOR_TOKEN=dify - -# ------------------------------ -# Knowledge Configuration -# ------------------------------ - -# Upload file size limit, default 15M. -UPLOAD_FILE_SIZE_LIMIT=15 - -# The maximum number of files that can be uploaded at a time, default 5. -UPLOAD_FILE_BATCH_LIMIT=5 - -# ETL type, support: `dify`, `Unstructured` -# `dify` Dify's proprietary file extraction scheme -# `Unstructured` Unstructured.io file extraction scheme -ETL_TYPE=dify - -# Unstructured API path and API key, needs to be configured when ETL_TYPE is Unstructured -# Or using Unstructured for document extractor node for pptx. -# For example: http://unstructured:8000/general/v0/general -UNSTRUCTURED_API_URL= -UNSTRUCTURED_API_KEY= -SCARF_NO_ANALYTICS=true - -# ------------------------------ -# Model Configuration -# ------------------------------ - -# The maximum number of tokens allowed for prompt generation. -# This setting controls the upper limit of tokens that can be used by the LLM -# when generating a prompt in the prompt generation tool. -# Default: 512 tokens. -PROMPT_GENERATION_MAX_TOKENS=512 - -# The maximum number of tokens allowed for code generation. -# This setting controls the upper limit of tokens that can be used by the LLM -# when generating code in the code generation tool. -# Default: 1024 tokens. -CODE_GENERATION_MAX_TOKENS=1024 - -# ------------------------------ -# Multi-modal Configuration -# ------------------------------ - -# The format of the image/video/audio/document sent when the multi-modal model is input, -# the default is base64, optional url. -# The delay of the call in url mode will be lower than that in base64 mode. -# It is generally recommended to use the more compatible base64 mode. -# If configured as url, you need to configure FILES_URL as an externally accessible address so that the multi-modal model can access the image/video/audio/document. -MULTIMODAL_SEND_FORMAT=base64 -# Upload image file size limit, default 10M. -UPLOAD_IMAGE_FILE_SIZE_LIMIT=10 -# Upload video file size limit, default 100M. -UPLOAD_VIDEO_FILE_SIZE_LIMIT=100 -# Upload audio file size limit, default 50M. -UPLOAD_AUDIO_FILE_SIZE_LIMIT=50 - -# ------------------------------ -# Sentry Configuration -# Used for application monitoring and error log tracking. -# ------------------------------ -SENTRY_DSN= - -# API Service Sentry DSN address, default is empty, when empty, -# all monitoring information is not reported to Sentry. -# If not set, Sentry error reporting will be disabled. -API_SENTRY_DSN= -# API Service The reporting ratio of Sentry events, if it is 0.01, it is 1%. -API_SENTRY_TRACES_SAMPLE_RATE=1.0 -# API Service The reporting ratio of Sentry profiles, if it is 0.01, it is 1%. -API_SENTRY_PROFILES_SAMPLE_RATE=1.0 - -# Web Service Sentry DSN address, default is empty, when empty, -# all monitoring information is not reported to Sentry. -# If not set, Sentry error reporting will be disabled. -WEB_SENTRY_DSN= - -# ------------------------------ -# Notion Integration Configuration -# Variables can be obtained by applying for Notion integration: https://www.notion.so/my-integrations -# ------------------------------ - -# Configure as "public" or "internal". -# Since Notion's OAuth redirect URL only supports HTTPS, -# if deploying locally, please use Notion's internal integration. -NOTION_INTEGRATION_TYPE=public -# Notion OAuth client secret (used for public integration type) -NOTION_CLIENT_SECRET= -# Notion OAuth client id (used for public integration type) -NOTION_CLIENT_ID= -# Notion internal integration secret. -# If the value of NOTION_INTEGRATION_TYPE is "internal", -# you need to configure this variable. -NOTION_INTERNAL_SECRET= - -# ------------------------------ -# Mail related configuration -# ------------------------------ - -# Mail type, support: resend, smtp -MAIL_TYPE=resend - -# Default send from email address, if not specified -MAIL_DEFAULT_SEND_FROM= - -# API-Key for the Resend email provider, used when MAIL_TYPE is `resend`. -RESEND_API_URL=https://api.resend.com -RESEND_API_KEY=your-resend-api-key - - -# SMTP server configuration, used when MAIL_TYPE is `smtp` -SMTP_SERVER= -SMTP_PORT=465 -SMTP_USERNAME= -SMTP_PASSWORD= -SMTP_USE_TLS=true -SMTP_OPPORTUNISTIC_TLS=false - -# ------------------------------ -# Others Configuration -# ------------------------------ - -# Maximum length of segmentation tokens for indexing -INDEXING_MAX_SEGMENTATION_TOKENS_LENGTH=4000 - -# Member invitation link valid time (hours), -# Default: 72. -INVITE_EXPIRY_HOURS=72 - -# Reset password token valid time (minutes), -RESET_PASSWORD_TOKEN_EXPIRY_MINUTES=5 - -# The sandbox service endpoint. -CODE_EXECUTION_ENDPOINT=http://sandbox:8194 -CODE_EXECUTION_API_KEY=dify-sandbox -CODE_MAX_NUMBER=9223372036854775807 -CODE_MIN_NUMBER=-9223372036854775808 -CODE_MAX_DEPTH=5 -CODE_MAX_PRECISION=20 -CODE_MAX_STRING_LENGTH=80000 -CODE_MAX_STRING_ARRAY_LENGTH=30 -CODE_MAX_OBJECT_ARRAY_LENGTH=30 -CODE_MAX_NUMBER_ARRAY_LENGTH=1000 -CODE_EXECUTION_CONNECT_TIMEOUT=10 -CODE_EXECUTION_READ_TIMEOUT=60 -CODE_EXECUTION_WRITE_TIMEOUT=10 -TEMPLATE_TRANSFORM_MAX_LENGTH=80000 - -# Workflow runtime configuration -WORKFLOW_MAX_EXECUTION_STEPS=500 -WORKFLOW_MAX_EXECUTION_TIME=1200 -WORKFLOW_CALL_MAX_DEPTH=5 -MAX_VARIABLE_SIZE=204800 -WORKFLOW_PARALLEL_DEPTH_LIMIT=3 -WORKFLOW_FILE_UPLOAD_LIMIT=10 - -# HTTP request node in workflow configuration -HTTP_REQUEST_NODE_MAX_BINARY_SIZE=10485760 -HTTP_REQUEST_NODE_MAX_TEXT_SIZE=1048576 - -# SSRF Proxy server HTTP URL -SSRF_PROXY_HTTP_URL=http://ssrf_proxy:3128 -# SSRF Proxy server HTTPS URL -SSRF_PROXY_HTTPS_URL=http://ssrf_proxy:3128 - -# ------------------------------ -# Environment Variables for web Service -# ------------------------------ - -# The timeout for the text generation in millisecond -TEXT_GENERATION_TIMEOUT_MS=60000 - -# ------------------------------ -# Environment Variables for db Service -# ------------------------------ - -PGUSER=${DB_USERNAME} -# The password for the default postgres user. -POSTGRES_PASSWORD=${DB_PASSWORD} -# The name of the default postgres database. -POSTGRES_DB=${DB_DATABASE} -# postgres data directory -PGDATA=/var/lib/postgresql/data/pgdata - -# ------------------------------ -# Environment Variables for sandbox Service -# ------------------------------ - -# The API key for the sandbox service -SANDBOX_API_KEY=dify-sandbox -# The mode in which the Gin framework runs -SANDBOX_GIN_MODE=release -# The timeout for the worker in seconds -SANDBOX_WORKER_TIMEOUT=15 -# Enable network for the sandbox service -SANDBOX_ENABLE_NETWORK=true -# HTTP proxy URL for SSRF protection -SANDBOX_HTTP_PROXY=http://ssrf_proxy:3128 -# HTTPS proxy URL for SSRF protection -SANDBOX_HTTPS_PROXY=http://ssrf_proxy:3128 -# The port on which the sandbox service runs -SANDBOX_PORT=8194 - -# ------------------------------ -# Environment Variables for weaviate Service -# (only used when VECTOR_STORE is weaviate) -# ------------------------------ -WEAVIATE_PERSISTENCE_DATA_PATH=/var/lib/weaviate -WEAVIATE_QUERY_DEFAULTS_LIMIT=25 -WEAVIATE_AUTHENTICATION_ANONYMOUS_ACCESS_ENABLED=true -WEAVIATE_DEFAULT_VECTORIZER_MODULE=none -WEAVIATE_CLUSTER_HOSTNAME=node1 -WEAVIATE_AUTHENTICATION_APIKEY_ENABLED=true -WEAVIATE_AUTHENTICATION_APIKEY_ALLOWED_KEYS=WVF5YThaHlkYwhGUSmCRgsX3tD5ngdN8pkih -WEAVIATE_AUTHENTICATION_APIKEY_USERS=hello@dify.ai -WEAVIATE_AUTHORIZATION_ADMINLIST_ENABLED=true -WEAVIATE_AUTHORIZATION_ADMINLIST_USERS=hello@dify.ai - -# ------------------------------ -# Environment Variables for Chroma -# (only used when VECTOR_STORE is chroma) -# ------------------------------ - -# Authentication credentials for Chroma server -CHROMA_SERVER_AUTHN_CREDENTIALS=difyai123456 -# Authentication provider for Chroma server -CHROMA_SERVER_AUTHN_PROVIDER=chromadb.auth.token_authn.TokenAuthenticationServerProvider -# Persistence setting for Chroma server -CHROMA_IS_PERSISTENT=TRUE - -# ------------------------------ -# Environment Variables for Oracle Service -# (only used when VECTOR_STORE is Oracle) -# ------------------------------ -ORACLE_PWD=Dify123456 -ORACLE_CHARACTERSET=AL32UTF8 - -# ------------------------------ -# Environment Variables for milvus Service -# (only used when VECTOR_STORE is milvus) -# ------------------------------ -# ETCD configuration for auto compaction mode -ETCD_AUTO_COMPACTION_MODE=revision -# ETCD configuration for auto compaction retention in terms of number of revisions -ETCD_AUTO_COMPACTION_RETENTION=1000 -# ETCD configuration for backend quota in bytes -ETCD_QUOTA_BACKEND_BYTES=4294967296 -# ETCD configuration for the number of changes before triggering a snapshot -ETCD_SNAPSHOT_COUNT=50000 -# MinIO access key for authentication -MINIO_ACCESS_KEY=minioadmin -# MinIO secret key for authentication -MINIO_SECRET_KEY=minioadmin -# ETCD service endpoints -ETCD_ENDPOINTS=etcd:2379 -# MinIO service address -MINIO_ADDRESS=minio:9000 -# Enable or disable security authorization -MILVUS_AUTHORIZATION_ENABLED=true - -# ------------------------------ -# Environment Variables for pgvector / pgvector-rs Service -# (only used when VECTOR_STORE is pgvector / pgvector-rs) -# ------------------------------ -PGVECTOR_PGUSER=postgres -# The password for the default postgres user. -PGVECTOR_POSTGRES_PASSWORD=difyai123456 -# The name of the default postgres database. -PGVECTOR_POSTGRES_DB=dify -# postgres data directory -PGVECTOR_PGDATA=/var/lib/postgresql/data/pgdata - -# ------------------------------ -# Environment Variables for opensearch -# (only used when VECTOR_STORE is opensearch) -# ------------------------------ -OPENSEARCH_DISCOVERY_TYPE=single-node -OPENSEARCH_BOOTSTRAP_MEMORY_LOCK=true -OPENSEARCH_JAVA_OPTS_MIN=512m -OPENSEARCH_JAVA_OPTS_MAX=1024m -OPENSEARCH_INITIAL_ADMIN_PASSWORD=Qazwsxedc!@#123 -OPENSEARCH_MEMLOCK_SOFT=-1 -OPENSEARCH_MEMLOCK_HARD=-1 -OPENSEARCH_NOFILE_SOFT=65536 -OPENSEARCH_NOFILE_HARD=65536 - -# ------------------------------ -# Environment Variables for Nginx reverse proxy -# ------------------------------ -NGINX_SERVER_NAME=_ -NGINX_HTTPS_ENABLED=false -# HTTP port -NGINX_PORT=80 -# SSL settings are only applied when HTTPS_ENABLED is true -NGINX_SSL_PORT=443 -# if HTTPS_ENABLED is true, you're required to add your own SSL certificates/keys to the `./nginx/ssl` directory -# and modify the env vars below accordingly. -NGINX_SSL_CERT_FILENAME=dify.crt -NGINX_SSL_CERT_KEY_FILENAME=dify.key -NGINX_SSL_PROTOCOLS=TLSv1.1 TLSv1.2 TLSv1.3 - -# Nginx performance tuning -NGINX_WORKER_PROCESSES=auto -NGINX_CLIENT_MAX_BODY_SIZE=15M -NGINX_KEEPALIVE_TIMEOUT=65 - -# Proxy settings -NGINX_PROXY_READ_TIMEOUT=3600s -NGINX_PROXY_SEND_TIMEOUT=3600s - -# Set true to accept requests for /.well-known/acme-challenge/ -NGINX_ENABLE_CERTBOT_CHALLENGE=false - -# ------------------------------ -# Certbot Configuration -# ------------------------------ - -# Email address (required to get certificates from Let's Encrypt) -CERTBOT_EMAIL=your_email@example.com - -# Domain name -CERTBOT_DOMAIN=your_domain.com - -# certbot command options -# i.e: --force-renewal --dry-run --test-cert --debug -CERTBOT_OPTIONS= - -# ------------------------------ -# Environment Variables for SSRF Proxy -# ------------------------------ -SSRF_HTTP_PORT=3128 -SSRF_COREDUMP_DIR=/var/spool/squid -SSRF_REVERSE_PROXY_PORT=8194 -SSRF_SANDBOX_HOST=sandbox -SSRF_DEFAULT_TIME_OUT=5 -SSRF_DEFAULT_CONNECT_TIME_OUT=5 -SSRF_DEFAULT_READ_TIME_OUT=5 -SSRF_DEFAULT_WRITE_TIME_OUT=5 - -# ------------------------------ -# docker env var for specifying vector db type at startup -# (based on the vector db type, the corresponding docker -# compose profile will be used) -# if you want to use unstructured, add ',unstructured' to the end -# ------------------------------ -COMPOSE_PROFILES=${VECTOR_STORE:-weaviate} - -# ------------------------------ -# Docker Compose Service Expose Host Port Configurations -# ------------------------------ -EXPOSE_NGINX_PORT=80 -EXPOSE_NGINX_SSL_PORT=443 - -# ---------------------------------------------------------------------------- -# ModelProvider & Tool Position Configuration -# Used to specify the model providers and tools that can be used in the app. -# ---------------------------------------------------------------------------- - -# Pin, include, and exclude tools -# Use comma-separated values with no spaces between items. -# Example: POSITION_TOOL_PINS=bing,google -POSITION_TOOL_PINS= -POSITION_TOOL_INCLUDES= -POSITION_TOOL_EXCLUDES= - -# Pin, include, and exclude model providers -# Use comma-separated values with no spaces between items. -# Example: POSITION_PROVIDER_PINS=openai,openllm -POSITION_PROVIDER_PINS= -POSITION_PROVIDER_INCLUDES= -POSITION_PROVIDER_EXCLUDES= - -# CSP https://developer.mozilla.org/en-US/docs/Web/HTTP/CSP -CSP_WHITELIST= - -# Enable or disable create tidb service job -CREATE_TIDB_SERVICE_JOB_ENABLED=false - -# Maximum number of submitted thread count in a ThreadPool for parallel node execution -MAX_SUBMIT_COUNT=100 - -# The maximum number of top-k value for RAG. -TOP_K_MAX_VALUE=10 - -# ------------------------------ -# Plugin Daemon Configuration -# ------------------------------ - -DB_PLUGIN_DATABASE=dify_plugin -EXPOSE_PLUGIN_DAEMON_PORT=5002 -PLUGIN_DAEMON_PORT=5002 -PLUGIN_DAEMON_KEY=lYkiYYT6owG+71oLerGzA7GXCgOT++6ovaezWAjpCjf+Sjc3ZtU+qUEi -PLUGIN_DAEMON_URL=http://plugin_daemon:5002 -PLUGIN_MAX_PACKAGE_SIZE=52428800 -PLUGIN_PPROF_ENABLED=false - -PLUGIN_DEBUGGING_HOST=0.0.0.0 -PLUGIN_DEBUGGING_PORT=5003 -EXPOSE_PLUGIN_DEBUGGING_HOST=localhost -EXPOSE_PLUGIN_DEBUGGING_PORT=5003 - -PLUGIN_DIFY_INNER_API_KEY=QaHbTe77CtuXmsfyhR7+vRjI/+XbV1AaFy691iy+kGDv2Jvy0/eAh8Y1 -PLUGIN_DIFY_INNER_API_URL=http://api:5001 - -ENDPOINT_URL_TEMPLATE=http://localhost/e/{hook_id} - -MARKETPLACE_ENABLED=true -MARKETPLACE_API_URL=https://marketplace.dify.ai - -FORCE_VERIFYING_SIGNATURE=true diff --git a/appstore/dify/1.0.0/envs/global.env b/appstore/dify/1.0.0/envs/global.env deleted file mode 100644 index e10989fe4..000000000 --- a/appstore/dify/1.0.0/envs/global.env +++ /dev/null @@ -1,2 +0,0 @@ -# copyright© 2024 XinJiang Ms Studio -TZ=Asia/Shanghai diff --git a/appstore/dify/1.0.0/scripts/init.sh b/appstore/dify/1.0.0/scripts/init.sh deleted file mode 100644 index 085059fcc..000000000 --- a/appstore/dify/1.0.0/scripts/init.sh +++ /dev/null @@ -1,36 +0,0 @@ -#!/bin/bash - -if [ -f .env ]; then - source .env - - # setup-1 add default values - CURRENT_DIR=$(pwd) - sed -i '/^ENV_FILE=/d' .env - sed -i '/^GLOBAL_ENV_FILE=/d' .env - echo "ENV_FILE=${CURRENT_DIR}/.env" >> .env - echo "GLOBAL_ENV_FILE=${CURRENT_DIR}/envs/global.env" >> .env - echo "APP_ENV_FILE=${CURRENT_DIR}/envs/dify.env" >> .env - - # setup-2 update dir permissions - mkdir -p "$DIFY_ROOT_PATH" - - cp -r conf/. "$DIFY_ROOT_PATH/" - - # setup-3 sync environment variables - env_source="envs/dify.env" - if [ -f "$env_source" ]; then - while IFS='=' read -r key value; do - if [[ -z "$key" || "$key" =~ ^# ]]; then - continue - fi - if ! grep -q "^$key=" .env; then - echo "$key=$value" >> .env - fi - done < "$env_source" - fi - - echo "Check Finish." - -else - echo "Error: .env file not found." -fi diff --git a/appstore/dify/1.0.0/scripts/uninstall.sh b/appstore/dify/1.0.0/scripts/uninstall.sh deleted file mode 100644 index c86c4fbca..000000000 --- a/appstore/dify/1.0.0/scripts/uninstall.sh +++ /dev/null @@ -1,10 +0,0 @@ -#!/bin/bash - -if [ -f .env ]; then - source .env - - echo "Check Finish." - -else - echo "Error: .env file not found." -fi diff --git a/appstore/dify/1.0.0/scripts/upgrade.sh b/appstore/dify/1.0.0/scripts/upgrade.sh deleted file mode 100644 index ea92b0638..000000000 --- a/appstore/dify/1.0.0/scripts/upgrade.sh +++ /dev/null @@ -1,47 +0,0 @@ -#!/bin/bash - -if [ -f .env ]; then - source .env - - # setup-1 add default values - CURRENT_DIR=$(pwd) - sed -i '/^ENV_FILE=/d' .env - sed -i '/^GLOBAL_ENV_FILE=/d' .env - echo "ENV_FILE=${CURRENT_DIR}/.env" >> .env - echo "GLOBAL_ENV_FILE=${CURRENT_DIR}/envs/global.env" >> .env - echo "APP_ENV_FILE=${CURRENT_DIR}/envs/dify.env" >> .env - - # setup-2 update dir permissions - mkdir -p "$DIFY_ROOT_PATH" - - if [ -d "conf" ]; then - find conf -type f | while read -r file; do - dest="$DIFY_ROOT_PATH/${file#conf/}" - if [ ! -e "$dest" ]; then - mkdir -p "$(dirname "$dest")" - cp "$file" "$dest" - fi - done - echo "Conf files copied to $DIFY_ROOT_PATH." - else - echo "Warning: conf directory not found." - fi - - # setup-3 sync environment variables - env_source="envs/dify.env" - if [ -f "$env_source" ]; then - while IFS='=' read -r key value; do - if [[ -z "$key" || "$key" =~ ^# ]]; then - continue - fi - if ! grep -q "^$key=" .env; then - echo "$key=$value" >> .env - fi - done < "$env_source" - fi - - echo "Check Finish." - -else - echo "Error: .env file not found." -fi diff --git a/appstore/dify/README.md b/appstore/dify/README.md deleted file mode 100644 index 80b39160d..000000000 --- a/appstore/dify/README.md +++ /dev/null @@ -1,121 +0,0 @@ -# Dify - -Dify 是一个开源的 LLM 应用开发平台。其直观的界面结合了 AI 工作流、RAG 管道、Agent、模型管理、可观测性功能等,让您可以快速从原型到生产 - -![Dify](https://file.lifebus.top/imgs/dify_cover.png) - -![](https://img.shields.io/badge/%E6%96%B0%E7%96%86%E8%90%8C%E6%A3%AE%E8%BD%AF%E4%BB%B6%E5%BC%80%E5%8F%91%E5%B7%A5%E4%BD%9C%E5%AE%A4-%E6%8F%90%E4%BE%9B%E6%8A%80%E6%9C%AF%E6%94%AF%E6%8C%81-blue) - -## 简介 - -### 工作流 - -在画布上构建和测试功能强大的 AI 工作流程,利用以下所有功能以及更多功能 - -### 全面的模型支持 - -与数百种专有/开源 LLMs 以及数十种推理提供商和自托管解决方案无缝集成,涵盖 GPT、Mistral、Llama3 以及任何与 OpenAI API 兼容的模型 - -### Prompt IDE - -用于制作提示、比较模型性能以及向基于聊天的应用程序添加其他功能(如文本转语音)的直观界面 - -### RAG Pipeline - -广泛的 RAG 功能,涵盖从文档摄入到检索的所有内容,支持从 PDF、PPT 和其他常见文档格式中提取文本的开箱即用的支持 - -### Agent 智能体 - -您可以基于 LLM 函数调用或 ReAct 定义 Agent,并为 Agent 添加预构建或自定义工具。Dify 为 AI Agent -提供了50多种内置工具,如谷歌搜索、DALL·E、Stable Diffusion 和 WolframAlpha 等 - -### LLMOps - -随时间监视和分析应用程序日志和性能。您可以根据生产数据和标注持续改进提示、数据集和模型 - -### 后端即服务 - -所有 Dify 的功能都带有相应的 API,因此您可以轻松地将 Dify 集成到自己的业务逻辑中 - -## 功能比较 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
功能Dify.AILangChainFlowiseOpenAI Assistant API
编程方法API + 应用程序导向Python 代码应用程序导向API 导向
支持的 LLMs丰富多样丰富多样丰富多样仅限 OpenAI
RAG引擎
Agent
工作流
可观测性
企业功能(SSO/访问控制)
本地部署
- -## 安装说明 - -在安装 Dify 之前,请确保您的机器满足以下最低系统要求: - -+ CPU >= 2 Core -+ RAM >= 4 GiB - -## 修改配置 - -应用安装后,如有需要的配置,请修改应用目录下的 `.env` 文件 - ---- - -![Ms Studio](https://file.lifebus.top/imgs/ms_blank_001.png) diff --git a/appstore/dify/data.yml b/appstore/dify/data.yml deleted file mode 100644 index 5f2192304..000000000 --- a/appstore/dify/data.yml +++ /dev/null @@ -1,14 +0,0 @@ -additionalProperties: - key: dify - name: Dify - tags: - - WebSite - - Local - shortDescZh: Dify 是一个开源的 LLM 应用开发平台 - shortDescEn: Dify is an open-source LLM application development platform - type: website - crossVersionUpdate: true - limit: 0 - website: https://dify.ai/ - github: https://github.com/langgenius/dify/ - document: https://docs.dify.ai/ diff --git a/appstore/dify/logo.png b/appstore/dify/logo.png deleted file mode 100644 index 82eaea8a569d693bcb79e0fbe45ab7ce5522213e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 42235 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 C^G4=g8whK>DLm`q& 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 L0yWCj9bf(rj=nqe diff --git a/appstore/mastodon/4.3.6/.env b/appstore/mastodon/4.3.6/.env deleted file mode 100644 index 0b1ed7269..000000000 --- a/appstore/mastodon/4.3.6/.env +++ /dev/null @@ -1,72 +0,0 @@ -# Postgres 服务 (前置检查) [必填] -PANEL_POSTGRES_TYPE=postgresql - -# Redis 服务 (前置检查) [必填] -PANEL_REDIS_TYPE=redis - -# 数据持久化路径 [必填] -MASTODON_ROOT_PATH=/home/mastodon - -# WebUI 端口 [必填] -PANEL_APP_PORT_HTTP=3000 - -# Stream 端口 [必填] -PANEL_APP_PORT_STREAM=4000 - -# 数据库加密密钥 [必填] -ACTIVE_RECORD_ENCRYPTION_DETERMINISTIC_KEY= - -# 数据库加密盐 [必填] -ACTIVE_RECORD_ENCRYPTION_KEY_DERIVATION_SALT= - -# 数据库加密主键 [必填] -ACTIVE_RECORD_ENCRYPTION_PRIMARY_KEY= - -# 密钥 [必填] -SECRET_KEY_BASE= - -# OTP 密钥 [必填] -OTP_SECRET= - -# 数据库 主机地址 [必填] -DB_HOST=127.0.0.1 - -# 数据库 端口 [必填] -DB_PORT=5432 - -# 数据库 名称 [必填] -DB_NAME=mastodon - -# 数据库 用户名 [必填] -DB_USER=mastodon - -# 数据库 密码 [必填] -DB_PASS= - -# Redis 主机 [必填] -REDIS_HOST=127.0.0.1 - -# Redis 端口 [必填] -REDIS_PORT=6379 - -# Redis 索引 (0-20) [必填] -REDIS_DB=0 - -# Redis 用户名 -REDIS_USERNAME= - -# Redis 密码 -REDIS_PASSWORD= - -# ES数据库 主机地址 -ES_HOST=127.0.0.1 - -# ES数据库 端口 -ES_PORT=9200 - -# ES数据库 用户名 -ES_USER=elastic - -# ES数据库 密码 -ES_PASS= - diff --git a/appstore/mastodon/4.3.6/data.yml b/appstore/mastodon/4.3.6/data.yml deleted file mode 100644 index dd28335bb..000000000 --- a/appstore/mastodon/4.3.6/data.yml +++ /dev/null @@ -1,194 +0,0 @@ -additionalProperties: - formFields: - - child: - default: "" - envKey: PANEL_POSTGRES_SERVICE - required: true - type: service - default: postgresql - envKey: PANEL_POSTGRES_TYPE - labelZh: Postgres 服务 (前置检查) - labelEn: Postgres Service (Pre-check) - required: true - type: apps - values: - - label: PostgreSQL - value: postgresql - - child: - default: "" - envKey: PANEL_REDIS_SERVICE - required: true - type: service - default: redis - envKey: PANEL_REDIS_TYPE - labelZh: Redis 服务 (前置检查) - labelEn: Redis Service (Pre-check) - required: true - type: apps - values: - - label: Redis - value: redis - - default: "/home/mastodon" - edit: true - envKey: MASTODON_ROOT_PATH - labelZh: 数据持久化路径 - labelEn: Data persistence path - required: true - type: text - - default: 3000 - edit: true - envKey: PANEL_APP_PORT_HTTP - labelZh: WebUI 端口 - labelEn: WebUI port - required: true - rule: paramPort - type: number - - default: 4000 - edit: true - envKey: PANEL_APP_PORT_STREAM - labelZh: Stream 端口 - labelEn: Stream port - required: true - rule: paramPort - type: number - - default: "" - edit: true - envKey: ACTIVE_RECORD_ENCRYPTION_DETERMINISTIC_KEY - labelZh: 数据库加密密钥 - labelEn: Database encryption key - required: true - type: text - - default: "" - edit: true - envKey: ACTIVE_RECORD_ENCRYPTION_KEY_DERIVATION_SALT - labelZh: 数据库加密盐 - labelEn: Database encryption salt - required: true - type: text - - default: "" - edit: true - envKey: ACTIVE_RECORD_ENCRYPTION_PRIMARY_KEY - labelZh: 数据库加密主键 - labelEn: Database encryption primary key - required: true - type: text - - default: "" - edit: true - envKey: SECRET_KEY_BASE - labelZh: 密钥 - labelEn: Secret key - required: true - type: text - - default: "" - edit: true - envKey: OTP_SECRET - labelZh: OTP 密钥 - labelEn: OTP secret - required: true - type: text - - default: "127.0.0.1" - edit: true - envKey: DB_HOST - labelZh: 数据库 主机地址 - labelEn: Database Host - required: true - type: text - - default: 5432 - edit: true - envKey: DB_PORT - labelZh: 数据库 端口 - labelEn: Database Port - required: true - rule: paramPort - type: number - - default: "mastodon" - edit: true - envKey: DB_NAME - labelZh: 数据库 名称 - labelEn: Database Name - required: true - rule: paramCommon - type: text - - default: "mastodon" - edit: true - envKey: DB_USER - labelZh: 数据库 用户名 - labelEn: Database Username - required: true - type: text - - default: "" - edit: true - envKey: DB_PASS - labelZh: 数据库 密码 - labelEn: Database Password - random: true - required: true - rule: paramComplexity - type: password - - default: "127.0.0.1" - edit: true - envKey: REDIS_HOST - labelZh: Redis 主机 - labelEn: Redis Host - required: true - type: text - - default: 6379 - edit: true - envKey: REDIS_PORT - labelZh: Redis 端口 - labelEn: Redis Port - required: true - rule: paramPort - type: number - - default: 0 - edit: true - envKey: REDIS_DB - labelZh: Redis 索引 (0-20) - labelEn: Redis Index (0-20) - required: true - type: number - - default: "" - edit: true - envKey: REDIS_USERNAME - labelZh: Redis 用户名 - labelEn: Redis UserName - required: false - type: text - - default: "" - edit: true - envKey: REDIS_PASSWORD - labelZh: Redis 密码 - labelEn: Redis Password - required: false - type: password - - default: "127.0.0.1" - edit: true - envKey: ES_HOST - labelZh: ES数据库 主机地址 - labelEn: Database Host - required: false - type: text - - default: 9200 - edit: true - envKey: ES_PORT - labelZh: ES数据库 端口 - labelEn: Database Port - required: false - rule: paramPort - type: number - - default: "elastic" - edit: true - envKey: ES_USER - labelZh: ES数据库 用户名 - labelEn: Database Username - required: false - type: text - - default: "" - edit: true - envKey: ES_PASS - labelZh: ES数据库 密码 - labelEn: Database Password - random: true - required: false - rule: paramComplexity - type: password diff --git a/appstore/mastodon/4.3.6/docker-compose.yml b/appstore/mastodon/4.3.6/docker-compose.yml deleted file mode 100644 index 622c7676a..000000000 --- a/appstore/mastodon/4.3.6/docker-compose.yml +++ /dev/null @@ -1,53 +0,0 @@ -networks: - 1panel-network: - external: true -services: - mastodon: - command: bundle exec puma -C config/puma.rb - container_name: mastodon - env_file: - - ./envs/global.env - - ./envs/mastodon.env - - .env - environment: - - TZ=Asia/Shanghai - image: ghcr.io/mastodon/mastodon:v4.3.6 - labels: - createdBy: Apps - networks: - - 1panel-network - ports: - - ${PANEL_APP_PORT_HTTP}:3000 - restart: always - volumes: - - ${MASTODON_ROOT_PATH}/system:/mastodon/public/system - sidekiq-mastodon: - command: bundle exec sidekiq - container_name: sidekiq-mastodon - env_file: - - ./envs/global.env - - ./envs/mastodon.env - - .env - environment: - - TZ=Asia/Shanghai - image: ghcr.io/mastodon/mastodon:v4.3.6 - networks: - - 1panel-network - restart: always - volumes: - - ${MASTODON_ROOT_PATH}/system:/mastodon/public/system - streaming-mastodon: - command: node ./streaming/index.js - container_name: streaming-mastodon - env_file: - - ./envs/global.env - - ./envs/mastodon.env - - .env - environment: - - TZ=Asia/Shanghai - image: ghcr.io/mastodon/mastodon-streaming:v4.3.6 - networks: - - 1panel-network - ports: - - ${PANEL_APP_PORT_STREAM}:4000 - restart: always diff --git a/appstore/mastodon/4.3.6/envs/default.env b/appstore/mastodon/4.3.6/envs/default.env deleted file mode 100644 index cd05f46e6..000000000 --- a/appstore/mastodon/4.3.6/envs/default.env +++ /dev/null @@ -1,2 +0,0 @@ -# copyright© 2024 XinJiang Ms Studio -ENV_FILE=.env diff --git a/appstore/mastodon/4.3.6/envs/global.env b/appstore/mastodon/4.3.6/envs/global.env deleted file mode 100644 index e10989fe4..000000000 --- a/appstore/mastodon/4.3.6/envs/global.env +++ /dev/null @@ -1,2 +0,0 @@ -# copyright© 2024 XinJiang Ms Studio -TZ=Asia/Shanghai diff --git a/appstore/mastodon/4.3.6/envs/mastodon.env b/appstore/mastodon/4.3.6/envs/mastodon.env deleted file mode 100644 index 12ab2b6dc..000000000 --- a/appstore/mastodon/4.3.6/envs/mastodon.env +++ /dev/null @@ -1,109 +0,0 @@ -# This is a sample configuration file. You can generate your configuration -# with the `bundle exec rails mastodon:setup` interactive setup wizard, but to customize -# your setup even further, you'll need to edit it manually. This sample does -# not demonstrate all available configuration options. Please look at -# https://docs.joinmastodon.org/admin/config/ for the full documentation. - -# Note that this file accepts slightly different syntax depending on whether -# you are using `docker-compose` or not. In particular, if you use -# `docker-compose`, the value of each declared variable will be taken verbatim, -# including surrounding quotes. -# See: https://github.com/mastodon/mastodon/issues/16895 - -# Federation -# ---------- -# This identifies your server and cannot be changed safely later -# ---------- -LOCAL_DOMAIN=example.com - -# Redis -# ----- -REDIS_HOST=localhost -REDIS_PORT=6379 - -# PostgreSQL -# ---------- -DB_HOST=/var/run/postgresql -DB_USER=mastodon -DB_NAME=mastodon_production -DB_PASS= -DB_PORT=5432 - -# Elasticsearch (optional) -# ------------------------ -ES_ENABLED=true -ES_HOST=localhost -ES_PORT=9200 -# Authentication for ES (optional) -ES_USER=elastic -ES_PASS=password - -# Secrets -# ------- -# Make sure to use `bundle exec rails secret` to generate secrets -# ------- -SECRET_KEY_BASE= -OTP_SECRET= - -# Encryption secrets -# ------------------ -# Must be available (and set to same values) for all server processes -# These are private/secret values, do not share outside hosting environment -# Use `bin/rails db:encryption:init` to generate fresh secrets -# Do NOT change these secrets once in use, as this would cause data loss and other issues -# ------------------ -# ACTIVE_RECORD_ENCRYPTION_DETERMINISTIC_KEY= -# ACTIVE_RECORD_ENCRYPTION_KEY_DERIVATION_SALT= -# ACTIVE_RECORD_ENCRYPTION_PRIMARY_KEY= - -# Web Push -# -------- -# Generate with `bundle exec rails mastodon:webpush:generate_vapid_key` -# -------- -VAPID_PRIVATE_KEY= -VAPID_PUBLIC_KEY= - -# Sending mail -# ------------ -SMTP_SERVER= -SMTP_PORT=587 -SMTP_LOGIN= -SMTP_PASSWORD= -SMTP_FROM_ADDRESS=notifications@example.com - -# File storage (optional) -# ----------------------- -S3_ENABLED=true -S3_BUCKET=files.example.com -AWS_ACCESS_KEY_ID= -AWS_SECRET_ACCESS_KEY= -S3_ALIAS_HOST=files.example.com - -# IP and session retention -# ----------------------- -# Make sure to modify the scheduling of ip_cleanup_scheduler in config/sidekiq.yml -# to be less than daily if you lower IP_RETENTION_PERIOD below two days (172800). -# ----------------------- -IP_RETENTION_PERIOD=31556952 -SESSION_RETENTION_PERIOD=31556952 - -# Fetch All Replies Behavior -# -------------------------- -# When a user expands a post (DetailedStatus view), fetch all of its replies -# (default: false) -FETCH_REPLIES_ENABLED=false - -# Period to wait between fetching replies (in minutes) -FETCH_REPLIES_COOLDOWN_MINUTES=15 - -# Period to wait after a post is first created before fetching its replies (in minutes) -FETCH_REPLIES_INITIAL_WAIT_MINUTES=5 - -# Max number of replies to fetch - total, recursively through a whole reply tree -FETCH_REPLIES_MAX_GLOBAL=1000 - -# Max number of replies to fetch - for a single post -FETCH_REPLIES_MAX_SINGLE=500 - -# Max number of replies Collection pages to fetch - total -FETCH_REPLIES_MAX_PAGES=500 diff --git a/appstore/mastodon/4.3.6/scripts/init.sh b/appstore/mastodon/4.3.6/scripts/init.sh deleted file mode 100644 index a1156ba97..000000000 --- a/appstore/mastodon/4.3.6/scripts/init.sh +++ /dev/null @@ -1,21 +0,0 @@ -#!/bin/bash - -if [ -f .env ]; then - source .env - - # setup-1 add default values - CURRENT_DIR=$(pwd) - sed -i '/^ENV_FILE=/d' .env - sed -i '/^GLOBAL_ENV_FILE=/d' .env - echo "ENV_FILE=${CURRENT_DIR}/.env" >> .env - echo "GLOBAL_ENV_FILE=${CURRENT_DIR}/envs/global.env" >> .env - echo "APP_ENV_FILE=${CURRENT_DIR}/envs/mastodon.env" >> .env - - # setup-2 add update permission - chown -R 991:991 "$MASTODON_ROOT_PATH" - - echo "Check Finish." - -else - echo "Error: .env file not found." -fi diff --git a/appstore/mastodon/4.3.6/scripts/uninstall.sh b/appstore/mastodon/4.3.6/scripts/uninstall.sh deleted file mode 100644 index c86c4fbca..000000000 --- a/appstore/mastodon/4.3.6/scripts/uninstall.sh +++ /dev/null @@ -1,10 +0,0 @@ -#!/bin/bash - -if [ -f .env ]; then - source .env - - echo "Check Finish." - -else - echo "Error: .env file not found." -fi diff --git a/appstore/mastodon/4.3.6/scripts/upgrade.sh b/appstore/mastodon/4.3.6/scripts/upgrade.sh deleted file mode 100644 index a1156ba97..000000000 --- a/appstore/mastodon/4.3.6/scripts/upgrade.sh +++ /dev/null @@ -1,21 +0,0 @@ -#!/bin/bash - -if [ -f .env ]; then - source .env - - # setup-1 add default values - CURRENT_DIR=$(pwd) - sed -i '/^ENV_FILE=/d' .env - sed -i '/^GLOBAL_ENV_FILE=/d' .env - echo "ENV_FILE=${CURRENT_DIR}/.env" >> .env - echo "GLOBAL_ENV_FILE=${CURRENT_DIR}/envs/global.env" >> .env - echo "APP_ENV_FILE=${CURRENT_DIR}/envs/mastodon.env" >> .env - - # setup-2 add update permission - chown -R 991:991 "$MASTODON_ROOT_PATH" - - echo "Check Finish." - -else - echo "Error: .env file not found." -fi diff --git a/appstore/mastodon/README.md b/appstore/mastodon/README.md deleted file mode 100644 index 88fbd12c2..000000000 --- a/appstore/mastodon/README.md +++ /dev/null @@ -1,66 +0,0 @@ -# Mastodon (长毛象) - -自由开源的去中心化的分布式微博客社交网络 - -![Mastodon](https://file.lifebus.top/imgs/mastodon_cover.png) - -![](https://img.shields.io/badge/%E6%96%B0%E7%96%86%E8%90%8C%E6%A3%AE%E8%BD%AF%E4%BB%B6%E5%BC%80%E5%8F%91%E5%B7%A5%E4%BD%9C%E5%AE%A4-%E6%8F%90%E4%BE%9B%E6%8A%80%E6%9C%AF%E6%94%AF%E6%8C%81-blue) - -## 简介 - -Mastodon 是一款基于 ActivityPub 的免费开源社交网络服务器,用户可以关注好友并发现新朋友。在 Mastodon -上,用户可以发布任何他们想要的内容:链接、图片、文本和视频。所有 Mastodon 服务器都可以作为联合网络互操作(一台服务器上的用户可以与另一台服务器上的用户无缝通信,包括实现 -ActivityPub 的非 Mastodon 软件!) - -## 特征 - -### 不受供应商限制 - -可与任何符合要求的平台完全互操作- 不一定是 Mastodon;无论实现 ActivityPub 的是什么,都是社交网络的一部分!了解更多 - -### 实时、按时间顺序排列的时间线更新 - -您关注的人的更新会通过 WebSockets 实时显示在 UI 中。还有流水线视图! - -### 媒体附件,如图片和短视频 - -上传和查看更新中附加的图片和 WebM/MP4 视频。没有音轨的视频将被视为 GIF;普通视频将连续循环播放! - -### 安全和审核工具 - -Mastodon 包括私人帖子、锁定帐户、短语过滤、静音、屏蔽和各种其他功能,以及报告和审核系统。了解更多 - -### OAuth2 和简单的 REST API - -Mastodon 充当 OAuth2 提供商,因此第三方应用可以使用 REST 和 Streaming -API。这带来了一个拥有众多选择的丰富应用生态系统! - -## 安装说明 - -> 项目使用 软件版本 -> -> Redis 4+ -> -> PostgreSQL 12+ - -### 密钥 - -您必须提供唯一的加密密钥:`ACTIVE_RECORD_ENCRYPTION_PRIMARY_KEY` `ACTIVE_RECORD_ENCRYPTION_DETERMINISTIC_KEY` `ACTIVE_RECORD_ENCRYPTION_KEY_DERIVATION_SALT` - -您可以通过命令:`bin/rails db:encryption:init` 生成。 - -您也可以使用终端的 `openssl` 命令生成: - -```bash -echo "ACTIVE_RECORD_ENCRYPTION_PRIMARY_KEY=$(openssl rand -hex 32)" -echo "ACTIVE_RECORD_ENCRYPTION_DETERMINISTIC_KEY=$(openssl rand -hex 32)" -echo "ACTIVE_RECORD_ENCRYPTION_KEY_DERIVATION_SALT=$(openssl rand -hex 32)" -``` - -### 其他密钥 - -安装后,进入安装目录,查看 `env/mastodon.env` 文件,里面有其他密钥的配置说明,在您有需要的情况下。 - ---- - -![Ms Studio](https://file.lifebus.top/imgs/ms_blank_001.png) diff --git a/appstore/mastodon/data.yml b/appstore/mastodon/data.yml deleted file mode 100644 index 2900e80b4..000000000 --- a/appstore/mastodon/data.yml +++ /dev/null @@ -1,14 +0,0 @@ -additionalProperties: - key: mastodon - name: Mastodon (长毛象) - tags: - - WebSite - - Local - shortDescZh: 自由开源的去中心化的分布式微博客社交网络 - shortDescEn: Your self-hosted, globally interconnected microblogging community - type: website - crossVersionUpdate: true - limit: 0 - website: https://joinmastodon.org/ - github: https://github.com/mastodon/mastodon/ - document: https://docs.joinmastodon.org/ diff --git a/appstore/mastodon/logo.png b/appstore/mastodon/logo.png deleted file mode 100644 index e80d6c710f240bc628540cae7ecffc6a5c928d07..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 41324 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 diff --git a/dockge/dify/.env b/dockge/dify/.env deleted file mode 100644 index 6e536463a..000000000 --- a/dockge/dify/.env +++ /dev/null @@ -1,30 +0,0 @@ -# 数据持久化路径 [必填] -DIFY_ROOT_PATH=/home/dify - -# WebUI 端口 [必填] -PANEL_APP_PORT_HTTP=8080 - -# WebUI SSL 端口 [必填] -PANEL_APP_PORT_HTTPS=8443 - -# 数据库端口 [必填] -EXPOSE_DB_PORT=5432 - -# 插件调试端口 [必填] -EXPOSE_PLUGIN_DEBUGGING_PORT=5003 - -# Milvus 接口端口 [必填] -MILVUS_STANDALONE_API_PORT=19530 - -# Milvus 服务端口 [必填] -MILVUS_STANDALONE_SERVER_PORT=9091 - -# MyScale 端口 [必填] -MYSCALE_PORT=8123 - -# Elasticsearch 端口 [必填] -ELASTICSEARCH_PORT=9200 - -# Kibana 端口 [必填] -KIBANA_PORT=5601 - diff --git a/dockge/dify/conf/certbot/README.md b/dockge/dify/conf/certbot/README.md deleted file mode 100644 index 21be34b33..000000000 --- a/dockge/dify/conf/certbot/README.md +++ /dev/null @@ -1,76 +0,0 @@ -# Launching new servers with SSL certificates - -## Short description - -docker compose certbot configurations with Backward compatibility (without certbot container). -Use `docker compose --profile certbot up` to use this features. - -## The simplest way for launching new servers with SSL certificates - -1. Get letsencrypt certs - set `.env` values - ```properties - NGINX_SSL_CERT_FILENAME=fullchain.pem - NGINX_SSL_CERT_KEY_FILENAME=privkey.pem - NGINX_ENABLE_CERTBOT_CHALLENGE=true - CERTBOT_DOMAIN=your_domain.com - CERTBOT_EMAIL=example@your_domain.com - ``` - execute command: - ```shell - docker network prune - docker compose --profile certbot up --force-recreate -d - ``` - then after the containers launched: - ```shell - docker compose exec -it certbot /bin/sh /update-cert.sh - ``` -2. Edit `.env` file and `docker compose --profile certbot up` again. - set `.env` value additionally - ```properties - NGINX_HTTPS_ENABLED=true - ``` - execute command: - ```shell - docker compose --profile certbot up -d --no-deps --force-recreate nginx - ``` - Then you can access your serve with HTTPS. - [https://your_domain.com](https://your_domain.com) - -## SSL certificates renewal - -For SSL certificates renewal, execute commands below: - -```shell -docker compose exec -it certbot /bin/sh /update-cert.sh -docker compose exec nginx nginx -s reload -``` - -## Options for certbot - -`CERTBOT_OPTIONS` key might be helpful for testing. i.e., - -```properties -CERTBOT_OPTIONS=--dry-run -``` - -To apply changes to `CERTBOT_OPTIONS`, regenerate the certbot container before updating the certificates. - -```shell -docker compose --profile certbot up -d --no-deps --force-recreate certbot -docker compose exec -it certbot /bin/sh /update-cert.sh -``` - -Then, reload the nginx container if necessary. - -```shell -docker compose exec nginx nginx -s reload -``` - -## For legacy servers - -To use cert files dir `nginx/ssl` as before, simply launch containers WITHOUT `--profile certbot` option. - -```shell -docker compose up -d -``` diff --git a/dockge/dify/conf/certbot/docker-entrypoint.sh b/dockge/dify/conf/certbot/docker-entrypoint.sh deleted file mode 100644 index a70ecd825..000000000 --- a/dockge/dify/conf/certbot/docker-entrypoint.sh +++ /dev/null @@ -1,30 +0,0 @@ -#!/bin/sh -set -e - -printf '%s\n' "Docker entrypoint script is running" - -printf '%s\n' "\nChecking specific environment variables:" -printf '%s\n' "CERTBOT_EMAIL: ${CERTBOT_EMAIL:-Not set}" -printf '%s\n' "CERTBOT_DOMAIN: ${CERTBOT_DOMAIN:-Not set}" -printf '%s\n' "CERTBOT_OPTIONS: ${CERTBOT_OPTIONS:-Not set}" - -printf '%s\n' "\nChecking mounted directories:" -for dir in "/etc/letsencrypt" "/var/www/html" "/var/log/letsencrypt"; do - if [ -d "$dir" ]; then - printf '%s\n' "$dir exists. Contents:" - ls -la "$dir" - else - printf '%s\n' "$dir does not exist." - fi -done - -printf '%s\n' "\nGenerating update-cert.sh from template" -sed -e "s|\${CERTBOT_EMAIL}|$CERTBOT_EMAIL|g" \ - -e "s|\${CERTBOT_DOMAIN}|$CERTBOT_DOMAIN|g" \ - -e "s|\${CERTBOT_OPTIONS}|$CERTBOT_OPTIONS|g" \ - /update-cert.template.txt > /update-cert.sh - -chmod +x /update-cert.sh - -printf '%s\n' "\nExecuting command:" "$@" -exec "$@" diff --git a/dockge/dify/conf/certbot/update-cert.template.txt b/dockge/dify/conf/certbot/update-cert.template.txt deleted file mode 100644 index 16786a192..000000000 --- a/dockge/dify/conf/certbot/update-cert.template.txt +++ /dev/null @@ -1,19 +0,0 @@ -#!/bin/bash -set -e - -DOMAIN="${CERTBOT_DOMAIN}" -EMAIL="${CERTBOT_EMAIL}" -OPTIONS="${CERTBOT_OPTIONS}" -CERT_NAME="${DOMAIN}" # 証明書名をドメイン名と同じにする - -# Check if the certificate already exists -if [ -f "/etc/letsencrypt/renewal/${CERT_NAME}.conf" ]; then - echo "Certificate exists. Attempting to renew..." - certbot renew --noninteractive --cert-name ${CERT_NAME} --webroot --webroot-path=/var/www/html --email ${EMAIL} --agree-tos --no-eff-email ${OPTIONS} -else - echo "Certificate does not exist. Obtaining a new certificate..." - certbot certonly --noninteractive --webroot --webroot-path=/var/www/html --email ${EMAIL} --agree-tos --no-eff-email -d ${DOMAIN} ${OPTIONS} -fi -echo "Certificate operation successful" -# Note: Nginx reload should be handled outside this container -echo "Please ensure to reload Nginx to apply any certificate changes." diff --git a/dockge/dify/conf/couchbase-server/Dockerfile b/dockge/dify/conf/couchbase-server/Dockerfile deleted file mode 100644 index bd8af6415..000000000 --- a/dockge/dify/conf/couchbase-server/Dockerfile +++ /dev/null @@ -1,4 +0,0 @@ -FROM couchbase/server:latest AS stage_base -# FROM couchbase:latest AS stage_base -COPY init-cbserver.sh /opt/couchbase/init/ -RUN chmod +x /opt/couchbase/init/init-cbserver.sh \ No newline at end of file diff --git a/dockge/dify/conf/couchbase-server/init-cbserver.sh b/dockge/dify/conf/couchbase-server/init-cbserver.sh deleted file mode 100644 index e66bc1853..000000000 --- a/dockge/dify/conf/couchbase-server/init-cbserver.sh +++ /dev/null @@ -1,44 +0,0 @@ -#!/bin/bash -# used to start couchbase server - can't get around this as docker compose only allows you to start one command - so we have to start couchbase like the standard couchbase Dockerfile would -# https://github.com/couchbase/docker/blob/master/enterprise/couchbase-server/7.2.0/Dockerfile#L88 - -/entrypoint.sh couchbase-server & - -# track if setup is complete so we don't try to setup again -FILE=/opt/couchbase/init/setupComplete.txt - -if ! [ -f "$FILE" ]; then - # used to automatically create the cluster based on environment variables - # https://docs.couchbase.com/server/current/cli/cbcli/couchbase-cli-cluster-init.html - - echo $COUCHBASE_ADMINISTRATOR_USERNAME ":" $COUCHBASE_ADMINISTRATOR_PASSWORD - - sleep 20s - /opt/couchbase/bin/couchbase-cli cluster-init -c 127.0.0.1 \ - --cluster-username $COUCHBASE_ADMINISTRATOR_USERNAME \ - --cluster-password $COUCHBASE_ADMINISTRATOR_PASSWORD \ - --services data,index,query,fts \ - --cluster-ramsize $COUCHBASE_RAM_SIZE \ - --cluster-index-ramsize $COUCHBASE_INDEX_RAM_SIZE \ - --cluster-eventing-ramsize $COUCHBASE_EVENTING_RAM_SIZE \ - --cluster-fts-ramsize $COUCHBASE_FTS_RAM_SIZE \ - --index-storage-setting default - - sleep 2s - - # used to auto create the bucket based on environment variables - # https://docs.couchbase.com/server/current/cli/cbcli/couchbase-cli-bucket-create.html - - /opt/couchbase/bin/couchbase-cli bucket-create -c localhost:8091 \ - --username $COUCHBASE_ADMINISTRATOR_USERNAME \ - --password $COUCHBASE_ADMINISTRATOR_PASSWORD \ - --bucket $COUCHBASE_BUCKET \ - --bucket-ramsize $COUCHBASE_BUCKET_RAMSIZE \ - --bucket-type couchbase - - # create file so we know that the cluster is setup and don't run the setup again - touch $FILE -fi - # docker compose will stop the container from running unless we do this - # known issue and workaround - tail -f /dev/null diff --git a/dockge/dify/conf/elasticsearch/docker-entrypoint.sh b/dockge/dify/conf/elasticsearch/docker-entrypoint.sh deleted file mode 100644 index 6669aec5a..000000000 --- a/dockge/dify/conf/elasticsearch/docker-entrypoint.sh +++ /dev/null @@ -1,25 +0,0 @@ -#!/bin/bash - -set -e - -if [ "${VECTOR_STORE}" = "elasticsearch-ja" ]; then - # Check if the ICU tokenizer plugin is installed - if ! /usr/share/elasticsearch/bin/elasticsearch-plugin list | grep -q analysis-icu; then - printf '%s\n' "Installing the ICU tokenizer plugin" - if ! /usr/share/elasticsearch/bin/elasticsearch-plugin install analysis-icu; then - printf '%s\n' "Failed to install the ICU tokenizer plugin" - exit 1 - fi - fi - # Check if the Japanese language analyzer plugin is installed - if ! /usr/share/elasticsearch/bin/elasticsearch-plugin list | grep -q analysis-kuromoji; then - printf '%s\n' "Installing the Japanese language analyzer plugin" - if ! /usr/share/elasticsearch/bin/elasticsearch-plugin install analysis-kuromoji; then - printf '%s\n' "Failed to install the Japanese language analyzer plugin" - exit 1 - fi - fi -fi - -# Run the original entrypoint script -exec /bin/tini -- /usr/local/bin/docker-entrypoint.sh diff --git a/dockge/dify/conf/nginx/conf.d/default.conf.template b/dockge/dify/conf/nginx/conf.d/default.conf.template deleted file mode 100644 index a458412d1..000000000 --- a/dockge/dify/conf/nginx/conf.d/default.conf.template +++ /dev/null @@ -1,48 +0,0 @@ -# Please do not directly edit this file. Instead, modify the .env variables related to NGINX configuration. - -server { - listen ${NGINX_PORT}; - server_name ${NGINX_SERVER_NAME}; - - location /console/api { - proxy_pass http://api:5001; - include proxy.conf; - } - - location /api { - proxy_pass http://api:5001; - include proxy.conf; - } - - location /v1 { - proxy_pass http://api:5001; - include proxy.conf; - } - - location /files { - proxy_pass http://api:5001; - include proxy.conf; - } - - location /explore { - proxy_pass http://web:3000; - include proxy.conf; - } - - location /e/ { - proxy_pass http://plugin_daemon:5002; - proxy_set_header Dify-Hook-Url $scheme://$host$request_uri; - include proxy.conf; - } - - location / { - proxy_pass http://web:3000; - include proxy.conf; - } - - # placeholder for acme challenge location - ${ACME_CHALLENGE_LOCATION} - - # placeholder for https config defined in https.conf.template - ${HTTPS_CONFIG} -} diff --git a/dockge/dify/conf/nginx/docker-entrypoint.sh b/dockge/dify/conf/nginx/docker-entrypoint.sh deleted file mode 100644 index d343cb3ef..000000000 --- a/dockge/dify/conf/nginx/docker-entrypoint.sh +++ /dev/null @@ -1,39 +0,0 @@ -#!/bin/bash - -if [ "${NGINX_HTTPS_ENABLED}" = "true" ]; then - # Check if the certificate and key files for the specified domain exist - if [ -n "${CERTBOT_DOMAIN}" ] && \ - [ -f "/etc/letsencrypt/live/${CERTBOT_DOMAIN}/${NGINX_SSL_CERT_FILENAME}" ] && \ - [ -f "/etc/letsencrypt/live/${CERTBOT_DOMAIN}/${NGINX_SSL_CERT_KEY_FILENAME}" ]; then - SSL_CERTIFICATE_PATH="/etc/letsencrypt/live/${CERTBOT_DOMAIN}/${NGINX_SSL_CERT_FILENAME}" - SSL_CERTIFICATE_KEY_PATH="/etc/letsencrypt/live/${CERTBOT_DOMAIN}/${NGINX_SSL_CERT_KEY_FILENAME}" - else - SSL_CERTIFICATE_PATH="/etc/ssl/${NGINX_SSL_CERT_FILENAME}" - SSL_CERTIFICATE_KEY_PATH="/etc/ssl/${NGINX_SSL_CERT_KEY_FILENAME}" - fi - export SSL_CERTIFICATE_PATH - export SSL_CERTIFICATE_KEY_PATH - - # set the HTTPS_CONFIG environment variable to the content of the https.conf.template - HTTPS_CONFIG=$(envsubst < /etc/nginx/https.conf.template) - export HTTPS_CONFIG - # Substitute the HTTPS_CONFIG in the default.conf.template with content from https.conf.template - envsubst '${HTTPS_CONFIG}' < /etc/nginx/conf.d/default.conf.template > /etc/nginx/conf.d/default.conf -fi - -if [ "${NGINX_ENABLE_CERTBOT_CHALLENGE}" = "true" ]; then - ACME_CHALLENGE_LOCATION='location /.well-known/acme-challenge/ { root /var/www/html; }' -else - ACME_CHALLENGE_LOCATION='' -fi -export ACME_CHALLENGE_LOCATION - -env_vars=$(printenv | cut -d= -f1 | sed 's/^/$/g' | paste -sd, -) - -envsubst "$env_vars" < /etc/nginx/nginx.conf.template > /etc/nginx/nginx.conf -envsubst "$env_vars" < /etc/nginx/proxy.conf.template > /etc/nginx/proxy.conf - -envsubst < /etc/nginx/conf.d/default.conf.template > /etc/nginx/conf.d/default.conf - -# Start Nginx using the default entrypoint -exec nginx -g 'daemon off;' \ No newline at end of file diff --git a/dockge/dify/conf/nginx/https.conf.template b/dockge/dify/conf/nginx/https.conf.template deleted file mode 100644 index 95ea36f46..000000000 --- a/dockge/dify/conf/nginx/https.conf.template +++ /dev/null @@ -1,9 +0,0 @@ -# Please do not directly edit this file. Instead, modify the .env variables related to NGINX configuration. - -listen ${NGINX_SSL_PORT} ssl; -ssl_certificate ${SSL_CERTIFICATE_PATH}; -ssl_certificate_key ${SSL_CERTIFICATE_KEY_PATH}; -ssl_protocols ${NGINX_SSL_PROTOCOLS}; -ssl_prefer_server_ciphers on; -ssl_session_cache shared:SSL:10m; -ssl_session_timeout 10m; \ No newline at end of file diff --git a/dockge/dify/conf/nginx/nginx.conf.template b/dockge/dify/conf/nginx/nginx.conf.template deleted file mode 100644 index 32a571653..000000000 --- a/dockge/dify/conf/nginx/nginx.conf.template +++ /dev/null @@ -1,34 +0,0 @@ -# Please do not directly edit this file. Instead, modify the .env variables related to NGINX configuration. - -user nginx; -worker_processes ${NGINX_WORKER_PROCESSES}; - -error_log /var/log/nginx/error.log notice; -pid /var/run/nginx.pid; - - -events { - worker_connections 1024; -} - - -http { - include /etc/nginx/mime.types; - default_type application/octet-stream; - - log_format main '$remote_addr - $remote_user [$time_local] "$request" ' - '$status $body_bytes_sent "$http_referer" ' - '"$http_user_agent" "$http_x_forwarded_for"'; - - access_log /var/log/nginx/access.log main; - - sendfile on; - #tcp_nopush on; - - keepalive_timeout ${NGINX_KEEPALIVE_TIMEOUT}; - - #gzip on; - client_max_body_size ${NGINX_CLIENT_MAX_BODY_SIZE}; - - include /etc/nginx/conf.d/*.conf; -} \ No newline at end of file diff --git a/dockge/dify/conf/nginx/proxy.conf.template b/dockge/dify/conf/nginx/proxy.conf.template deleted file mode 100644 index 117f80614..000000000 --- a/dockge/dify/conf/nginx/proxy.conf.template +++ /dev/null @@ -1,11 +0,0 @@ -# Please do not directly edit this file. Instead, modify the .env variables related to NGINX configuration. - -proxy_set_header Host $host; -proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; -proxy_set_header X-Forwarded-Proto $scheme; -proxy_set_header X-Forwarded-Port $server_port; -proxy_http_version 1.1; -proxy_set_header Connection ""; -proxy_buffering off; -proxy_read_timeout ${NGINX_PROXY_READ_TIMEOUT}; -proxy_send_timeout ${NGINX_PROXY_SEND_TIMEOUT}; diff --git a/dockge/dify/conf/nginx/ssl/.gitkeep b/dockge/dify/conf/nginx/ssl/.gitkeep deleted file mode 100644 index e69de29bb..000000000 diff --git a/dockge/dify/conf/ssrf_proxy/docker-entrypoint.sh b/dockge/dify/conf/ssrf_proxy/docker-entrypoint.sh deleted file mode 100644 index 613897bb7..000000000 --- a/dockge/dify/conf/ssrf_proxy/docker-entrypoint.sh +++ /dev/null @@ -1,42 +0,0 @@ -#!/bin/bash - -# Modified based on Squid OCI image entrypoint - -# This entrypoint aims to forward the squid logs to stdout to assist users of -# common container related tooling (e.g., kubernetes, docker-compose, etc) to -# access the service logs. - -# Moreover, it invokes the squid binary, leaving all the desired parameters to -# be provided by the "command" passed to the spawned container. If no command -# is provided by the user, the default behavior (as per the CMD statement in -# the Dockerfile) will be to use Ubuntu's default configuration [1] and run -# squid with the "-NYC" options to mimic the behavior of the Ubuntu provided -# systemd unit. - -# [1] The default configuration is changed in the Dockerfile to allow local -# network connections. See the Dockerfile for further information. - -echo "[ENTRYPOINT] re-create snakeoil self-signed certificate removed in the build process" -if [ ! -f /etc/ssl/private/ssl-cert-snakeoil.key ]; then - /usr/sbin/make-ssl-cert generate-default-snakeoil --force-overwrite > /dev/null 2>&1 -fi - -tail -F /var/log/squid/access.log 2>/dev/null & -tail -F /var/log/squid/error.log 2>/dev/null & -tail -F /var/log/squid/store.log 2>/dev/null & -tail -F /var/log/squid/cache.log 2>/dev/null & - -# Replace environment variables in the template and output to the squid.conf -echo "[ENTRYPOINT] replacing environment variables in the template" -awk '{ - while(match($0, /\${[A-Za-z_][A-Za-z_0-9]*}/)) { - var = substr($0, RSTART+2, RLENGTH-3) - val = ENVIRON[var] - $0 = substr($0, 1, RSTART-1) val substr($0, RSTART+RLENGTH) - } - print -}' /etc/squid/squid.conf.template > /etc/squid/squid.conf - -/usr/sbin/squid -Nz -echo "[ENTRYPOINT] starting squid" -/usr/sbin/squid -f /etc/squid/squid.conf -NYC 1 diff --git a/dockge/dify/conf/ssrf_proxy/squid.conf.template b/dockge/dify/conf/ssrf_proxy/squid.conf.template deleted file mode 100644 index 676fe7379..000000000 --- a/dockge/dify/conf/ssrf_proxy/squid.conf.template +++ /dev/null @@ -1,51 +0,0 @@ -acl localnet src 0.0.0.1-0.255.255.255 # RFC 1122 "this" network (LAN) -acl localnet src 10.0.0.0/8 # RFC 1918 local private network (LAN) -acl localnet src 100.64.0.0/10 # RFC 6598 shared address space (CGN) -acl localnet src 169.254.0.0/16 # RFC 3927 link-local (directly plugged) machines -acl localnet src 172.16.0.0/12 # RFC 1918 local private network (LAN) -acl localnet src 192.168.0.0/16 # RFC 1918 local private network (LAN) -acl localnet src fc00::/7 # RFC 4193 local private network range -acl localnet src fe80::/10 # RFC 4291 link-local (directly plugged) machines -acl SSL_ports port 443 -# acl SSL_ports port 1025-65535 # Enable the configuration to resolve this issue: https://github.com/langgenius/dify/issues/12792 -acl Safe_ports port 80 # http -acl Safe_ports port 21 # ftp -acl Safe_ports port 443 # https -acl Safe_ports port 70 # gopher -acl Safe_ports port 210 # wais -acl Safe_ports port 1025-65535 # unregistered ports -acl Safe_ports port 280 # http-mgmt -acl Safe_ports port 488 # gss-http -acl Safe_ports port 591 # filemaker -acl Safe_ports port 777 # multiling http -acl CONNECT method CONNECT -http_access deny !Safe_ports -http_access deny CONNECT !SSL_ports -http_access allow localhost manager -http_access deny manager -http_access allow localhost -include /etc/squid/conf.d/*.conf -http_access deny all - -################################## Proxy Server ################################ -http_port ${HTTP_PORT} -coredump_dir ${COREDUMP_DIR} -refresh_pattern ^ftp: 1440 20% 10080 -refresh_pattern ^gopher: 1440 0% 1440 -refresh_pattern -i (/cgi-bin/|\?) 0 0% 0 -refresh_pattern \/(Packages|Sources)(|\.bz2|\.gz|\.xz)$ 0 0% 0 refresh-ims -refresh_pattern \/Release(|\.gpg)$ 0 0% 0 refresh-ims -refresh_pattern \/InRelease$ 0 0% 0 refresh-ims -refresh_pattern \/(Translation-.*)(|\.bz2|\.gz|\.xz)$ 0 0% 0 refresh-ims -refresh_pattern . 0 20% 4320 - - -# cache_dir ufs /var/spool/squid 100 16 256 -# upstream proxy, set to your own upstream proxy IP to avoid SSRF attacks -# cache_peer 172.1.1.1 parent 3128 0 no-query no-digest no-netdb-exchange default - -################################## Reverse Proxy To Sandbox ################################ -http_port ${REVERSE_PROXY_PORT} accel vhost -cache_peer ${SANDBOX_HOST} parent ${SANDBOX_PORT} 0 no-query originserver -acl src_all src all -http_access allow src_all diff --git a/dockge/dify/conf/startupscripts/init.sh b/dockge/dify/conf/startupscripts/init.sh deleted file mode 100644 index c6e6e1966..000000000 --- a/dockge/dify/conf/startupscripts/init.sh +++ /dev/null @@ -1,13 +0,0 @@ -#!/usr/bin/env bash - -DB_INITIALIZED="/opt/oracle/oradata/dbinit" -#[ -f ${DB_INITIALIZED} ] && exit -#touch ${DB_INITIALIZED} -if [ -f ${DB_INITIALIZED} ]; then - echo 'File exists. Standards for have been Init' - exit -else - echo 'File does not exist. Standards for first time Start up this DB' - "$ORACLE_HOME"/bin/sqlplus -s "/ as sysdba" @"/opt/oracle/scripts/startup/init_user.script"; - touch ${DB_INITIALIZED} -fi diff --git a/dockge/dify/conf/startupscripts/init_user.script b/dockge/dify/conf/startupscripts/init_user.script deleted file mode 100644 index 7aa7c2804..000000000 --- a/dockge/dify/conf/startupscripts/init_user.script +++ /dev/null @@ -1,10 +0,0 @@ -show pdbs; -ALTER SYSTEM SET PROCESSES=500 SCOPE=SPFILE; -alter session set container= freepdb1; -create user dify identified by dify DEFAULT TABLESPACE users quota unlimited on users; -grant DB_DEVELOPER_ROLE to dify; - -BEGIN -CTX_DDL.CREATE_PREFERENCE('my_chinese_vgram_lexer','CHINESE_VGRAM_LEXER'); -END; -/ diff --git a/dockge/dify/conf/tidb/config/pd.toml b/dockge/dify/conf/tidb/config/pd.toml deleted file mode 100644 index 042b251e4..000000000 --- a/dockge/dify/conf/tidb/config/pd.toml +++ /dev/null @@ -1,4 +0,0 @@ -# PD Configuration File reference: -# https://docs.pingcap.com/tidb/stable/pd-configuration-file#pd-configuration-file -[replication] -max-replicas = 1 \ No newline at end of file diff --git a/dockge/dify/conf/tidb/config/tiflash-learner.toml b/dockge/dify/conf/tidb/config/tiflash-learner.toml deleted file mode 100644 index 5098829aa..000000000 --- a/dockge/dify/conf/tidb/config/tiflash-learner.toml +++ /dev/null @@ -1,13 +0,0 @@ -# TiFlash tiflash-learner.toml Configuration File reference: -# https://docs.pingcap.com/tidb/stable/tiflash-configuration#configure-the-tiflash-learnertoml-file - -log-file = "/logs/tiflash_tikv.log" - -[server] -engine-addr = "tiflash:4030" -addr = "0.0.0.0:20280" -advertise-addr = "tiflash:20280" -status-addr = "tiflash:20292" - -[storage] -data-dir = "/data/flash" diff --git a/dockge/dify/conf/tidb/config/tiflash.toml b/dockge/dify/conf/tidb/config/tiflash.toml deleted file mode 100644 index 30ac13efc..000000000 --- a/dockge/dify/conf/tidb/config/tiflash.toml +++ /dev/null @@ -1,19 +0,0 @@ -# TiFlash tiflash.toml Configuration File reference: -# https://docs.pingcap.com/tidb/stable/tiflash-configuration#configure-the-tiflashtoml-file - -listen_host = "0.0.0.0" -path = "/data" - -[flash] -tidb_status_addr = "tidb:10080" -service_addr = "tiflash:4030" - -[flash.proxy] -config = "/tiflash-learner.toml" - -[logger] -errorlog = "/logs/tiflash_error.log" -log = "/logs/tiflash.log" - -[raft] -pd_addr = "pd0:2379" diff --git a/dockge/dify/conf/tidb/docker-compose.yaml b/dockge/dify/conf/tidb/docker-compose.yaml deleted file mode 100644 index fa1577017..000000000 --- a/dockge/dify/conf/tidb/docker-compose.yaml +++ /dev/null @@ -1,62 +0,0 @@ -services: - pd0: - image: pingcap/pd:v8.5.1 - # ports: - # - "2379" - volumes: - - ./config/pd.toml:/pd.toml:ro - - ./volumes/data:/data - - ./volumes/logs:/logs - command: - - --name=pd0 - - --client-urls=http://0.0.0.0:2379 - - --peer-urls=http://0.0.0.0:2380 - - --advertise-client-urls=http://pd0:2379 - - --advertise-peer-urls=http://pd0:2380 - - --initial-cluster=pd0=http://pd0:2380 - - --data-dir=/data/pd - - --config=/pd.toml - - --log-file=/logs/pd.log - restart: on-failure - tikv: - image: pingcap/tikv:v8.5.1 - volumes: - - ./volumes/data:/data - - ./volumes/logs:/logs - command: - - --addr=0.0.0.0:20160 - - --advertise-addr=tikv:20160 - - --status-addr=tikv:20180 - - --data-dir=/data/tikv - - --pd=pd0:2379 - - --log-file=/logs/tikv.log - depends_on: - - "pd0" - restart: on-failure - tidb: - image: pingcap/tidb:v8.5.1 - # ports: - # - "4000:4000" - volumes: - - ./volumes/logs:/logs - command: - - --advertise-address=tidb - - --store=tikv - - --path=pd0:2379 - - --log-file=/logs/tidb.log - depends_on: - - "tikv" - restart: on-failure - tiflash: - image: pingcap/tiflash:v8.5.1 - volumes: - - ./config/tiflash.toml:/tiflash.toml:ro - - ./config/tiflash-learner.toml:/tiflash-learner.toml:ro - - ./volumes/data:/data - - ./volumes/logs:/logs - command: - - --config=/tiflash.toml - depends_on: - - "tikv" - - "tidb" - restart: on-failure diff --git a/dockge/dify/conf/volumes/myscale/config/users.d/custom_users_config.xml b/dockge/dify/conf/volumes/myscale/config/users.d/custom_users_config.xml deleted file mode 100644 index 67f24b69e..000000000 --- a/dockge/dify/conf/volumes/myscale/config/users.d/custom_users_config.xml +++ /dev/null @@ -1,17 +0,0 @@ - - - - - - ::1 - 127.0.0.1 - 10.0.0.0/8 - 172.16.0.0/12 - 192.168.0.0/16 - - default - default - 1 - - - \ No newline at end of file diff --git a/dockge/dify/conf/volumes/oceanbase/init.d/vec_memory.sql b/dockge/dify/conf/volumes/oceanbase/init.d/vec_memory.sql deleted file mode 100644 index f4c283fdf..000000000 --- a/dockge/dify/conf/volumes/oceanbase/init.d/vec_memory.sql +++ /dev/null @@ -1 +0,0 @@ -ALTER SYSTEM SET ob_vector_memory_limit_percentage = 30; \ No newline at end of file diff --git a/dockge/dify/conf/volumes/opensearch/opensearch_dashboards.yml b/dockge/dify/conf/volumes/opensearch/opensearch_dashboards.yml deleted file mode 100644 index f50d63bbb..000000000 --- a/dockge/dify/conf/volumes/opensearch/opensearch_dashboards.yml +++ /dev/null @@ -1,222 +0,0 @@ ---- -# Copyright OpenSearch Contributors -# SPDX-License-Identifier: Apache-2.0 - -# Description: -# Default configuration for OpenSearch Dashboards - -# OpenSearch Dashboards is served by a back end server. This setting specifies the port to use. -# server.port: 5601 - -# Specifies the address to which the OpenSearch Dashboards server will bind. IP addresses and host names are both valid values. -# The default is 'localhost', which usually means remote machines will not be able to connect. -# To allow connections from remote users, set this parameter to a non-loopback address. -# server.host: "localhost" - -# Enables you to specify a path to mount OpenSearch Dashboards at if you are running behind a proxy. -# Use the `server.rewriteBasePath` setting to tell OpenSearch Dashboards if it should remove the basePath -# from requests it receives, and to prevent a deprecation warning at startup. -# This setting cannot end in a slash. -# server.basePath: "" - -# Specifies whether OpenSearch Dashboards should rewrite requests that are prefixed with -# `server.basePath` or require that they are rewritten by your reverse proxy. -# server.rewriteBasePath: false - -# The maximum payload size in bytes for incoming server requests. -# server.maxPayloadBytes: 1048576 - -# The OpenSearch Dashboards server's name. This is used for display purposes. -# server.name: "your-hostname" - -# The URLs of the OpenSearch instances to use for all your queries. -# opensearch.hosts: ["http://localhost:9200"] - -# OpenSearch Dashboards uses an index in OpenSearch to store saved searches, visualizations and -# dashboards. OpenSearch Dashboards creates a new index if the index doesn't already exist. -# opensearchDashboards.index: ".opensearch_dashboards" - -# The default application to load. -# opensearchDashboards.defaultAppId: "home" - -# Setting for an optimized healthcheck that only uses the local OpenSearch node to do Dashboards healthcheck. -# This settings should be used for large clusters or for clusters with ingest heavy nodes. -# It allows Dashboards to only healthcheck using the local OpenSearch node rather than fan out requests across all nodes. -# -# It requires the user to create an OpenSearch node attribute with the same name as the value used in the setting -# This node attribute should assign all nodes of the same cluster an integer value that increments with each new cluster that is spun up -# e.g. in opensearch.yml file you would set the value to a setting using node.attr.cluster_id: -# Should only be enabled if there is a corresponding node attribute created in your OpenSearch config that matches the value here -# opensearch.optimizedHealthcheckId: "cluster_id" - -# If your OpenSearch is protected with basic authentication, these settings provide -# the username and password that the OpenSearch Dashboards server uses to perform maintenance on the OpenSearch Dashboards -# index at startup. Your OpenSearch Dashboards users still need to authenticate with OpenSearch, which -# is proxied through the OpenSearch Dashboards server. -# opensearch.username: "opensearch_dashboards_system" -# opensearch.password: "pass" - -# Enables SSL and paths to the PEM-format SSL certificate and SSL key files, respectively. -# These settings enable SSL for outgoing requests from the OpenSearch Dashboards server to the browser. -# server.ssl.enabled: false -# server.ssl.certificate: /path/to/your/server.crt -# server.ssl.key: /path/to/your/server.key - -# Optional settings that provide the paths to the PEM-format SSL certificate and key files. -# These files are used to verify the identity of OpenSearch Dashboards to OpenSearch and are required when -# xpack.security.http.ssl.client_authentication in OpenSearch is set to required. -# opensearch.ssl.certificate: /path/to/your/client.crt -# opensearch.ssl.key: /path/to/your/client.key - -# Optional setting that enables you to specify a path to the PEM file for the certificate -# authority for your OpenSearch instance. -# opensearch.ssl.certificateAuthorities: [ "/path/to/your/CA.pem" ] - -# To disregard the validity of SSL certificates, change this setting's value to 'none'. -# opensearch.ssl.verificationMode: full - -# Time in milliseconds to wait for OpenSearch to respond to pings. Defaults to the value of -# the opensearch.requestTimeout setting. -# opensearch.pingTimeout: 1500 - -# Time in milliseconds to wait for responses from the back end or OpenSearch. This value -# must be a positive integer. -# opensearch.requestTimeout: 30000 - -# List of OpenSearch Dashboards client-side headers to send to OpenSearch. To send *no* client-side -# headers, set this value to [] (an empty list). -# opensearch.requestHeadersWhitelist: [ authorization ] - -# Header names and values that are sent to OpenSearch. Any custom headers cannot be overwritten -# by client-side headers, regardless of the opensearch.requestHeadersWhitelist configuration. -# opensearch.customHeaders: {} - -# Time in milliseconds for OpenSearch to wait for responses from shards. Set to 0 to disable. -# opensearch.shardTimeout: 30000 - -# Logs queries sent to OpenSearch. Requires logging.verbose set to true. -# opensearch.logQueries: false - -# Specifies the path where OpenSearch Dashboards creates the process ID file. -# pid.file: /var/run/opensearchDashboards.pid - -# Enables you to specify a file where OpenSearch Dashboards stores log output. -# logging.dest: stdout - -# Set the value of this setting to true to suppress all logging output. -# logging.silent: false - -# Set the value of this setting to true to suppress all logging output other than error messages. -# logging.quiet: false - -# Set the value of this setting to true to log all events, including system usage information -# and all requests. -# logging.verbose: false - -# Set the interval in milliseconds to sample system and process performance -# metrics. Minimum is 100ms. Defaults to 5000. -# ops.interval: 5000 - -# Specifies locale to be used for all localizable strings, dates and number formats. -# Supported languages are the following: English - en , by default , Chinese - zh-CN . -# i18n.locale: "en" - -# Set the allowlist to check input graphite Url. Allowlist is the default check list. -# vis_type_timeline.graphiteAllowedUrls: ['https://www.hostedgraphite.com/UID/ACCESS_KEY/graphite'] - -# Set the blocklist to check input graphite Url. Blocklist is an IP list. -# Below is an example for reference -# vis_type_timeline.graphiteBlockedIPs: [ -# //Loopback -# '127.0.0.0/8', -# '::1/128', -# //Link-local Address for IPv6 -# 'fe80::/10', -# //Private IP address for IPv4 -# '10.0.0.0/8', -# '172.16.0.0/12', -# '192.168.0.0/16', -# //Unique local address (ULA) -# 'fc00::/7', -# //Reserved IP address -# '0.0.0.0/8', -# '100.64.0.0/10', -# '192.0.0.0/24', -# '192.0.2.0/24', -# '198.18.0.0/15', -# '192.88.99.0/24', -# '198.51.100.0/24', -# '203.0.113.0/24', -# '224.0.0.0/4', -# '240.0.0.0/4', -# '255.255.255.255/32', -# '::/128', -# '2001:db8::/32', -# 'ff00::/8', -# ] -# vis_type_timeline.graphiteBlockedIPs: [] - -# opensearchDashboards.branding: -# logo: -# defaultUrl: "" -# darkModeUrl: "" -# mark: -# defaultUrl: "" -# darkModeUrl: "" -# loadingLogo: -# defaultUrl: "" -# darkModeUrl: "" -# faviconUrl: "" -# applicationTitle: "" - -# Set the value of this setting to true to capture region blocked warnings and errors -# for your map rendering services. -# map.showRegionBlockedWarning: false% - -# Set the value of this setting to false to suppress search usage telemetry -# for reducing the load of OpenSearch cluster. -# data.search.usageTelemetry.enabled: false - -# 2.4 renames 'wizard.enabled: false' to 'vis_builder.enabled: false' -# Set the value of this setting to false to disable VisBuilder -# functionality in Visualization. -# vis_builder.enabled: false - -# 2.4 New Experimental Feature -# Set the value of this setting to true to enable the experimental multiple data source -# support feature. Use with caution. -# data_source.enabled: false -# Set the value of these settings to customize crypto materials to encryption saved credentials -# in data sources. -# data_source.encryption.wrappingKeyName: 'changeme' -# data_source.encryption.wrappingKeyNamespace: 'changeme' -# data_source.encryption.wrappingKey: [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] - -# 2.6 New ML Commons Dashboards Feature -# Set the value of this setting to true to enable the ml commons dashboards -# ml_commons_dashboards.enabled: false - -# 2.12 New experimental Assistant Dashboards Feature -# Set the value of this setting to true to enable the assistant dashboards -# assistant.chat.enabled: false - -# 2.13 New Query Assistant Feature -# Set the value of this setting to false to disable the query assistant -# observability.query_assist.enabled: false - -# 2.14 Enable Ui Metric Collectors in Usage Collector -# Set the value of this setting to true to enable UI Metric collections -# usageCollection.uiMetric.enabled: false - -opensearch.hosts: [https://localhost:9200] -opensearch.ssl.verificationMode: none -opensearch.username: admin -opensearch.password: 'Qazwsxedc!@#123' -opensearch.requestHeadersWhitelist: [authorization, securitytenant] - -opensearch_security.multitenancy.enabled: true -opensearch_security.multitenancy.tenants.preferred: [Private, Global] -opensearch_security.readonly_mode.roles: [kibana_read_only] -# Use this setting if you are running opensearch-dashboards without https -opensearch_security.cookie.secure: false -server.host: '0.0.0.0' diff --git a/dockge/dify/conf/volumes/sandbox/conf/config.yaml b/dockge/dify/conf/volumes/sandbox/conf/config.yaml deleted file mode 100644 index 8c1a1deb5..000000000 --- a/dockge/dify/conf/volumes/sandbox/conf/config.yaml +++ /dev/null @@ -1,14 +0,0 @@ -app: - port: 8194 - debug: True - key: dify-sandbox -max_workers: 4 -max_requests: 50 -worker_timeout: 5 -python_path: /usr/local/bin/python3 -enable_network: True # please make sure there is no network risk in your environment -allowed_syscalls: # please leave it empty if you have no idea how seccomp works -proxy: - socks5: '' - http: '' - https: '' diff --git a/dockge/dify/conf/volumes/sandbox/conf/config.yaml.example b/dockge/dify/conf/volumes/sandbox/conf/config.yaml.example deleted file mode 100644 index f92c19e51..000000000 --- a/dockge/dify/conf/volumes/sandbox/conf/config.yaml.example +++ /dev/null @@ -1,35 +0,0 @@ -app: - port: 8194 - debug: True - key: dify-sandbox -max_workers: 4 -max_requests: 50 -worker_timeout: 5 -python_path: /usr/local/bin/python3 -python_lib_path: - - /usr/local/lib/python3.10 - - /usr/lib/python3.10 - - /usr/lib/python3 - - /usr/lib/x86_64-linux-gnu - - /etc/ssl/certs/ca-certificates.crt - - /etc/nsswitch.conf - - /etc/hosts - - /etc/resolv.conf - - /run/systemd/resolve/stub-resolv.conf - - /run/resolvconf/resolv.conf - - /etc/localtime - - /usr/share/zoneinfo - - /etc/timezone - # add more paths if needed -python_pip_mirror_url: https://pypi.tuna.tsinghua.edu.cn/simple -nodejs_path: /usr/local/bin/node -enable_network: True -allowed_syscalls: - - 1 - - 2 - - 3 - # add all the syscalls which you require -proxy: - socks5: '' - http: '' - https: '' diff --git a/dockge/dify/conf/volumes/sandbox/dependencies/python-requirements.txt b/dockge/dify/conf/volumes/sandbox/dependencies/python-requirements.txt deleted file mode 100644 index e69de29bb..000000000 diff --git a/dockge/dify/docker-compose.yml b/dockge/dify/docker-compose.yml deleted file mode 100644 index 1da92839f..000000000 --- a/dockge/dify/docker-compose.yml +++ /dev/null @@ -1,2192 +0,0 @@ -networks: - milvus: - driver: bridge - opensearch-net: - driver: bridge - internal: true - ssrf_proxy_network: - driver: bridge - internal: true -services: - api: - container_name: api-dify - depends_on: - - db - - redis - environment: - ACCESS_TOKEN_EXPIRE_MINUTES: ${ACCESS_TOKEN_EXPIRE_MINUTES:-60} - ALIYUN_OSS_ACCESS_KEY: ${ALIYUN_OSS_ACCESS_KEY:-your-access-key} - ALIYUN_OSS_AUTH_VERSION: ${ALIYUN_OSS_AUTH_VERSION:-v4} - ALIYUN_OSS_BUCKET_NAME: ${ALIYUN_OSS_BUCKET_NAME:-your-bucket-name} - ALIYUN_OSS_ENDPOINT: ${ALIYUN_OSS_ENDPOINT:-https://oss-ap-southeast-1-internal.aliyuncs.com} - ALIYUN_OSS_PATH: ${ALIYUN_OSS_PATH:-your-path} - ALIYUN_OSS_REGION: ${ALIYUN_OSS_REGION:-ap-southeast-1} - ALIYUN_OSS_SECRET_KEY: ${ALIYUN_OSS_SECRET_KEY:-your-secret-key} - ANALYTICDB_ACCOUNT: ${ANALYTICDB_ACCOUNT:-testaccount} - ANALYTICDB_HOST: ${ANALYTICDB_HOST:-gp-test.aliyuncs.com} - ANALYTICDB_INSTANCE_ID: ${ANALYTICDB_INSTANCE_ID:-gp-ab123456} - ANALYTICDB_KEY_ID: ${ANALYTICDB_KEY_ID:-your-ak} - ANALYTICDB_KEY_SECRET: ${ANALYTICDB_KEY_SECRET:-your-sk} - ANALYTICDB_MAX_CONNECTION: ${ANALYTICDB_MAX_CONNECTION:-5} - ANALYTICDB_MIN_CONNECTION: ${ANALYTICDB_MIN_CONNECTION:-1} - ANALYTICDB_NAMESPACE: ${ANALYTICDB_NAMESPACE:-dify} - ANALYTICDB_NAMESPACE_PASSWORD: ${ANALYTICDB_NAMESPACE_PASSWORD:-difypassword} - ANALYTICDB_PASSWORD: ${ANALYTICDB_PASSWORD:-testpassword} - ANALYTICDB_PORT: ${ANALYTICDB_PORT:-5432} - ANALYTICDB_REGION_ID: ${ANALYTICDB_REGION_ID:-cn-hangzhou} - API_SENTRY_DSN: ${API_SENTRY_DSN:-} - API_SENTRY_PROFILES_SAMPLE_RATE: ${API_SENTRY_PROFILES_SAMPLE_RATE:-1.0} - API_SENTRY_TRACES_SAMPLE_RATE: ${API_SENTRY_TRACES_SAMPLE_RATE:-1.0} - API_TOOL_DEFAULT_CONNECT_TIMEOUT: ${API_TOOL_DEFAULT_CONNECT_TIMEOUT:-10} - API_TOOL_DEFAULT_READ_TIMEOUT: ${API_TOOL_DEFAULT_READ_TIMEOUT:-60} - APP_API_URL: ${APP_API_URL:-} - APP_MAX_ACTIVE_REQUESTS: ${APP_MAX_ACTIVE_REQUESTS:-0} - APP_MAX_EXECUTION_TIME: ${APP_MAX_EXECUTION_TIME:-1200} - APP_WEB_URL: ${APP_WEB_URL:-} - AZURE_BLOB_ACCOUNT_KEY: ${AZURE_BLOB_ACCOUNT_KEY:-difyai} - AZURE_BLOB_ACCOUNT_NAME: ${AZURE_BLOB_ACCOUNT_NAME:-difyai} - AZURE_BLOB_ACCOUNT_URL: ${AZURE_BLOB_ACCOUNT_URL:-https://.blob.core.windows.net} - AZURE_BLOB_CONTAINER_NAME: ${AZURE_BLOB_CONTAINER_NAME:-difyai-container} - BAIDU_OBS_ACCESS_KEY: ${BAIDU_OBS_ACCESS_KEY:-your-access-key} - BAIDU_OBS_BUCKET_NAME: ${BAIDU_OBS_BUCKET_NAME:-your-bucket-name} - BAIDU_OBS_ENDPOINT: ${BAIDU_OBS_ENDPOINT:-your-server-url} - BAIDU_OBS_SECRET_KEY: ${BAIDU_OBS_SECRET_KEY:-your-secret-key} - BAIDU_VECTOR_DB_ACCOUNT: ${BAIDU_VECTOR_DB_ACCOUNT:-root} - BAIDU_VECTOR_DB_API_KEY: ${BAIDU_VECTOR_DB_API_KEY:-dify} - BAIDU_VECTOR_DB_CONNECTION_TIMEOUT_MS: ${BAIDU_VECTOR_DB_CONNECTION_TIMEOUT_MS:-30000} - BAIDU_VECTOR_DB_DATABASE: ${BAIDU_VECTOR_DB_DATABASE:-dify} - BAIDU_VECTOR_DB_ENDPOINT: ${BAIDU_VECTOR_DB_ENDPOINT:-http://127.0.0.1:5287} - BAIDU_VECTOR_DB_REPLICAS: ${BAIDU_VECTOR_DB_REPLICAS:-3} - BAIDU_VECTOR_DB_SHARD: ${BAIDU_VECTOR_DB_SHARD:-1} - BROKER_USE_SSL: ${BROKER_USE_SSL:-false} - CELERY_AUTO_SCALE: ${CELERY_AUTO_SCALE:-false} - CELERY_BROKER_URL: ${CELERY_BROKER_URL:-redis://:difyai123456@redis:6379/1} - CELERY_MAX_WORKERS: ${CELERY_MAX_WORKERS:-} - CELERY_MIN_WORKERS: ${CELERY_MIN_WORKERS:-} - CELERY_SENTINEL_MASTER_NAME: ${CELERY_SENTINEL_MASTER_NAME:-} - CELERY_SENTINEL_SOCKET_TIMEOUT: ${CELERY_SENTINEL_SOCKET_TIMEOUT:-0.1} - CELERY_USE_SENTINEL: ${CELERY_USE_SENTINEL:-false} - CELERY_WORKER_AMOUNT: ${CELERY_WORKER_AMOUNT:-} - CELERY_WORKER_CLASS: ${CELERY_WORKER_CLASS:-} - CERTBOT_DOMAIN: ${CERTBOT_DOMAIN:-your_domain.com} - CERTBOT_EMAIL: ${CERTBOT_EMAIL:-your_email@example.com} - CERTBOT_OPTIONS: ${CERTBOT_OPTIONS:-} - CHECK_UPDATE_URL: ${CHECK_UPDATE_URL:-https://updates.dify.ai} - CHROMA_AUTH_CREDENTIALS: ${CHROMA_AUTH_CREDENTIALS:-} - CHROMA_AUTH_PROVIDER: ${CHROMA_AUTH_PROVIDER:-chromadb.auth.token_authn.TokenAuthClientProvider} - CHROMA_DATABASE: ${CHROMA_DATABASE:-default_database} - CHROMA_HOST: ${CHROMA_HOST:-127.0.0.1} - CHROMA_IS_PERSISTENT: ${CHROMA_IS_PERSISTENT:-TRUE} - CHROMA_PORT: ${CHROMA_PORT:-8000} - CHROMA_SERVER_AUTHN_CREDENTIALS: ${CHROMA_SERVER_AUTHN_CREDENTIALS:-difyai123456} - CHROMA_SERVER_AUTHN_PROVIDER: ${CHROMA_SERVER_AUTHN_PROVIDER:-chromadb.auth.token_authn.TokenAuthenticationServerProvider} - CHROMA_TENANT: ${CHROMA_TENANT:-default_tenant} - CODE_EXECUTION_API_KEY: ${CODE_EXECUTION_API_KEY:-dify-sandbox} - CODE_EXECUTION_CONNECT_TIMEOUT: ${CODE_EXECUTION_CONNECT_TIMEOUT:-10} - CODE_EXECUTION_ENDPOINT: ${CODE_EXECUTION_ENDPOINT:-http://sandbox:8194} - CODE_EXECUTION_READ_TIMEOUT: ${CODE_EXECUTION_READ_TIMEOUT:-60} - CODE_EXECUTION_WRITE_TIMEOUT: ${CODE_EXECUTION_WRITE_TIMEOUT:-10} - CODE_GENERATION_MAX_TOKENS: ${CODE_GENERATION_MAX_TOKENS:-1024} - CODE_MAX_DEPTH: ${CODE_MAX_DEPTH:-5} - CODE_MAX_NUMBER: ${CODE_MAX_NUMBER:-9223372036854775807} - CODE_MAX_NUMBER_ARRAY_LENGTH: ${CODE_MAX_NUMBER_ARRAY_LENGTH:-1000} - CODE_MAX_OBJECT_ARRAY_LENGTH: ${CODE_MAX_OBJECT_ARRAY_LENGTH:-30} - CODE_MAX_PRECISION: ${CODE_MAX_PRECISION:-20} - CODE_MAX_STRING_ARRAY_LENGTH: ${CODE_MAX_STRING_ARRAY_LENGTH:-30} - CODE_MAX_STRING_LENGTH: ${CODE_MAX_STRING_LENGTH:-80000} - CODE_MIN_NUMBER: ${CODE_MIN_NUMBER:--9223372036854775808} - CONSOLE_API_URL: ${CONSOLE_API_URL:-} - CONSOLE_CORS_ALLOW_ORIGINS: ${CONSOLE_CORS_ALLOW_ORIGINS:-*} - CONSOLE_WEB_URL: ${CONSOLE_WEB_URL:-} - COUCHBASE_BUCKET_NAME: ${COUCHBASE_BUCKET_NAME:-Embeddings} - COUCHBASE_CONNECTION_STRING: ${COUCHBASE_CONNECTION_STRING:-couchbase://couchbase-server} - COUCHBASE_PASSWORD: ${COUCHBASE_PASSWORD:-password} - COUCHBASE_SCOPE_NAME: ${COUCHBASE_SCOPE_NAME:-_default} - COUCHBASE_USER: ${COUCHBASE_USER:-Administrator} - CREATE_TIDB_SERVICE_JOB_ENABLED: ${CREATE_TIDB_SERVICE_JOB_ENABLED:-false} - CSP_WHITELIST: ${CSP_WHITELIST:-} - DB_DATABASE: ${DB_DATABASE:-dify} - DB_HOST: ${DB_HOST:-db} - DB_PASSWORD: ${DB_PASSWORD:-difyai123456} - DB_PLUGIN_DATABASE: ${DB_PLUGIN_DATABASE:-dify_plugin} - DB_PORT: ${DB_PORT:-5432} - DB_USERNAME: ${DB_USERNAME:-postgres} - DEBUG: ${DEBUG:-false} - DEPLOY_ENV: ${DEPLOY_ENV:-PRODUCTION} - DIFY_BIND_ADDRESS: ${DIFY_BIND_ADDRESS:-0.0.0.0} - DIFY_PORT: ${DIFY_PORT:-5001} - ELASTICSEARCH_HOST: ${ELASTICSEARCH_HOST:-0.0.0.0} - ELASTICSEARCH_PASSWORD: ${ELASTICSEARCH_PASSWORD:-elastic} - ELASTICSEARCH_PORT: ${ELASTICSEARCH_PORT:-9200} - ELASTICSEARCH_USERNAME: ${ELASTICSEARCH_USERNAME:-elastic} - ENDPOINT_URL_TEMPLATE: ${ENDPOINT_URL_TEMPLATE:-http://localhost/e/{hook_id}} - ETCD_AUTO_COMPACTION_MODE: ${ETCD_AUTO_COMPACTION_MODE:-revision} - ETCD_AUTO_COMPACTION_RETENTION: ${ETCD_AUTO_COMPACTION_RETENTION:-1000} - ETCD_ENDPOINTS: ${ETCD_ENDPOINTS:-etcd:2379} - ETCD_QUOTA_BACKEND_BYTES: ${ETCD_QUOTA_BACKEND_BYTES:-4294967296} - ETCD_SNAPSHOT_COUNT: ${ETCD_SNAPSHOT_COUNT:-50000} - ETL_TYPE: ${ETL_TYPE:-dify} - EXPOSE_NGINX_PORT: ${PANEL_APP_PORT_HTTP:-8080} - EXPOSE_NGINX_SSL_PORT: ${PANEL_APP_PORT_HTTPS:-8443} - EXPOSE_PLUGIN_DAEMON_PORT: ${EXPOSE_PLUGIN_DAEMON_PORT:-5002} - EXPOSE_PLUGIN_DEBUGGING_HOST: ${EXPOSE_PLUGIN_DEBUGGING_HOST:-localhost} - EXPOSE_PLUGIN_DEBUGGING_PORT: ${EXPOSE_PLUGIN_DEBUGGING_PORT:-5003} - FILES_ACCESS_TIMEOUT: ${FILES_ACCESS_TIMEOUT:-300} - FILES_URL: ${FILES_URL:-} - FLASK_DEBUG: ${FLASK_DEBUG:-false} - FORCE_VERIFYING_SIGNATURE: ${FORCE_VERIFYING_SIGNATURE:-true} - GOOGLE_STORAGE_BUCKET_NAME: ${GOOGLE_STORAGE_BUCKET_NAME:-your-bucket-name} - GOOGLE_STORAGE_SERVICE_ACCOUNT_JSON_BASE64: ${GOOGLE_STORAGE_SERVICE_ACCOUNT_JSON_BASE64:-} - GUNICORN_TIMEOUT: ${GUNICORN_TIMEOUT:-360} - HTTP_REQUEST_NODE_MAX_BINARY_SIZE: ${HTTP_REQUEST_NODE_MAX_BINARY_SIZE:-10485760} - HTTP_REQUEST_NODE_MAX_TEXT_SIZE: ${HTTP_REQUEST_NODE_MAX_TEXT_SIZE:-1048576} - HUAWEI_OBS_ACCESS_KEY: ${HUAWEI_OBS_ACCESS_KEY:-your-access-key} - HUAWEI_OBS_BUCKET_NAME: ${HUAWEI_OBS_BUCKET_NAME:-your-bucket-name} - HUAWEI_OBS_SECRET_KEY: ${HUAWEI_OBS_SECRET_KEY:-your-secret-key} - HUAWEI_OBS_SERVER: ${HUAWEI_OBS_SERVER:-your-server-url} - INDEXING_MAX_SEGMENTATION_TOKENS_LENGTH: ${INDEXING_MAX_SEGMENTATION_TOKENS_LENGTH:-4000} - INIT_PASSWORD: ${INIT_PASSWORD:-} - INNER_API_KEY_FOR_PLUGIN: ${PLUGIN_DIFY_INNER_API_KEY:-QaHbTe77CtuXmsfyhR7+vRjI/+XbV1AaFy691iy+kGDv2Jvy0/eAh8Y1} - INVITE_EXPIRY_HOURS: ${INVITE_EXPIRY_HOURS:-72} - KIBANA_PORT: ${KIBANA_PORT:-5601} - LINDORM_PASSWORD: ${LINDORM_PASSWORD:-lindorm} - LINDORM_URL: ${LINDORM_URL:-http://lindorm:30070} - LINDORM_USERNAME: ${LINDORM_USERNAME:-lindorm} - LOG_DATEFORMAT: ${LOG_DATEFORMAT:-%Y-%m-%d %H:%M:%S} - LOG_FILE: ${LOG_FILE:-/app/logs/server.log} - LOG_FILE_BACKUP_COUNT: ${LOG_FILE_BACKUP_COUNT:-5} - LOG_FILE_MAX_SIZE: ${LOG_FILE_MAX_SIZE:-20} - LOG_LEVEL: ${LOG_LEVEL:-INFO} - LOG_TZ: ${LOG_TZ:-UTC} - MAIL_DEFAULT_SEND_FROM: ${MAIL_DEFAULT_SEND_FROM:-} - MAIL_TYPE: ${MAIL_TYPE:-resend} - MARKETPLACE_API_URL: ${MARKETPLACE_API_URL:-https://marketplace.dify.ai} - MARKETPLACE_ENABLED: ${MARKETPLACE_ENABLED:-true} - MAX_SUBMIT_COUNT: ${MAX_SUBMIT_COUNT:-100} - MAX_VARIABLE_SIZE: ${MAX_VARIABLE_SIZE:-204800} - MIGRATION_ENABLED: ${MIGRATION_ENABLED:-true} - MILVUS_AUTHORIZATION_ENABLED: ${MILVUS_AUTHORIZATION_ENABLED:-true} - MILVUS_ENABLE_HYBRID_SEARCH: ${MILVUS_ENABLE_HYBRID_SEARCH:-False} - MILVUS_PASSWORD: ${MILVUS_PASSWORD:-Milvus} - MILVUS_TOKEN: ${MILVUS_TOKEN:-} - MILVUS_URI: ${MILVUS_URI:-http://127.0.0.1:19530} - MILVUS_USER: ${MILVUS_USER:-root} - MINIO_ACCESS_KEY: ${MINIO_ACCESS_KEY:-minioadmin} - MINIO_ADDRESS: ${MINIO_ADDRESS:-minio:9000} - MINIO_SECRET_KEY: ${MINIO_SECRET_KEY:-minioadmin} - MODE: api - MULTIMODAL_SEND_FORMAT: ${MULTIMODAL_SEND_FORMAT:-base64} - MYSCALE_DATABASE: ${MYSCALE_DATABASE:-dify} - MYSCALE_FTS_PARAMS: ${MYSCALE_FTS_PARAMS:-} - MYSCALE_HOST: ${MYSCALE_HOST:-myscale} - MYSCALE_PASSWORD: ${MYSCALE_PASSWORD:-} - MYSCALE_PORT: ${MYSCALE_PORT:-8123} - MYSCALE_USER: ${MYSCALE_USER:-default} - NGINX_CLIENT_MAX_BODY_SIZE: ${NGINX_CLIENT_MAX_BODY_SIZE:-15M} - NGINX_ENABLE_CERTBOT_CHALLENGE: ${NGINX_ENABLE_CERTBOT_CHALLENGE:-false} - NGINX_HTTPS_ENABLED: ${NGINX_HTTPS_ENABLED:-false} - NGINX_KEEPALIVE_TIMEOUT: ${NGINX_KEEPALIVE_TIMEOUT:-65} - NGINX_PORT: ${NGINX_PORT:-80} - NGINX_PROXY_READ_TIMEOUT: ${NGINX_PROXY_READ_TIMEOUT:-3600s} - NGINX_PROXY_SEND_TIMEOUT: ${NGINX_PROXY_SEND_TIMEOUT:-3600s} - NGINX_SERVER_NAME: ${NGINX_SERVER_NAME:-_} - NGINX_SSL_CERT_FILENAME: ${NGINX_SSL_CERT_FILENAME:-dify.crt} - NGINX_SSL_CERT_KEY_FILENAME: ${NGINX_SSL_CERT_KEY_FILENAME:-dify.key} - NGINX_SSL_PORT: ${NGINX_SSL_PORT:-443} - NGINX_SSL_PROTOCOLS: ${NGINX_SSL_PROTOCOLS:-TLSv1.1 TLSv1.2 TLSv1.3} - NGINX_WORKER_PROCESSES: ${NGINX_WORKER_PROCESSES:-auto} - NOTION_CLIENT_ID: ${NOTION_CLIENT_ID:-} - NOTION_CLIENT_SECRET: ${NOTION_CLIENT_SECRET:-} - NOTION_INTEGRATION_TYPE: ${NOTION_INTEGRATION_TYPE:-public} - NOTION_INTERNAL_SECRET: ${NOTION_INTERNAL_SECRET:-} - OCEANBASE_CLUSTER_NAME: ${OCEANBASE_CLUSTER_NAME:-difyai} - OCEANBASE_MEMORY_LIMIT: ${OCEANBASE_MEMORY_LIMIT:-6G} - OCEANBASE_VECTOR_DATABASE: ${OCEANBASE_VECTOR_DATABASE:-test} - OCEANBASE_VECTOR_HOST: ${OCEANBASE_VECTOR_HOST:-oceanbase} - OCEANBASE_VECTOR_PASSWORD: ${OCEANBASE_VECTOR_PASSWORD:-difyai123456} - OCEANBASE_VECTOR_PORT: ${OCEANBASE_VECTOR_PORT:-2881} - OCEANBASE_VECTOR_USER: ${OCEANBASE_VECTOR_USER:-root@test} - OCI_ACCESS_KEY: ${OCI_ACCESS_KEY:-your-access-key} - OCI_BUCKET_NAME: ${OCI_BUCKET_NAME:-your-bucket-name} - OCI_ENDPOINT: ${OCI_ENDPOINT:-https://objectstorage.us-ashburn-1.oraclecloud.com} - OCI_REGION: ${OCI_REGION:-us-ashburn-1} - OCI_SECRET_KEY: ${OCI_SECRET_KEY:-your-secret-key} - OPENAI_API_BASE: ${OPENAI_API_BASE:-https://api.openai.com/v1} - OPENDAL_FS_ROOT: ${OPENDAL_FS_ROOT:-storage} - OPENDAL_SCHEME: ${OPENDAL_SCHEME:-fs} - OPENSEARCH_BOOTSTRAP_MEMORY_LOCK: ${OPENSEARCH_BOOTSTRAP_MEMORY_LOCK:-true} - OPENSEARCH_DISCOVERY_TYPE: ${OPENSEARCH_DISCOVERY_TYPE:-single-node} - OPENSEARCH_HOST: ${OPENSEARCH_HOST:-opensearch} - OPENSEARCH_INITIAL_ADMIN_PASSWORD: ${OPENSEARCH_INITIAL_ADMIN_PASSWORD:-Qazwsxedc!@#123} - OPENSEARCH_JAVA_OPTS_MAX: ${OPENSEARCH_JAVA_OPTS_MAX:-1024m} - OPENSEARCH_JAVA_OPTS_MIN: ${OPENSEARCH_JAVA_OPTS_MIN:-512m} - OPENSEARCH_MEMLOCK_HARD: ${OPENSEARCH_MEMLOCK_HARD:--1} - OPENSEARCH_MEMLOCK_SOFT: ${OPENSEARCH_MEMLOCK_SOFT:--1} - OPENSEARCH_NOFILE_HARD: ${OPENSEARCH_NOFILE_HARD:-65536} - OPENSEARCH_NOFILE_SOFT: ${OPENSEARCH_NOFILE_SOFT:-65536} - OPENSEARCH_PASSWORD: ${OPENSEARCH_PASSWORD:-admin} - OPENSEARCH_PORT: ${OPENSEARCH_PORT:-9200} - OPENSEARCH_SECURE: ${OPENSEARCH_SECURE:-true} - OPENSEARCH_USER: ${OPENSEARCH_USER:-admin} - ORACLE_CHARACTERSET: ${ORACLE_CHARACTERSET:-AL32UTF8} - ORACLE_DATABASE: ${ORACLE_DATABASE:-FREEPDB1} - ORACLE_HOST: ${ORACLE_HOST:-oracle} - ORACLE_PASSWORD: ${ORACLE_PASSWORD:-dify} - ORACLE_PORT: ${ORACLE_PORT:-1521} - ORACLE_PWD: ${ORACLE_PWD:-Dify123456} - ORACLE_USER: ${ORACLE_USER:-dify} - PGDATA: ${PGDATA:-/var/lib/postgresql/data/pgdata} - PGUSER: ${PGUSER:-${DB_USERNAME}} - PGVECTOR_DATABASE: ${PGVECTOR_DATABASE:-dify} - PGVECTOR_HOST: ${PGVECTOR_HOST:-pgvector} - PGVECTOR_MAX_CONNECTION: ${PGVECTOR_MAX_CONNECTION:-5} - PGVECTOR_MIN_CONNECTION: ${PGVECTOR_MIN_CONNECTION:-1} - PGVECTOR_PASSWORD: ${PGVECTOR_PASSWORD:-difyai123456} - PGVECTOR_PGDATA: ${PGVECTOR_PGDATA:-/var/lib/postgresql/data/pgdata} - PGVECTOR_PGUSER: ${PGVECTOR_PGUSER:-postgres} - PGVECTOR_PORT: ${PGVECTOR_PORT:-5432} - PGVECTOR_POSTGRES_DB: ${PGVECTOR_POSTGRES_DB:-dify} - PGVECTOR_POSTGRES_PASSWORD: ${PGVECTOR_POSTGRES_PASSWORD:-difyai123456} - PGVECTOR_USER: ${PGVECTOR_USER:-postgres} - PGVECTO_RS_DATABASE: ${PGVECTO_RS_DATABASE:-dify} - PGVECTO_RS_HOST: ${PGVECTO_RS_HOST:-pgvecto-rs} - PGVECTO_RS_PASSWORD: ${PGVECTO_RS_PASSWORD:-difyai123456} - PGVECTO_RS_PORT: ${PGVECTO_RS_PORT:-5432} - PGVECTO_RS_USER: ${PGVECTO_RS_USER:-postgres} - PLUGIN_DAEMON_KEY: ${PLUGIN_DAEMON_KEY:-lYkiYYT6owG+71oLerGzA7GXCgOT++6ovaezWAjpCjf+Sjc3ZtU+qUEi} - PLUGIN_DAEMON_PORT: ${PLUGIN_DAEMON_PORT:-5002} - PLUGIN_DAEMON_URL: ${PLUGIN_DAEMON_URL:-http://plugin_daemon:5002} - PLUGIN_DEBUGGING_HOST: ${PLUGIN_DEBUGGING_HOST:-0.0.0.0} - PLUGIN_DEBUGGING_PORT: ${PLUGIN_DEBUGGING_PORT:-5003} - PLUGIN_DIFY_INNER_API_KEY: ${PLUGIN_DIFY_INNER_API_KEY:-QaHbTe77CtuXmsfyhR7+vRjI/+XbV1AaFy691iy+kGDv2Jvy0/eAh8Y1} - PLUGIN_DIFY_INNER_API_URL: ${PLUGIN_DIFY_INNER_API_URL:-http://api:5001} - PLUGIN_MAX_PACKAGE_SIZE: ${PLUGIN_MAX_PACKAGE_SIZE:-52428800} - PLUGIN_PPROF_ENABLED: ${PLUGIN_PPROF_ENABLED:-false} - POSITION_PROVIDER_EXCLUDES: ${POSITION_PROVIDER_EXCLUDES:-} - POSITION_PROVIDER_INCLUDES: ${POSITION_PROVIDER_INCLUDES:-} - POSITION_PROVIDER_PINS: ${POSITION_PROVIDER_PINS:-} - POSITION_TOOL_EXCLUDES: ${POSITION_TOOL_EXCLUDES:-} - POSITION_TOOL_INCLUDES: ${POSITION_TOOL_INCLUDES:-} - POSITION_TOOL_PINS: ${POSITION_TOOL_PINS:-} - POSTGRES_DB: ${POSTGRES_DB:-${DB_DATABASE}} - POSTGRES_EFFECTIVE_CACHE_SIZE: ${POSTGRES_EFFECTIVE_CACHE_SIZE:-4096MB} - POSTGRES_MAINTENANCE_WORK_MEM: ${POSTGRES_MAINTENANCE_WORK_MEM:-64MB} - POSTGRES_MAX_CONNECTIONS: ${POSTGRES_MAX_CONNECTIONS:-100} - POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-${DB_PASSWORD}} - POSTGRES_SHARED_BUFFERS: ${POSTGRES_SHARED_BUFFERS:-128MB} - POSTGRES_WORK_MEM: ${POSTGRES_WORK_MEM:-4MB} - PROMPT_GENERATION_MAX_TOKENS: ${PROMPT_GENERATION_MAX_TOKENS:-512} - QDRANT_API_KEY: ${QDRANT_API_KEY:-difyai123456} - QDRANT_CLIENT_TIMEOUT: ${QDRANT_CLIENT_TIMEOUT:-20} - QDRANT_GRPC_ENABLED: ${QDRANT_GRPC_ENABLED:-false} - QDRANT_GRPC_PORT: ${QDRANT_GRPC_PORT:-6334} - QDRANT_URL: ${QDRANT_URL:-http://qdrant:6333} - REDIS_CLUSTERS: ${REDIS_CLUSTERS:-} - REDIS_CLUSTERS_PASSWORD: ${REDIS_CLUSTERS_PASSWORD:-} - REDIS_DB: ${REDIS_DB:-0} - REDIS_HOST: ${REDIS_HOST:-redis} - REDIS_PASSWORD: ${REDIS_PASSWORD:-difyai123456} - REDIS_PORT: ${REDIS_PORT:-6379} - REDIS_SENTINELS: ${REDIS_SENTINELS:-} - REDIS_SENTINEL_PASSWORD: ${REDIS_SENTINEL_PASSWORD:-} - REDIS_SENTINEL_SERVICE_NAME: ${REDIS_SENTINEL_SERVICE_NAME:-} - REDIS_SENTINEL_SOCKET_TIMEOUT: ${REDIS_SENTINEL_SOCKET_TIMEOUT:-0.1} - REDIS_SENTINEL_USERNAME: ${REDIS_SENTINEL_USERNAME:-} - REDIS_USERNAME: ${REDIS_USERNAME:-} - REDIS_USE_CLUSTERS: ${REDIS_USE_CLUSTERS:-false} - REDIS_USE_SENTINEL: ${REDIS_USE_SENTINEL:-false} - REDIS_USE_SSL: ${REDIS_USE_SSL:-false} - REFRESH_TOKEN_EXPIRE_DAYS: ${REFRESH_TOKEN_EXPIRE_DAYS:-30} - RELYT_DATABASE: ${RELYT_DATABASE:-postgres} - RELYT_HOST: ${RELYT_HOST:-db} - RELYT_PASSWORD: ${RELYT_PASSWORD:-difyai123456} - RELYT_PORT: ${RELYT_PORT:-5432} - RELYT_USER: ${RELYT_USER:-postgres} - RESEND_API_KEY: ${RESEND_API_KEY:-your-resend-api-key} - RESEND_API_URL: ${RESEND_API_URL:-https://api.resend.com} - RESET_PASSWORD_TOKEN_EXPIRY_MINUTES: ${RESET_PASSWORD_TOKEN_EXPIRY_MINUTES:-5} - S3_ACCESS_KEY: ${S3_ACCESS_KEY:-} - S3_BUCKET_NAME: ${S3_BUCKET_NAME:-difyai} - S3_ENDPOINT: ${S3_ENDPOINT:-} - S3_REGION: ${S3_REGION:-us-east-1} - S3_SECRET_KEY: ${S3_SECRET_KEY:-} - S3_USE_AWS_MANAGED_IAM: ${S3_USE_AWS_MANAGED_IAM:-false} - SANDBOX_API_KEY: ${SANDBOX_API_KEY:-dify-sandbox} - SANDBOX_ENABLE_NETWORK: ${SANDBOX_ENABLE_NETWORK:-true} - SANDBOX_GIN_MODE: ${SANDBOX_GIN_MODE:-release} - SANDBOX_HTTPS_PROXY: ${SANDBOX_HTTPS_PROXY:-http://ssrf_proxy:3128} - SANDBOX_HTTP_PROXY: ${SANDBOX_HTTP_PROXY:-http://ssrf_proxy:3128} - SANDBOX_PORT: ${SANDBOX_PORT:-8194} - SANDBOX_WORKER_TIMEOUT: ${SANDBOX_WORKER_TIMEOUT:-15} - SCARF_NO_ANALYTICS: ${SCARF_NO_ANALYTICS:-true} - SECRET_KEY: ${SECRET_KEY:-sk-9f73s3ljTXVcMT3Blb3ljTqtsKiGHXVcMT3BlbkFJLK7U} - SENTRY_DSN: ${API_SENTRY_DSN:-} - SENTRY_PROFILES_SAMPLE_RATE: ${API_SENTRY_PROFILES_SAMPLE_RATE:-1.0} - SENTRY_TRACES_SAMPLE_RATE: ${API_SENTRY_TRACES_SAMPLE_RATE:-1.0} - SERVER_WORKER_AMOUNT: ${SERVER_WORKER_AMOUNT:-1} - SERVER_WORKER_CLASS: ${SERVER_WORKER_CLASS:-gevent} - SERVER_WORKER_CONNECTIONS: ${SERVER_WORKER_CONNECTIONS:-10} - SERVICE_API_URL: ${SERVICE_API_URL:-} - SMTP_OPPORTUNISTIC_TLS: ${SMTP_OPPORTUNISTIC_TLS:-false} - SMTP_PASSWORD: ${SMTP_PASSWORD:-} - SMTP_PORT: ${SMTP_PORT:-465} - SMTP_SERVER: ${SMTP_SERVER:-} - SMTP_USERNAME: ${SMTP_USERNAME:-} - SMTP_USE_TLS: ${SMTP_USE_TLS:-true} - SQLALCHEMY_ECHO: ${SQLALCHEMY_ECHO:-false} - SQLALCHEMY_POOL_RECYCLE: ${SQLALCHEMY_POOL_RECYCLE:-3600} - SQLALCHEMY_POOL_SIZE: ${SQLALCHEMY_POOL_SIZE:-30} - SSRF_COREDUMP_DIR: ${SSRF_COREDUMP_DIR:-/var/spool/squid} - SSRF_DEFAULT_CONNECT_TIME_OUT: ${SSRF_DEFAULT_CONNECT_TIME_OUT:-5} - SSRF_DEFAULT_READ_TIME_OUT: ${SSRF_DEFAULT_READ_TIME_OUT:-5} - SSRF_DEFAULT_TIME_OUT: ${SSRF_DEFAULT_TIME_OUT:-5} - SSRF_DEFAULT_WRITE_TIME_OUT: ${SSRF_DEFAULT_WRITE_TIME_OUT:-5} - SSRF_HTTP_PORT: ${SSRF_HTTP_PORT:-3128} - SSRF_PROXY_HTTPS_URL: ${SSRF_PROXY_HTTPS_URL:-http://ssrf_proxy:3128} - SSRF_PROXY_HTTP_URL: ${SSRF_PROXY_HTTP_URL:-http://ssrf_proxy:3128} - SSRF_REVERSE_PROXY_PORT: ${SSRF_REVERSE_PROXY_PORT:-8194} - SSRF_SANDBOX_HOST: ${SSRF_SANDBOX_HOST:-sandbox} - STORAGE_TYPE: ${STORAGE_TYPE:-opendal} - SUPABASE_API_KEY: ${SUPABASE_API_KEY:-your-access-key} - SUPABASE_BUCKET_NAME: ${SUPABASE_BUCKET_NAME:-your-bucket-name} - SUPABASE_URL: ${SUPABASE_URL:-your-server-url} - TEMPLATE_TRANSFORM_MAX_LENGTH: ${TEMPLATE_TRANSFORM_MAX_LENGTH:-80000} - TENCENT_COS_BUCKET_NAME: ${TENCENT_COS_BUCKET_NAME:-your-bucket-name} - TENCENT_COS_REGION: ${TENCENT_COS_REGION:-your-region} - TENCENT_COS_SCHEME: ${TENCENT_COS_SCHEME:-your-scheme} - TENCENT_COS_SECRET_ID: ${TENCENT_COS_SECRET_ID:-your-secret-id} - TENCENT_COS_SECRET_KEY: ${TENCENT_COS_SECRET_KEY:-your-secret-key} - TENCENT_VECTOR_DB_API_KEY: ${TENCENT_VECTOR_DB_API_KEY:-dify} - TENCENT_VECTOR_DB_DATABASE: ${TENCENT_VECTOR_DB_DATABASE:-dify} - TENCENT_VECTOR_DB_REPLICAS: ${TENCENT_VECTOR_DB_REPLICAS:-2} - TENCENT_VECTOR_DB_SHARD: ${TENCENT_VECTOR_DB_SHARD:-1} - TENCENT_VECTOR_DB_TIMEOUT: ${TENCENT_VECTOR_DB_TIMEOUT:-30} - TENCENT_VECTOR_DB_URL: ${TENCENT_VECTOR_DB_URL:-http://127.0.0.1} - TENCENT_VECTOR_DB_USERNAME: ${TENCENT_VECTOR_DB_USERNAME:-dify} - TEXT_GENERATION_TIMEOUT_MS: ${TEXT_GENERATION_TIMEOUT_MS:-60000} - TIDB_API_URL: ${TIDB_API_URL:-http://127.0.0.1} - TIDB_IAM_API_URL: ${TIDB_IAM_API_URL:-http://127.0.0.1} - TIDB_ON_QDRANT_API_KEY: ${TIDB_ON_QDRANT_API_KEY:-dify} - TIDB_ON_QDRANT_CLIENT_TIMEOUT: ${TIDB_ON_QDRANT_CLIENT_TIMEOUT:-20} - TIDB_ON_QDRANT_GRPC_ENABLED: ${TIDB_ON_QDRANT_GRPC_ENABLED:-false} - TIDB_ON_QDRANT_GRPC_PORT: ${TIDB_ON_QDRANT_GRPC_PORT:-6334} - TIDB_ON_QDRANT_URL: ${TIDB_ON_QDRANT_URL:-http://127.0.0.1} - TIDB_PRIVATE_KEY: ${TIDB_PRIVATE_KEY:-dify} - TIDB_PROJECT_ID: ${TIDB_PROJECT_ID:-dify} - TIDB_PUBLIC_KEY: ${TIDB_PUBLIC_KEY:-dify} - TIDB_REGION: ${TIDB_REGION:-regions/aws-us-east-1} - TIDB_SPEND_LIMIT: ${TIDB_SPEND_LIMIT:-100} - TIDB_VECTOR_DATABASE: ${TIDB_VECTOR_DATABASE:-dify} - TIDB_VECTOR_HOST: ${TIDB_VECTOR_HOST:-tidb} - TIDB_VECTOR_PASSWORD: ${TIDB_VECTOR_PASSWORD:-} - TIDB_VECTOR_PORT: ${TIDB_VECTOR_PORT:-4000} - TIDB_VECTOR_USER: ${TIDB_VECTOR_USER:-} - TOP_K_MAX_VALUE: ${TOP_K_MAX_VALUE:-10} - UNSTRUCTURED_API_KEY: ${UNSTRUCTURED_API_KEY:-} - UNSTRUCTURED_API_URL: ${UNSTRUCTURED_API_URL:-} - UPLOAD_AUDIO_FILE_SIZE_LIMIT: ${UPLOAD_AUDIO_FILE_SIZE_LIMIT:-50} - UPLOAD_FILE_BATCH_LIMIT: ${UPLOAD_FILE_BATCH_LIMIT:-5} - UPLOAD_FILE_SIZE_LIMIT: ${UPLOAD_FILE_SIZE_LIMIT:-15} - UPLOAD_IMAGE_FILE_SIZE_LIMIT: ${UPLOAD_IMAGE_FILE_SIZE_LIMIT:-10} - UPLOAD_VIDEO_FILE_SIZE_LIMIT: ${UPLOAD_VIDEO_FILE_SIZE_LIMIT:-100} - UPSTASH_VECTOR_TOKEN: ${UPSTASH_VECTOR_TOKEN:-dify} - UPSTASH_VECTOR_URL: ${UPSTASH_VECTOR_URL:-https://xxx-vector.upstash.io} - VECTOR_STORE: ${VECTOR_STORE:-weaviate} - VIKINGDB_ACCESS_KEY: ${VIKINGDB_ACCESS_KEY:-your-ak} - VIKINGDB_CONNECTION_TIMEOUT: ${VIKINGDB_CONNECTION_TIMEOUT:-30} - VIKINGDB_HOST: ${VIKINGDB_HOST:-api-vikingdb.xxx.volces.com} - VIKINGDB_REGION: ${VIKINGDB_REGION:-cn-shanghai} - VIKINGDB_SCHEMA: ${VIKINGDB_SCHEMA:-http} - VIKINGDB_SECRET_KEY: ${VIKINGDB_SECRET_KEY:-your-sk} - VIKINGDB_SOCKET_TIMEOUT: ${VIKINGDB_SOCKET_TIMEOUT:-30} - VOLCENGINE_TOS_ACCESS_KEY: ${VOLCENGINE_TOS_ACCESS_KEY:-your-access-key} - VOLCENGINE_TOS_BUCKET_NAME: ${VOLCENGINE_TOS_BUCKET_NAME:-your-bucket-name} - VOLCENGINE_TOS_ENDPOINT: ${VOLCENGINE_TOS_ENDPOINT:-your-server-url} - VOLCENGINE_TOS_REGION: ${VOLCENGINE_TOS_REGION:-your-region} - VOLCENGINE_TOS_SECRET_KEY: ${VOLCENGINE_TOS_SECRET_KEY:-your-secret-key} - WEAVIATE_API_KEY: ${WEAVIATE_API_KEY:-WVF5YThaHlkYwhGUSmCRgsX3tD5ngdN8pkih} - WEAVIATE_AUTHENTICATION_ANONYMOUS_ACCESS_ENABLED: ${WEAVIATE_AUTHENTICATION_ANONYMOUS_ACCESS_ENABLED:-true} - WEAVIATE_AUTHENTICATION_APIKEY_ALLOWED_KEYS: ${WEAVIATE_AUTHENTICATION_APIKEY_ALLOWED_KEYS:-WVF5YThaHlkYwhGUSmCRgsX3tD5ngdN8pkih} - WEAVIATE_AUTHENTICATION_APIKEY_ENABLED: ${WEAVIATE_AUTHENTICATION_APIKEY_ENABLED:-true} - WEAVIATE_AUTHENTICATION_APIKEY_USERS: ${WEAVIATE_AUTHENTICATION_APIKEY_USERS:-hello@dify.ai} - WEAVIATE_AUTHORIZATION_ADMINLIST_ENABLED: ${WEAVIATE_AUTHORIZATION_ADMINLIST_ENABLED:-true} - WEAVIATE_AUTHORIZATION_ADMINLIST_USERS: ${WEAVIATE_AUTHORIZATION_ADMINLIST_USERS:-hello@dify.ai} - WEAVIATE_CLUSTER_HOSTNAME: ${WEAVIATE_CLUSTER_HOSTNAME:-node1} - WEAVIATE_DEFAULT_VECTORIZER_MODULE: ${WEAVIATE_DEFAULT_VECTORIZER_MODULE:-none} - WEAVIATE_ENDPOINT: ${WEAVIATE_ENDPOINT:-http://weaviate:8080} - WEAVIATE_PERSISTENCE_DATA_PATH: ${WEAVIATE_PERSISTENCE_DATA_PATH:-/var/lib/weaviate} - WEAVIATE_QUERY_DEFAULTS_LIMIT: ${WEAVIATE_QUERY_DEFAULTS_LIMIT:-25} - WEB_API_CORS_ALLOW_ORIGINS: ${WEB_API_CORS_ALLOW_ORIGINS:-*} - WEB_SENTRY_DSN: ${WEB_SENTRY_DSN:-} - WORKFLOW_CALL_MAX_DEPTH: ${WORKFLOW_CALL_MAX_DEPTH:-5} - WORKFLOW_FILE_UPLOAD_LIMIT: ${WORKFLOW_FILE_UPLOAD_LIMIT:-10} - WORKFLOW_MAX_EXECUTION_STEPS: ${WORKFLOW_MAX_EXECUTION_STEPS:-500} - WORKFLOW_MAX_EXECUTION_TIME: ${WORKFLOW_MAX_EXECUTION_TIME:-1200} - WORKFLOW_PARALLEL_DEPTH_LIMIT: ${WORKFLOW_PARALLEL_DEPTH_LIMIT:-3} - image: langgenius/dify-api:1.0.0 - networks: - - ssrf_proxy_network - - default - restart: always - volumes: - - ${DIFY_ROOT_PATH}/volumes/app/storage:/app/api/storage - certbot: - command: - - tail - - -f - - /dev/null - container_name: certbot-dify - entrypoint: - - /docker-entrypoint.sh - environment: - - CERTBOT_EMAIL=${CERTBOT_EMAIL} - - CERTBOT_DOMAIN=${CERTBOT_DOMAIN} - - CERTBOT_OPTIONS=${CERTBOT_OPTIONS:-} - image: certbot/certbot - profiles: - - certbot - volumes: - - ${DIFY_ROOT_PATH}/volumes/certbot/conf:/etc/letsencrypt - - ${DIFY_ROOT_PATH}/volumes/certbot/www:/var/www/html - - ${DIFY_ROOT_PATH}/volumes/certbot/logs:/var/log/letsencrypt - - ${DIFY_ROOT_PATH}/volumes/certbot/conf/live:/etc/letsencrypt/live - - ${DIFY_ROOT_PATH}/certbot/update-cert.template.txt:/update-cert.template.txt - - ${DIFY_ROOT_PATH}/certbot/docker-entrypoint.sh:/docker-entrypoint.sh - chroma: - container_name: chroma-dify - environment: - CHROMA_SERVER_AUTHN_CREDENTIALS: ${CHROMA_SERVER_AUTHN_CREDENTIALS:-difyai123456} - CHROMA_SERVER_AUTHN_PROVIDER: ${CHROMA_SERVER_AUTHN_PROVIDER:-chromadb.auth.token_authn.TokenAuthenticationServerProvider} - IS_PERSISTENT: ${CHROMA_IS_PERSISTENT:-TRUE} - image: ghcr.io/chroma-core/chroma:0.5.20 - profiles: - - chroma - restart: always - volumes: - - ${DIFY_ROOT_PATH}/volumes/chroma:/chroma/chroma - couchbase-server: - build: ./conf/couchbase-server - command: sh -c "/opt/couchbase/init/init-cbserver.sh" - container_name: couchbase-server - entrypoint: - - '' - environment: - - CLUSTER_NAME=dify_search - - COUCHBASE_ADMINISTRATOR_USERNAME=${COUCHBASE_USER:-Administrator} - - COUCHBASE_ADMINISTRATOR_PASSWORD=${COUCHBASE_PASSWORD:-password} - - COUCHBASE_BUCKET=${COUCHBASE_BUCKET_NAME:-Embeddings} - - COUCHBASE_BUCKET_RAMSIZE=512 - - COUCHBASE_RAM_SIZE=2048 - - COUCHBASE_EVENTING_RAM_SIZE=512 - - COUCHBASE_INDEX_RAM_SIZE=512 - - COUCHBASE_FTS_RAM_SIZE=1024 - healthcheck: - interval: 10s - retries: 10 - start_period: 30s - test: - - CMD-SHELL - - curl -s -f -u Administrator:password http://localhost:8091/pools/default/buckets - | grep -q '\[{' || exit 1 - timeout: 10s - hostname: couchbase-server - profiles: - - couchbase - restart: always - stdin_open: true - tty: true - volumes: - - ${DIFY_ROOT_PATH}/volumes/couchbase/data:/opt/couchbase/var/lib/couchbase/data - working_dir: /opt/couchbase - db: - command: "postgres -c 'max_connections=${POSTGRES_MAX_CONNECTIONS:-100}'\n \ - \ -c 'shared_buffers=${POSTGRES_SHARED_BUFFERS:-128MB}'\n -c 'work_mem=${POSTGRES_WORK_MEM:-4MB}'\n\ - \ -c 'maintenance_work_mem=${POSTGRES_MAINTENANCE_WORK_MEM:-64MB}'\n\ - \ -c 'effective_cache_size=${POSTGRES_EFFECTIVE_CACHE_SIZE:-4096MB}'\n" - container_name: db-dify - environment: - PGDATA: ${PGDATA:-/var/lib/postgresql/data/pgdata} - PGUSER: ${PGUSER:-postgres} - POSTGRES_DB: ${POSTGRES_DB:-dify} - POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-difyai123456} - healthcheck: - interval: 1s - retries: 30 - test: - - CMD - - pg_isready - timeout: 3s - image: postgres:15-alpine - ports: - - ${EXPOSE_DB_PORT:-5432}:5432 - restart: always - volumes: - - ${DIFY_ROOT_PATH}/volumes/db/data:/var/lib/postgresql/data - elasticsearch: - container_name: elasticsearch-dify - deploy: - resources: - limits: - memory: 2g - entrypoint: - - sh - - -c - - sh /docker-entrypoint-mount.sh - environment: - ELASTIC_PASSWORD: ${ELASTICSEARCH_PASSWORD:-elastic} - VECTOR_STORE: ${VECTOR_STORE:-} - cluster.name: dify-es-cluster - discovery.type: single-node - node.name: dify-es0 - xpack.license.self_generated.type: basic - xpack.security.enabled: 'true' - xpack.security.enrollment.enabled: 'false' - xpack.security.http.ssl.enabled: 'false' - healthcheck: - interval: 30s - retries: 50 - test: - - CMD - - curl - - -s - - http://localhost:9200/_cluster/health?pretty - timeout: 10s - image: docker.elastic.co/elasticsearch/elasticsearch:8.14.3 - ports: - - ${ELASTICSEARCH_PORT:-9200}:9200 - profiles: - - elasticsearch - - elasticsearch-ja - restart: always - volumes: - - ${DIFY_ROOT_PATH}/elasticsearch/docker-entrypoint.sh:/docker-entrypoint-mount.sh - - dify_es01_data:/usr/share/elasticsearch/data - etcd: - command: etcd -advertise-client-urls=http://127.0.0.1:2379 -listen-client-urls - http://0.0.0.0:2379 --data-dir /etcd - container_name: milvus-etcd-dify - environment: - ETCD_AUTO_COMPACTION_MODE: ${ETCD_AUTO_COMPACTION_MODE:-revision} - ETCD_AUTO_COMPACTION_RETENTION: ${ETCD_AUTO_COMPACTION_RETENTION:-1000} - ETCD_QUOTA_BACKEND_BYTES: ${ETCD_QUOTA_BACKEND_BYTES:-4294967296} - ETCD_SNAPSHOT_COUNT: ${ETCD_SNAPSHOT_COUNT:-50000} - healthcheck: - interval: 30s - retries: 3 - test: - - CMD - - etcdctl - - endpoint - - health - timeout: 20s - image: quay.io/coreos/etcd:v3.5.5 - networks: - - milvus - profiles: - - milvus - volumes: - - ${DIFY_ROOT_PATH}/volumes/milvus/etcd:/etcd - kibana: - container_name: kibana-dify - depends_on: - - elasticsearch - environment: - ELASTICSEARCH_HOSTS: http://elasticsearch:9200 - I18N_LOCALE: zh-CN - NO_PROXY: localhost,127.0.0.1,elasticsearch,kibana - SERVER_PORT: '5601' - XPACK_ENCRYPTEDSAVEDOBJECTS_ENCRYPTIONKEY: d1a66dfd-c4d3-4a0a-8290-2abcb83ab3aa - XPACK_FLEET_ISAIRGAPPED: 'true' - XPACK_SECURITY_ENABLED: 'true' - XPACK_SECURITY_ENROLLMENT_ENABLED: 'false' - XPACK_SECURITY_HTTP_SSL_ENABLED: 'false' - healthcheck: - interval: 30s - retries: 3 - test: - - CMD-SHELL - - curl -s http://localhost:5601 >/dev/null || exit 1 - timeout: 10s - image: docker.elastic.co/kibana/kibana:8.14.3 - ports: - - ${KIBANA_PORT:-5601}:5601 - profiles: - - elasticsearch - restart: always - milvus-standalone: - command: - - milvus - - run - - standalone - container_name: milvus-standalone-dify - depends_on: - - etcd - - minio - environment: - ETCD_ENDPOINTS: ${ETCD_ENDPOINTS:-etcd:2379} - MINIO_ADDRESS: ${MINIO_ADDRESS:-minio:9000} - common.security.authorizationEnabled: ${MILVUS_AUTHORIZATION_ENABLED:-true} - healthcheck: - interval: 30s - retries: 3 - start_period: 90s - test: - - CMD - - curl - - -f - - http://localhost:9091/healthz - timeout: 20s - image: milvusdb/milvus:v2.5.0-beta - networks: - - milvus - ports: - - 19530:19530 - - 9091:9091 - profiles: - - milvus - volumes: - - ${DIFY_ROOT_PATH}/volumes/milvus/milvus:/var/lib/milvus - minio: - command: minio server /minio_data --console-address ":9001" - container_name: milvus-minio-dify - environment: - MINIO_ACCESS_KEY: ${MINIO_ACCESS_KEY:-minioadmin} - MINIO_SECRET_KEY: ${MINIO_SECRET_KEY:-minioadmin} - healthcheck: - interval: 30s - retries: 3 - test: - - CMD - - curl - - -f - - http://localhost:9000/minio/health/live - timeout: 20s - image: minio/minio:RELEASE.2023-03-20T20-16-18Z - networks: - - milvus - profiles: - - milvus - volumes: - - ${DIFY_ROOT_PATH}/volumes/milvus/minio:/minio_data - myscale: - container_name: myscale-dify - image: myscale/myscaledb:1.6.4 - ports: - - ${MYSCALE_PORT:-8123}:${MYSCALE_PORT:-8123} - profiles: - - myscale - restart: always - tty: true - volumes: - - ${DIFY_ROOT_PATH}/volumes/myscale/data:/var/lib/clickhouse - - ${DIFY_ROOT_PATH}/volumes/myscale/log:/var/log/clickhouse-server - - ${DIFY_ROOT_PATH}/volumes/myscale/config/users.d/custom_users_config.xml:/etc/clickhouse-server/users.d/custom_users_config.xml - nginx: - container_name: nginx-dify - depends_on: - - api - - web - entrypoint: - - sh - - -c - - "cp /docker-entrypoint-mount.sh /docker-entrypoint.sh && sed -i 's/\r$$//' /docker-entrypoint.sh\ - \ && chmod +x /docker-entrypoint.sh && /docker-entrypoint.sh" - environment: - CERTBOT_DOMAIN: ${CERTBOT_DOMAIN:-} - NGINX_CLIENT_MAX_BODY_SIZE: ${NGINX_CLIENT_MAX_BODY_SIZE:-15M} - NGINX_ENABLE_CERTBOT_CHALLENGE: ${NGINX_ENABLE_CERTBOT_CHALLENGE:-false} - NGINX_HTTPS_ENABLED: ${NGINX_HTTPS_ENABLED:-false} - NGINX_KEEPALIVE_TIMEOUT: ${NGINX_KEEPALIVE_TIMEOUT:-65} - NGINX_PORT: ${NGINX_PORT:-80} - NGINX_PROXY_READ_TIMEOUT: ${NGINX_PROXY_READ_TIMEOUT:-3600s} - NGINX_PROXY_SEND_TIMEOUT: ${NGINX_PROXY_SEND_TIMEOUT:-3600s} - NGINX_SERVER_NAME: ${NGINX_SERVER_NAME:-_} - NGINX_SSL_CERT_FILENAME: ${NGINX_SSL_CERT_FILENAME:-dify.crt} - NGINX_SSL_CERT_KEY_FILENAME: ${NGINX_SSL_CERT_KEY_FILENAME:-dify.key} - NGINX_SSL_PORT: ${NGINX_SSL_PORT:-443} - NGINX_SSL_PROTOCOLS: ${NGINX_SSL_PROTOCOLS:-TLSv1.1 TLSv1.2 TLSv1.3} - NGINX_WORKER_PROCESSES: ${NGINX_WORKER_PROCESSES:-auto} - image: nginx:latest - ports: - - ${PANEL_APP_PORT_HTTP:-80}:${NGINX_PORT:-80} - - ${PANEL_APP_PORT_HTTPS:-443}:${NGINX_SSL_PORT:-443} - restart: always - volumes: - - ${DIFY_ROOT_PATH}/nginx/nginx.conf.template:/etc/nginx/nginx.conf.template - - ${DIFY_ROOT_PATH}/nginx/proxy.conf.template:/etc/nginx/proxy.conf.template - - ${DIFY_ROOT_PATH}/nginx/https.conf.template:/etc/nginx/https.conf.template - - ${DIFY_ROOT_PATH}/nginx/conf.d:/etc/nginx/conf.d - - ${DIFY_ROOT_PATH}/nginx/docker-entrypoint.sh:/docker-entrypoint-mount.sh - - ${DIFY_ROOT_PATH}/nginx/ssl:/etc/ssl - - ${DIFY_ROOT_PATH}/volumes/certbot/conf/live:/etc/letsencrypt/live - - ${DIFY_ROOT_PATH}/volumes/certbot/conf:/etc/letsencrypt - - ${DIFY_ROOT_PATH}/volumes/certbot/www:/var/www/html - oceanbase: - container_name: oceanbase-dify - environment: - OB_CLUSTER_NAME: ${OCEANBASE_CLUSTER_NAME:-difyai} - OB_MEMORY_LIMIT: ${OCEANBASE_MEMORY_LIMIT:-6G} - OB_SERVER_IP: 127.0.0.1 - OB_SYS_PASSWORD: ${OCEANBASE_VECTOR_PASSWORD:-difyai123456} - OB_TENANT_PASSWORD: ${OCEANBASE_VECTOR_PASSWORD:-difyai123456} - image: quay.io/oceanbase/oceanbase-ce:4.3.3.0-100000142024101215 - profiles: - - oceanbase - restart: always - volumes: - - ${DIFY_ROOT_PATH}/volumes/oceanbase/data:/root/ob - - ${DIFY_ROOT_PATH}/volumes/oceanbase/conf:/root/.obd/cluster - - ${DIFY_ROOT_PATH}/volumes/oceanbase/init.d:/root/boot/init.d - opensearch: - container_name: opensearch-dify - environment: - OPENSEARCH_INITIAL_ADMIN_PASSWORD: ${OPENSEARCH_INITIAL_ADMIN_PASSWORD:-Qazwsxedc!@#123} - OPENSEARCH_JAVA_OPTS: -Xms${OPENSEARCH_JAVA_OPTS_MIN:-512m} -Xmx${OPENSEARCH_JAVA_OPTS_MAX:-1024m} - bootstrap.memory_lock: ${OPENSEARCH_BOOTSTRAP_MEMORY_LOCK:-true} - discovery.type: ${OPENSEARCH_DISCOVERY_TYPE:-single-node} - image: opensearchproject/opensearch:latest - networks: - - opensearch-net - profiles: - - opensearch - ulimits: - memlock: - hard: ${OPENSEARCH_MEMLOCK_HARD:--1} - soft: ${OPENSEARCH_MEMLOCK_SOFT:--1} - nofile: - hard: ${OPENSEARCH_NOFILE_HARD:-65536} - soft: ${OPENSEARCH_NOFILE_SOFT:-65536} - volumes: - - ${DIFY_ROOT_PATH}/volumes/opensearch/data:/usr/share/opensearch/data - opensearch-dashboards: - container_name: opensearch-dashboards-dify - depends_on: - - opensearch - environment: - OPENSEARCH_HOSTS: '["https://opensearch:9200"]' - image: opensearchproject/opensearch-dashboards:latest - networks: - - opensearch-net - profiles: - - opensearch - volumes: - - ${DIFY_ROOT_PATH}/volumes/opensearch/opensearch_dashboards.yml:/usr/share/opensearch-dashboards/config/opensearch_dashboards.yml - oracle: - container_name: oracle-dify - environment: - ORACLE_CHARACTERSET: ${ORACLE_CHARACTERSET:-AL32UTF8} - ORACLE_PWD: ${ORACLE_PWD:-Dify123456} - image: container-registry.oracle.com/database/free:latest - profiles: - - oracle - restart: always - volumes: - - source: oradata - target: /opt/oracle/oradata - type: volume - - ${DIFY_ROOT_PATH}/startupscripts:/opt/oracle/scripts/startup - pgvecto-rs: - container_name: pgvecto-rs-dify - environment: - PGDATA: ${PGVECTOR_PGDATA:-/var/lib/postgresql/data/pgdata} - PGUSER: ${PGVECTOR_PGUSER:-postgres} - POSTGRES_DB: ${PGVECTOR_POSTGRES_DB:-dify} - POSTGRES_PASSWORD: ${PGVECTOR_POSTGRES_PASSWORD:-difyai123456} - healthcheck: - interval: 1s - retries: 30 - test: - - CMD - - pg_isready - timeout: 3s - image: tensorchord/pgvecto-rs:pg16-v0.3.0 - profiles: - - pgvecto-rs - restart: always - volumes: - - ${DIFY_ROOT_PATH}/volumes/pgvecto_rs/data:/var/lib/postgresql/data - pgvector: - container_name: pgvector-dify - environment: - PGDATA: ${PGVECTOR_PGDATA:-/var/lib/postgresql/data/pgdata} - PGUSER: ${PGVECTOR_PGUSER:-postgres} - POSTGRES_DB: ${PGVECTOR_POSTGRES_DB:-dify} - POSTGRES_PASSWORD: ${PGVECTOR_POSTGRES_PASSWORD:-difyai123456} - healthcheck: - interval: 1s - retries: 30 - test: - - CMD - - pg_isready - timeout: 3s - image: pgvector/pgvector:pg16 - profiles: - - pgvector - restart: always - volumes: - - ${DIFY_ROOT_PATH}/volumes/pgvector/data:/var/lib/postgresql/data - plugin_daemon: - container_name: plugin_daemon-dify - environment: - ACCESS_TOKEN_EXPIRE_MINUTES: ${ACCESS_TOKEN_EXPIRE_MINUTES:-60} - ALIYUN_OSS_ACCESS_KEY: ${ALIYUN_OSS_ACCESS_KEY:-your-access-key} - ALIYUN_OSS_AUTH_VERSION: ${ALIYUN_OSS_AUTH_VERSION:-v4} - ALIYUN_OSS_BUCKET_NAME: ${ALIYUN_OSS_BUCKET_NAME:-your-bucket-name} - ALIYUN_OSS_ENDPOINT: ${ALIYUN_OSS_ENDPOINT:-https://oss-ap-southeast-1-internal.aliyuncs.com} - ALIYUN_OSS_PATH: ${ALIYUN_OSS_PATH:-your-path} - ALIYUN_OSS_REGION: ${ALIYUN_OSS_REGION:-ap-southeast-1} - ALIYUN_OSS_SECRET_KEY: ${ALIYUN_OSS_SECRET_KEY:-your-secret-key} - ANALYTICDB_ACCOUNT: ${ANALYTICDB_ACCOUNT:-testaccount} - ANALYTICDB_HOST: ${ANALYTICDB_HOST:-gp-test.aliyuncs.com} - ANALYTICDB_INSTANCE_ID: ${ANALYTICDB_INSTANCE_ID:-gp-ab123456} - ANALYTICDB_KEY_ID: ${ANALYTICDB_KEY_ID:-your-ak} - ANALYTICDB_KEY_SECRET: ${ANALYTICDB_KEY_SECRET:-your-sk} - ANALYTICDB_MAX_CONNECTION: ${ANALYTICDB_MAX_CONNECTION:-5} - ANALYTICDB_MIN_CONNECTION: ${ANALYTICDB_MIN_CONNECTION:-1} - ANALYTICDB_NAMESPACE: ${ANALYTICDB_NAMESPACE:-dify} - ANALYTICDB_NAMESPACE_PASSWORD: ${ANALYTICDB_NAMESPACE_PASSWORD:-difypassword} - ANALYTICDB_PASSWORD: ${ANALYTICDB_PASSWORD:-testpassword} - ANALYTICDB_PORT: ${ANALYTICDB_PORT:-5432} - ANALYTICDB_REGION_ID: ${ANALYTICDB_REGION_ID:-cn-hangzhou} - API_SENTRY_DSN: ${API_SENTRY_DSN:-} - API_SENTRY_PROFILES_SAMPLE_RATE: ${API_SENTRY_PROFILES_SAMPLE_RATE:-1.0} - API_SENTRY_TRACES_SAMPLE_RATE: ${API_SENTRY_TRACES_SAMPLE_RATE:-1.0} - API_TOOL_DEFAULT_CONNECT_TIMEOUT: ${API_TOOL_DEFAULT_CONNECT_TIMEOUT:-10} - API_TOOL_DEFAULT_READ_TIMEOUT: ${API_TOOL_DEFAULT_READ_TIMEOUT:-60} - APP_API_URL: ${APP_API_URL:-} - APP_MAX_ACTIVE_REQUESTS: ${APP_MAX_ACTIVE_REQUESTS:-0} - APP_MAX_EXECUTION_TIME: ${APP_MAX_EXECUTION_TIME:-1200} - APP_WEB_URL: ${APP_WEB_URL:-} - AZURE_BLOB_ACCOUNT_KEY: ${AZURE_BLOB_ACCOUNT_KEY:-difyai} - AZURE_BLOB_ACCOUNT_NAME: ${AZURE_BLOB_ACCOUNT_NAME:-difyai} - AZURE_BLOB_ACCOUNT_URL: ${AZURE_BLOB_ACCOUNT_URL:-https://.blob.core.windows.net} - AZURE_BLOB_CONTAINER_NAME: ${AZURE_BLOB_CONTAINER_NAME:-difyai-container} - BAIDU_OBS_ACCESS_KEY: ${BAIDU_OBS_ACCESS_KEY:-your-access-key} - BAIDU_OBS_BUCKET_NAME: ${BAIDU_OBS_BUCKET_NAME:-your-bucket-name} - BAIDU_OBS_ENDPOINT: ${BAIDU_OBS_ENDPOINT:-your-server-url} - BAIDU_OBS_SECRET_KEY: ${BAIDU_OBS_SECRET_KEY:-your-secret-key} - BAIDU_VECTOR_DB_ACCOUNT: ${BAIDU_VECTOR_DB_ACCOUNT:-root} - BAIDU_VECTOR_DB_API_KEY: ${BAIDU_VECTOR_DB_API_KEY:-dify} - BAIDU_VECTOR_DB_CONNECTION_TIMEOUT_MS: ${BAIDU_VECTOR_DB_CONNECTION_TIMEOUT_MS:-30000} - BAIDU_VECTOR_DB_DATABASE: ${BAIDU_VECTOR_DB_DATABASE:-dify} - BAIDU_VECTOR_DB_ENDPOINT: ${BAIDU_VECTOR_DB_ENDPOINT:-http://127.0.0.1:5287} - BAIDU_VECTOR_DB_REPLICAS: ${BAIDU_VECTOR_DB_REPLICAS:-3} - BAIDU_VECTOR_DB_SHARD: ${BAIDU_VECTOR_DB_SHARD:-1} - BROKER_USE_SSL: ${BROKER_USE_SSL:-false} - CELERY_AUTO_SCALE: ${CELERY_AUTO_SCALE:-false} - CELERY_BROKER_URL: ${CELERY_BROKER_URL:-redis://:difyai123456@redis:6379/1} - CELERY_MAX_WORKERS: ${CELERY_MAX_WORKERS:-} - CELERY_MIN_WORKERS: ${CELERY_MIN_WORKERS:-} - CELERY_SENTINEL_MASTER_NAME: ${CELERY_SENTINEL_MASTER_NAME:-} - CELERY_SENTINEL_SOCKET_TIMEOUT: ${CELERY_SENTINEL_SOCKET_TIMEOUT:-0.1} - CELERY_USE_SENTINEL: ${CELERY_USE_SENTINEL:-false} - CELERY_WORKER_AMOUNT: ${CELERY_WORKER_AMOUNT:-} - CELERY_WORKER_CLASS: ${CELERY_WORKER_CLASS:-} - CERTBOT_DOMAIN: ${CERTBOT_DOMAIN:-your_domain.com} - CERTBOT_EMAIL: ${CERTBOT_EMAIL:-your_email@example.com} - CERTBOT_OPTIONS: ${CERTBOT_OPTIONS:-} - CHECK_UPDATE_URL: ${CHECK_UPDATE_URL:-https://updates.dify.ai} - CHROMA_AUTH_CREDENTIALS: ${CHROMA_AUTH_CREDENTIALS:-} - CHROMA_AUTH_PROVIDER: ${CHROMA_AUTH_PROVIDER:-chromadb.auth.token_authn.TokenAuthClientProvider} - CHROMA_DATABASE: ${CHROMA_DATABASE:-default_database} - CHROMA_HOST: ${CHROMA_HOST:-127.0.0.1} - CHROMA_IS_PERSISTENT: ${CHROMA_IS_PERSISTENT:-TRUE} - CHROMA_PORT: ${CHROMA_PORT:-8000} - CHROMA_SERVER_AUTHN_CREDENTIALS: ${CHROMA_SERVER_AUTHN_CREDENTIALS:-difyai123456} - CHROMA_SERVER_AUTHN_PROVIDER: ${CHROMA_SERVER_AUTHN_PROVIDER:-chromadb.auth.token_authn.TokenAuthenticationServerProvider} - CHROMA_TENANT: ${CHROMA_TENANT:-default_tenant} - CODE_EXECUTION_API_KEY: ${CODE_EXECUTION_API_KEY:-dify-sandbox} - CODE_EXECUTION_CONNECT_TIMEOUT: ${CODE_EXECUTION_CONNECT_TIMEOUT:-10} - CODE_EXECUTION_ENDPOINT: ${CODE_EXECUTION_ENDPOINT:-http://sandbox:8194} - CODE_EXECUTION_READ_TIMEOUT: ${CODE_EXECUTION_READ_TIMEOUT:-60} - CODE_EXECUTION_WRITE_TIMEOUT: ${CODE_EXECUTION_WRITE_TIMEOUT:-10} - CODE_GENERATION_MAX_TOKENS: ${CODE_GENERATION_MAX_TOKENS:-1024} - CODE_MAX_DEPTH: ${CODE_MAX_DEPTH:-5} - CODE_MAX_NUMBER: ${CODE_MAX_NUMBER:-9223372036854775807} - CODE_MAX_NUMBER_ARRAY_LENGTH: ${CODE_MAX_NUMBER_ARRAY_LENGTH:-1000} - CODE_MAX_OBJECT_ARRAY_LENGTH: ${CODE_MAX_OBJECT_ARRAY_LENGTH:-30} - CODE_MAX_PRECISION: ${CODE_MAX_PRECISION:-20} - CODE_MAX_STRING_ARRAY_LENGTH: ${CODE_MAX_STRING_ARRAY_LENGTH:-30} - CODE_MAX_STRING_LENGTH: ${CODE_MAX_STRING_LENGTH:-80000} - CODE_MIN_NUMBER: ${CODE_MIN_NUMBER:--9223372036854775808} - CONSOLE_API_URL: ${CONSOLE_API_URL:-} - CONSOLE_CORS_ALLOW_ORIGINS: ${CONSOLE_CORS_ALLOW_ORIGINS:-*} - CONSOLE_WEB_URL: ${CONSOLE_WEB_URL:-} - COUCHBASE_BUCKET_NAME: ${COUCHBASE_BUCKET_NAME:-Embeddings} - COUCHBASE_CONNECTION_STRING: ${COUCHBASE_CONNECTION_STRING:-couchbase://couchbase-server} - COUCHBASE_PASSWORD: ${COUCHBASE_PASSWORD:-password} - COUCHBASE_SCOPE_NAME: ${COUCHBASE_SCOPE_NAME:-_default} - COUCHBASE_USER: ${COUCHBASE_USER:-Administrator} - CREATE_TIDB_SERVICE_JOB_ENABLED: ${CREATE_TIDB_SERVICE_JOB_ENABLED:-false} - CSP_WHITELIST: ${CSP_WHITELIST:-} - DB_DATABASE: ${DB_PLUGIN_DATABASE:-dify_plugin} - DB_HOST: ${DB_HOST:-db} - DB_PASSWORD: ${DB_PASSWORD:-difyai123456} - DB_PLUGIN_DATABASE: ${DB_PLUGIN_DATABASE:-dify_plugin} - DB_PORT: ${DB_PORT:-5432} - DB_USERNAME: ${DB_USERNAME:-postgres} - DEBUG: ${DEBUG:-false} - DEPLOY_ENV: ${DEPLOY_ENV:-PRODUCTION} - DIFY_BIND_ADDRESS: ${DIFY_BIND_ADDRESS:-0.0.0.0} - DIFY_INNER_API_KEY: ${INNER_API_KEY_FOR_PLUGIN:-QaHbTe77CtuXmsfyhR7+vRjI/+XbV1AaFy691iy+kGDv2Jvy0/eAh8Y1} - DIFY_INNER_API_URL: ${PLUGIN_DIFY_INNER_API_URL:-http://api:5001} - DIFY_PORT: ${DIFY_PORT:-5001} - ELASTICSEARCH_HOST: ${ELASTICSEARCH_HOST:-0.0.0.0} - ELASTICSEARCH_PASSWORD: ${ELASTICSEARCH_PASSWORD:-elastic} - ELASTICSEARCH_PORT: ${ELASTICSEARCH_PORT:-9200} - ELASTICSEARCH_USERNAME: ${ELASTICSEARCH_USERNAME:-elastic} - ENDPOINT_URL_TEMPLATE: ${ENDPOINT_URL_TEMPLATE:-http://localhost/e/{hook_id}} - ETCD_AUTO_COMPACTION_MODE: ${ETCD_AUTO_COMPACTION_MODE:-revision} - ETCD_AUTO_COMPACTION_RETENTION: ${ETCD_AUTO_COMPACTION_RETENTION:-1000} - ETCD_ENDPOINTS: ${ETCD_ENDPOINTS:-etcd:2379} - ETCD_QUOTA_BACKEND_BYTES: ${ETCD_QUOTA_BACKEND_BYTES:-4294967296} - ETCD_SNAPSHOT_COUNT: ${ETCD_SNAPSHOT_COUNT:-50000} - ETL_TYPE: ${ETL_TYPE:-dify} - EXPOSE_NGINX_PORT: ${PANEL_APP_PORT_HTTP:-8080} - EXPOSE_NGINX_SSL_PORT: ${PANEL_APP_PORT_HTTPS:-8443} - EXPOSE_PLUGIN_DAEMON_PORT: ${EXPOSE_PLUGIN_DAEMON_PORT:-5002} - EXPOSE_PLUGIN_DEBUGGING_HOST: ${EXPOSE_PLUGIN_DEBUGGING_HOST:-localhost} - EXPOSE_PLUGIN_DEBUGGING_PORT: ${EXPOSE_PLUGIN_DEBUGGING_PORT:-5003} - FILES_ACCESS_TIMEOUT: ${FILES_ACCESS_TIMEOUT:-300} - FILES_URL: ${FILES_URL:-} - FLASK_DEBUG: ${FLASK_DEBUG:-false} - FORCE_VERIFYING_SIGNATURE: ${FORCE_VERIFYING_SIGNATURE:-true} - GOOGLE_STORAGE_BUCKET_NAME: ${GOOGLE_STORAGE_BUCKET_NAME:-your-bucket-name} - GOOGLE_STORAGE_SERVICE_ACCOUNT_JSON_BASE64: ${GOOGLE_STORAGE_SERVICE_ACCOUNT_JSON_BASE64:-} - GUNICORN_TIMEOUT: ${GUNICORN_TIMEOUT:-360} - HTTP_REQUEST_NODE_MAX_BINARY_SIZE: ${HTTP_REQUEST_NODE_MAX_BINARY_SIZE:-10485760} - HTTP_REQUEST_NODE_MAX_TEXT_SIZE: ${HTTP_REQUEST_NODE_MAX_TEXT_SIZE:-1048576} - HUAWEI_OBS_ACCESS_KEY: ${HUAWEI_OBS_ACCESS_KEY:-your-access-key} - HUAWEI_OBS_BUCKET_NAME: ${HUAWEI_OBS_BUCKET_NAME:-your-bucket-name} - HUAWEI_OBS_SECRET_KEY: ${HUAWEI_OBS_SECRET_KEY:-your-secret-key} - HUAWEI_OBS_SERVER: ${HUAWEI_OBS_SERVER:-your-server-url} - INDEXING_MAX_SEGMENTATION_TOKENS_LENGTH: ${INDEXING_MAX_SEGMENTATION_TOKENS_LENGTH:-4000} - INIT_PASSWORD: ${INIT_PASSWORD:-} - INVITE_EXPIRY_HOURS: ${INVITE_EXPIRY_HOURS:-72} - KIBANA_PORT: ${KIBANA_PORT:-5601} - LINDORM_PASSWORD: ${LINDORM_PASSWORD:-lindorm} - LINDORM_URL: ${LINDORM_URL:-http://lindorm:30070} - LINDORM_USERNAME: ${LINDORM_USERNAME:-lindorm} - LOG_DATEFORMAT: ${LOG_DATEFORMAT:-%Y-%m-%d %H:%M:%S} - LOG_FILE: ${LOG_FILE:-/app/logs/server.log} - LOG_FILE_BACKUP_COUNT: ${LOG_FILE_BACKUP_COUNT:-5} - LOG_FILE_MAX_SIZE: ${LOG_FILE_MAX_SIZE:-20} - LOG_LEVEL: ${LOG_LEVEL:-INFO} - LOG_TZ: ${LOG_TZ:-UTC} - MAIL_DEFAULT_SEND_FROM: ${MAIL_DEFAULT_SEND_FROM:-} - MAIL_TYPE: ${MAIL_TYPE:-resend} - MARKETPLACE_API_URL: ${MARKETPLACE_API_URL:-https://marketplace.dify.ai} - MARKETPLACE_ENABLED: ${MARKETPLACE_ENABLED:-true} - MAX_PLUGIN_PACKAGE_SIZE: ${PLUGIN_MAX_PACKAGE_SIZE:-52428800} - MAX_SUBMIT_COUNT: ${MAX_SUBMIT_COUNT:-100} - MAX_VARIABLE_SIZE: ${MAX_VARIABLE_SIZE:-204800} - MIGRATION_ENABLED: ${MIGRATION_ENABLED:-true} - MILVUS_AUTHORIZATION_ENABLED: ${MILVUS_AUTHORIZATION_ENABLED:-true} - MILVUS_ENABLE_HYBRID_SEARCH: ${MILVUS_ENABLE_HYBRID_SEARCH:-False} - MILVUS_PASSWORD: ${MILVUS_PASSWORD:-Milvus} - MILVUS_TOKEN: ${MILVUS_TOKEN:-} - MILVUS_URI: ${MILVUS_URI:-http://127.0.0.1:19530} - MILVUS_USER: ${MILVUS_USER:-root} - MINIO_ACCESS_KEY: ${MINIO_ACCESS_KEY:-minioadmin} - MINIO_ADDRESS: ${MINIO_ADDRESS:-minio:9000} - MINIO_SECRET_KEY: ${MINIO_SECRET_KEY:-minioadmin} - MULTIMODAL_SEND_FORMAT: ${MULTIMODAL_SEND_FORMAT:-base64} - MYSCALE_DATABASE: ${MYSCALE_DATABASE:-dify} - MYSCALE_FTS_PARAMS: ${MYSCALE_FTS_PARAMS:-} - MYSCALE_HOST: ${MYSCALE_HOST:-myscale} - MYSCALE_PASSWORD: ${MYSCALE_PASSWORD:-} - MYSCALE_PORT: ${MYSCALE_PORT:-8123} - MYSCALE_USER: ${MYSCALE_USER:-default} - NGINX_CLIENT_MAX_BODY_SIZE: ${NGINX_CLIENT_MAX_BODY_SIZE:-15M} - NGINX_ENABLE_CERTBOT_CHALLENGE: ${NGINX_ENABLE_CERTBOT_CHALLENGE:-false} - NGINX_HTTPS_ENABLED: ${NGINX_HTTPS_ENABLED:-false} - NGINX_KEEPALIVE_TIMEOUT: ${NGINX_KEEPALIVE_TIMEOUT:-65} - NGINX_PORT: ${NGINX_PORT:-80} - NGINX_PROXY_READ_TIMEOUT: ${NGINX_PROXY_READ_TIMEOUT:-3600s} - NGINX_PROXY_SEND_TIMEOUT: ${NGINX_PROXY_SEND_TIMEOUT:-3600s} - NGINX_SERVER_NAME: ${NGINX_SERVER_NAME:-_} - NGINX_SSL_CERT_FILENAME: ${NGINX_SSL_CERT_FILENAME:-dify.crt} - NGINX_SSL_CERT_KEY_FILENAME: ${NGINX_SSL_CERT_KEY_FILENAME:-dify.key} - NGINX_SSL_PORT: ${NGINX_SSL_PORT:-443} - NGINX_SSL_PROTOCOLS: ${NGINX_SSL_PROTOCOLS:-TLSv1.1 TLSv1.2 TLSv1.3} - NGINX_WORKER_PROCESSES: ${NGINX_WORKER_PROCESSES:-auto} - NOTION_CLIENT_ID: ${NOTION_CLIENT_ID:-} - NOTION_CLIENT_SECRET: ${NOTION_CLIENT_SECRET:-} - NOTION_INTEGRATION_TYPE: ${NOTION_INTEGRATION_TYPE:-public} - NOTION_INTERNAL_SECRET: ${NOTION_INTERNAL_SECRET:-} - OCEANBASE_CLUSTER_NAME: ${OCEANBASE_CLUSTER_NAME:-difyai} - OCEANBASE_MEMORY_LIMIT: ${OCEANBASE_MEMORY_LIMIT:-6G} - OCEANBASE_VECTOR_DATABASE: ${OCEANBASE_VECTOR_DATABASE:-test} - OCEANBASE_VECTOR_HOST: ${OCEANBASE_VECTOR_HOST:-oceanbase} - OCEANBASE_VECTOR_PASSWORD: ${OCEANBASE_VECTOR_PASSWORD:-difyai123456} - OCEANBASE_VECTOR_PORT: ${OCEANBASE_VECTOR_PORT:-2881} - OCEANBASE_VECTOR_USER: ${OCEANBASE_VECTOR_USER:-root@test} - OCI_ACCESS_KEY: ${OCI_ACCESS_KEY:-your-access-key} - OCI_BUCKET_NAME: ${OCI_BUCKET_NAME:-your-bucket-name} - OCI_ENDPOINT: ${OCI_ENDPOINT:-https://objectstorage.us-ashburn-1.oraclecloud.com} - OCI_REGION: ${OCI_REGION:-us-ashburn-1} - OCI_SECRET_KEY: ${OCI_SECRET_KEY:-your-secret-key} - OPENAI_API_BASE: ${OPENAI_API_BASE:-https://api.openai.com/v1} - OPENDAL_FS_ROOT: ${OPENDAL_FS_ROOT:-storage} - OPENDAL_SCHEME: ${OPENDAL_SCHEME:-fs} - OPENSEARCH_BOOTSTRAP_MEMORY_LOCK: ${OPENSEARCH_BOOTSTRAP_MEMORY_LOCK:-true} - OPENSEARCH_DISCOVERY_TYPE: ${OPENSEARCH_DISCOVERY_TYPE:-single-node} - OPENSEARCH_HOST: ${OPENSEARCH_HOST:-opensearch} - OPENSEARCH_INITIAL_ADMIN_PASSWORD: ${OPENSEARCH_INITIAL_ADMIN_PASSWORD:-Qazwsxedc!@#123} - OPENSEARCH_JAVA_OPTS_MAX: ${OPENSEARCH_JAVA_OPTS_MAX:-1024m} - OPENSEARCH_JAVA_OPTS_MIN: ${OPENSEARCH_JAVA_OPTS_MIN:-512m} - OPENSEARCH_MEMLOCK_HARD: ${OPENSEARCH_MEMLOCK_HARD:--1} - OPENSEARCH_MEMLOCK_SOFT: ${OPENSEARCH_MEMLOCK_SOFT:--1} - OPENSEARCH_NOFILE_HARD: ${OPENSEARCH_NOFILE_HARD:-65536} - OPENSEARCH_NOFILE_SOFT: ${OPENSEARCH_NOFILE_SOFT:-65536} - OPENSEARCH_PASSWORD: ${OPENSEARCH_PASSWORD:-admin} - OPENSEARCH_PORT: ${OPENSEARCH_PORT:-9200} - OPENSEARCH_SECURE: ${OPENSEARCH_SECURE:-true} - OPENSEARCH_USER: ${OPENSEARCH_USER:-admin} - ORACLE_CHARACTERSET: ${ORACLE_CHARACTERSET:-AL32UTF8} - ORACLE_DATABASE: ${ORACLE_DATABASE:-FREEPDB1} - ORACLE_HOST: ${ORACLE_HOST:-oracle} - ORACLE_PASSWORD: ${ORACLE_PASSWORD:-dify} - ORACLE_PORT: ${ORACLE_PORT:-1521} - ORACLE_PWD: ${ORACLE_PWD:-Dify123456} - ORACLE_USER: ${ORACLE_USER:-dify} - PGDATA: ${PGDATA:-/var/lib/postgresql/data/pgdata} - PGUSER: ${PGUSER:-${DB_USERNAME}} - PGVECTOR_DATABASE: ${PGVECTOR_DATABASE:-dify} - PGVECTOR_HOST: ${PGVECTOR_HOST:-pgvector} - PGVECTOR_MAX_CONNECTION: ${PGVECTOR_MAX_CONNECTION:-5} - PGVECTOR_MIN_CONNECTION: ${PGVECTOR_MIN_CONNECTION:-1} - PGVECTOR_PASSWORD: ${PGVECTOR_PASSWORD:-difyai123456} - PGVECTOR_PGDATA: ${PGVECTOR_PGDATA:-/var/lib/postgresql/data/pgdata} - PGVECTOR_PGUSER: ${PGVECTOR_PGUSER:-postgres} - PGVECTOR_PORT: ${PGVECTOR_PORT:-5432} - PGVECTOR_POSTGRES_DB: ${PGVECTOR_POSTGRES_DB:-dify} - PGVECTOR_POSTGRES_PASSWORD: ${PGVECTOR_POSTGRES_PASSWORD:-difyai123456} - PGVECTOR_USER: ${PGVECTOR_USER:-postgres} - PGVECTO_RS_DATABASE: ${PGVECTO_RS_DATABASE:-dify} - PGVECTO_RS_HOST: ${PGVECTO_RS_HOST:-pgvecto-rs} - PGVECTO_RS_PASSWORD: ${PGVECTO_RS_PASSWORD:-difyai123456} - PGVECTO_RS_PORT: ${PGVECTO_RS_PORT:-5432} - PGVECTO_RS_USER: ${PGVECTO_RS_USER:-postgres} - PLUGIN_DAEMON_KEY: ${PLUGIN_DAEMON_KEY:-lYkiYYT6owG+71oLerGzA7GXCgOT++6ovaezWAjpCjf+Sjc3ZtU+qUEi} - PLUGIN_DAEMON_PORT: ${PLUGIN_DAEMON_PORT:-5002} - PLUGIN_DAEMON_URL: ${PLUGIN_DAEMON_URL:-http://plugin_daemon:5002} - PLUGIN_DEBUGGING_HOST: ${PLUGIN_DEBUGGING_HOST:-0.0.0.0} - PLUGIN_DEBUGGING_PORT: ${PLUGIN_DEBUGGING_PORT:-5003} - PLUGIN_DIFY_INNER_API_KEY: ${PLUGIN_DIFY_INNER_API_KEY:-QaHbTe77CtuXmsfyhR7+vRjI/+XbV1AaFy691iy+kGDv2Jvy0/eAh8Y1} - PLUGIN_DIFY_INNER_API_URL: ${PLUGIN_DIFY_INNER_API_URL:-http://api:5001} - PLUGIN_MAX_PACKAGE_SIZE: ${PLUGIN_MAX_PACKAGE_SIZE:-52428800} - PLUGIN_PPROF_ENABLED: ${PLUGIN_PPROF_ENABLED:-false} - PLUGIN_REMOTE_INSTALLING_HOST: ${PLUGIN_REMOTE_INSTALL_HOST:-0.0.0.0} - PLUGIN_REMOTE_INSTALLING_PORT: ${PLUGIN_REMOTE_INSTALL_PORT:-5003} - PLUGIN_WORKING_PATH: ${PLUGIN_WORKING_PATH:-/app/storage/cwd} - POSITION_PROVIDER_EXCLUDES: ${POSITION_PROVIDER_EXCLUDES:-} - POSITION_PROVIDER_INCLUDES: ${POSITION_PROVIDER_INCLUDES:-} - POSITION_PROVIDER_PINS: ${POSITION_PROVIDER_PINS:-} - POSITION_TOOL_EXCLUDES: ${POSITION_TOOL_EXCLUDES:-} - POSITION_TOOL_INCLUDES: ${POSITION_TOOL_INCLUDES:-} - POSITION_TOOL_PINS: ${POSITION_TOOL_PINS:-} - POSTGRES_DB: ${POSTGRES_DB:-${DB_DATABASE}} - POSTGRES_EFFECTIVE_CACHE_SIZE: ${POSTGRES_EFFECTIVE_CACHE_SIZE:-4096MB} - POSTGRES_MAINTENANCE_WORK_MEM: ${POSTGRES_MAINTENANCE_WORK_MEM:-64MB} - POSTGRES_MAX_CONNECTIONS: ${POSTGRES_MAX_CONNECTIONS:-100} - POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-${DB_PASSWORD}} - POSTGRES_SHARED_BUFFERS: ${POSTGRES_SHARED_BUFFERS:-128MB} - POSTGRES_WORK_MEM: ${POSTGRES_WORK_MEM:-4MB} - PPROF_ENABLED: ${PLUGIN_PPROF_ENABLED:-false} - PROMPT_GENERATION_MAX_TOKENS: ${PROMPT_GENERATION_MAX_TOKENS:-512} - QDRANT_API_KEY: ${QDRANT_API_KEY:-difyai123456} - QDRANT_CLIENT_TIMEOUT: ${QDRANT_CLIENT_TIMEOUT:-20} - QDRANT_GRPC_ENABLED: ${QDRANT_GRPC_ENABLED:-false} - QDRANT_GRPC_PORT: ${QDRANT_GRPC_PORT:-6334} - QDRANT_URL: ${QDRANT_URL:-http://qdrant:6333} - REDIS_CLUSTERS: ${REDIS_CLUSTERS:-} - REDIS_CLUSTERS_PASSWORD: ${REDIS_CLUSTERS_PASSWORD:-} - REDIS_DB: ${REDIS_DB:-0} - REDIS_HOST: ${REDIS_HOST:-redis} - REDIS_PASSWORD: ${REDIS_PASSWORD:-difyai123456} - REDIS_PORT: ${REDIS_PORT:-6379} - REDIS_SENTINELS: ${REDIS_SENTINELS:-} - REDIS_SENTINEL_PASSWORD: ${REDIS_SENTINEL_PASSWORD:-} - REDIS_SENTINEL_SERVICE_NAME: ${REDIS_SENTINEL_SERVICE_NAME:-} - REDIS_SENTINEL_SOCKET_TIMEOUT: ${REDIS_SENTINEL_SOCKET_TIMEOUT:-0.1} - REDIS_SENTINEL_USERNAME: ${REDIS_SENTINEL_USERNAME:-} - REDIS_USERNAME: ${REDIS_USERNAME:-} - REDIS_USE_CLUSTERS: ${REDIS_USE_CLUSTERS:-false} - REDIS_USE_SENTINEL: ${REDIS_USE_SENTINEL:-false} - REDIS_USE_SSL: ${REDIS_USE_SSL:-false} - REFRESH_TOKEN_EXPIRE_DAYS: ${REFRESH_TOKEN_EXPIRE_DAYS:-30} - RELYT_DATABASE: ${RELYT_DATABASE:-postgres} - RELYT_HOST: ${RELYT_HOST:-db} - RELYT_PASSWORD: ${RELYT_PASSWORD:-difyai123456} - RELYT_PORT: ${RELYT_PORT:-5432} - RELYT_USER: ${RELYT_USER:-postgres} - RESEND_API_KEY: ${RESEND_API_KEY:-your-resend-api-key} - RESEND_API_URL: ${RESEND_API_URL:-https://api.resend.com} - RESET_PASSWORD_TOKEN_EXPIRY_MINUTES: ${RESET_PASSWORD_TOKEN_EXPIRY_MINUTES:-5} - S3_ACCESS_KEY: ${S3_ACCESS_KEY:-} - S3_BUCKET_NAME: ${S3_BUCKET_NAME:-difyai} - S3_ENDPOINT: ${S3_ENDPOINT:-} - S3_REGION: ${S3_REGION:-us-east-1} - S3_SECRET_KEY: ${S3_SECRET_KEY:-} - S3_USE_AWS_MANAGED_IAM: ${S3_USE_AWS_MANAGED_IAM:-false} - SANDBOX_API_KEY: ${SANDBOX_API_KEY:-dify-sandbox} - SANDBOX_ENABLE_NETWORK: ${SANDBOX_ENABLE_NETWORK:-true} - SANDBOX_GIN_MODE: ${SANDBOX_GIN_MODE:-release} - SANDBOX_HTTPS_PROXY: ${SANDBOX_HTTPS_PROXY:-http://ssrf_proxy:3128} - SANDBOX_HTTP_PROXY: ${SANDBOX_HTTP_PROXY:-http://ssrf_proxy:3128} - SANDBOX_PORT: ${SANDBOX_PORT:-8194} - SANDBOX_WORKER_TIMEOUT: ${SANDBOX_WORKER_TIMEOUT:-15} - SCARF_NO_ANALYTICS: ${SCARF_NO_ANALYTICS:-true} - SECRET_KEY: ${SECRET_KEY:-sk-9f73s3ljTXVcMT3Blb3ljTqtsKiGHXVcMT3BlbkFJLK7U} - SENTRY_DSN: ${SENTRY_DSN:-} - SERVER_KEY: ${PLUGIN_DAEMON_KEY:-lYkiYYT6owG+71oLerGzA7GXCgOT++6ovaezWAjpCjf+Sjc3ZtU+qUEi} - SERVER_PORT: ${PLUGIN_DAEMON_PORT:-5002} - SERVER_WORKER_AMOUNT: ${SERVER_WORKER_AMOUNT:-1} - SERVER_WORKER_CLASS: ${SERVER_WORKER_CLASS:-gevent} - SERVER_WORKER_CONNECTIONS: ${SERVER_WORKER_CONNECTIONS:-10} - SERVICE_API_URL: ${SERVICE_API_URL:-} - SMTP_OPPORTUNISTIC_TLS: ${SMTP_OPPORTUNISTIC_TLS:-false} - SMTP_PASSWORD: ${SMTP_PASSWORD:-} - SMTP_PORT: ${SMTP_PORT:-465} - SMTP_SERVER: ${SMTP_SERVER:-} - SMTP_USERNAME: ${SMTP_USERNAME:-} - SMTP_USE_TLS: ${SMTP_USE_TLS:-true} - SQLALCHEMY_ECHO: ${SQLALCHEMY_ECHO:-false} - SQLALCHEMY_POOL_RECYCLE: ${SQLALCHEMY_POOL_RECYCLE:-3600} - SQLALCHEMY_POOL_SIZE: ${SQLALCHEMY_POOL_SIZE:-30} - SSRF_COREDUMP_DIR: ${SSRF_COREDUMP_DIR:-/var/spool/squid} - SSRF_DEFAULT_CONNECT_TIME_OUT: ${SSRF_DEFAULT_CONNECT_TIME_OUT:-5} - SSRF_DEFAULT_READ_TIME_OUT: ${SSRF_DEFAULT_READ_TIME_OUT:-5} - SSRF_DEFAULT_TIME_OUT: ${SSRF_DEFAULT_TIME_OUT:-5} - SSRF_DEFAULT_WRITE_TIME_OUT: ${SSRF_DEFAULT_WRITE_TIME_OUT:-5} - SSRF_HTTP_PORT: ${SSRF_HTTP_PORT:-3128} - SSRF_PROXY_HTTPS_URL: ${SSRF_PROXY_HTTPS_URL:-http://ssrf_proxy:3128} - SSRF_PROXY_HTTP_URL: ${SSRF_PROXY_HTTP_URL:-http://ssrf_proxy:3128} - SSRF_REVERSE_PROXY_PORT: ${SSRF_REVERSE_PROXY_PORT:-8194} - SSRF_SANDBOX_HOST: ${SSRF_SANDBOX_HOST:-sandbox} - STORAGE_TYPE: ${STORAGE_TYPE:-opendal} - SUPABASE_API_KEY: ${SUPABASE_API_KEY:-your-access-key} - SUPABASE_BUCKET_NAME: ${SUPABASE_BUCKET_NAME:-your-bucket-name} - SUPABASE_URL: ${SUPABASE_URL:-your-server-url} - TEMPLATE_TRANSFORM_MAX_LENGTH: ${TEMPLATE_TRANSFORM_MAX_LENGTH:-80000} - TENCENT_COS_BUCKET_NAME: ${TENCENT_COS_BUCKET_NAME:-your-bucket-name} - TENCENT_COS_REGION: ${TENCENT_COS_REGION:-your-region} - TENCENT_COS_SCHEME: ${TENCENT_COS_SCHEME:-your-scheme} - TENCENT_COS_SECRET_ID: ${TENCENT_COS_SECRET_ID:-your-secret-id} - TENCENT_COS_SECRET_KEY: ${TENCENT_COS_SECRET_KEY:-your-secret-key} - TENCENT_VECTOR_DB_API_KEY: ${TENCENT_VECTOR_DB_API_KEY:-dify} - TENCENT_VECTOR_DB_DATABASE: ${TENCENT_VECTOR_DB_DATABASE:-dify} - TENCENT_VECTOR_DB_REPLICAS: ${TENCENT_VECTOR_DB_REPLICAS:-2} - TENCENT_VECTOR_DB_SHARD: ${TENCENT_VECTOR_DB_SHARD:-1} - TENCENT_VECTOR_DB_TIMEOUT: ${TENCENT_VECTOR_DB_TIMEOUT:-30} - TENCENT_VECTOR_DB_URL: ${TENCENT_VECTOR_DB_URL:-http://127.0.0.1} - TENCENT_VECTOR_DB_USERNAME: ${TENCENT_VECTOR_DB_USERNAME:-dify} - TEXT_GENERATION_TIMEOUT_MS: ${TEXT_GENERATION_TIMEOUT_MS:-60000} - TIDB_API_URL: ${TIDB_API_URL:-http://127.0.0.1} - TIDB_IAM_API_URL: ${TIDB_IAM_API_URL:-http://127.0.0.1} - TIDB_ON_QDRANT_API_KEY: ${TIDB_ON_QDRANT_API_KEY:-dify} - TIDB_ON_QDRANT_CLIENT_TIMEOUT: ${TIDB_ON_QDRANT_CLIENT_TIMEOUT:-20} - TIDB_ON_QDRANT_GRPC_ENABLED: ${TIDB_ON_QDRANT_GRPC_ENABLED:-false} - TIDB_ON_QDRANT_GRPC_PORT: ${TIDB_ON_QDRANT_GRPC_PORT:-6334} - TIDB_ON_QDRANT_URL: ${TIDB_ON_QDRANT_URL:-http://127.0.0.1} - TIDB_PRIVATE_KEY: ${TIDB_PRIVATE_KEY:-dify} - TIDB_PROJECT_ID: ${TIDB_PROJECT_ID:-dify} - TIDB_PUBLIC_KEY: ${TIDB_PUBLIC_KEY:-dify} - TIDB_REGION: ${TIDB_REGION:-regions/aws-us-east-1} - TIDB_SPEND_LIMIT: ${TIDB_SPEND_LIMIT:-100} - TIDB_VECTOR_DATABASE: ${TIDB_VECTOR_DATABASE:-dify} - TIDB_VECTOR_HOST: ${TIDB_VECTOR_HOST:-tidb} - TIDB_VECTOR_PASSWORD: ${TIDB_VECTOR_PASSWORD:-} - TIDB_VECTOR_PORT: ${TIDB_VECTOR_PORT:-4000} - TIDB_VECTOR_USER: ${TIDB_VECTOR_USER:-} - TOP_K_MAX_VALUE: ${TOP_K_MAX_VALUE:-10} - UNSTRUCTURED_API_KEY: ${UNSTRUCTURED_API_KEY:-} - UNSTRUCTURED_API_URL: ${UNSTRUCTURED_API_URL:-} - UPLOAD_AUDIO_FILE_SIZE_LIMIT: ${UPLOAD_AUDIO_FILE_SIZE_LIMIT:-50} - UPLOAD_FILE_BATCH_LIMIT: ${UPLOAD_FILE_BATCH_LIMIT:-5} - UPLOAD_FILE_SIZE_LIMIT: ${UPLOAD_FILE_SIZE_LIMIT:-15} - UPLOAD_IMAGE_FILE_SIZE_LIMIT: ${UPLOAD_IMAGE_FILE_SIZE_LIMIT:-10} - UPLOAD_VIDEO_FILE_SIZE_LIMIT: ${UPLOAD_VIDEO_FILE_SIZE_LIMIT:-100} - UPSTASH_VECTOR_TOKEN: ${UPSTASH_VECTOR_TOKEN:-dify} - UPSTASH_VECTOR_URL: ${UPSTASH_VECTOR_URL:-https://xxx-vector.upstash.io} - VECTOR_STORE: ${VECTOR_STORE:-weaviate} - VIKINGDB_ACCESS_KEY: ${VIKINGDB_ACCESS_KEY:-your-ak} - VIKINGDB_CONNECTION_TIMEOUT: ${VIKINGDB_CONNECTION_TIMEOUT:-30} - VIKINGDB_HOST: ${VIKINGDB_HOST:-api-vikingdb.xxx.volces.com} - VIKINGDB_REGION: ${VIKINGDB_REGION:-cn-shanghai} - VIKINGDB_SCHEMA: ${VIKINGDB_SCHEMA:-http} - VIKINGDB_SECRET_KEY: ${VIKINGDB_SECRET_KEY:-your-sk} - VIKINGDB_SOCKET_TIMEOUT: ${VIKINGDB_SOCKET_TIMEOUT:-30} - VOLCENGINE_TOS_ACCESS_KEY: ${VOLCENGINE_TOS_ACCESS_KEY:-your-access-key} - VOLCENGINE_TOS_BUCKET_NAME: ${VOLCENGINE_TOS_BUCKET_NAME:-your-bucket-name} - VOLCENGINE_TOS_ENDPOINT: ${VOLCENGINE_TOS_ENDPOINT:-your-server-url} - VOLCENGINE_TOS_REGION: ${VOLCENGINE_TOS_REGION:-your-region} - VOLCENGINE_TOS_SECRET_KEY: ${VOLCENGINE_TOS_SECRET_KEY:-your-secret-key} - WEAVIATE_API_KEY: ${WEAVIATE_API_KEY:-WVF5YThaHlkYwhGUSmCRgsX3tD5ngdN8pkih} - WEAVIATE_AUTHENTICATION_ANONYMOUS_ACCESS_ENABLED: ${WEAVIATE_AUTHENTICATION_ANONYMOUS_ACCESS_ENABLED:-true} - WEAVIATE_AUTHENTICATION_APIKEY_ALLOWED_KEYS: ${WEAVIATE_AUTHENTICATION_APIKEY_ALLOWED_KEYS:-WVF5YThaHlkYwhGUSmCRgsX3tD5ngdN8pkih} - WEAVIATE_AUTHENTICATION_APIKEY_ENABLED: ${WEAVIATE_AUTHENTICATION_APIKEY_ENABLED:-true} - WEAVIATE_AUTHENTICATION_APIKEY_USERS: ${WEAVIATE_AUTHENTICATION_APIKEY_USERS:-hello@dify.ai} - WEAVIATE_AUTHORIZATION_ADMINLIST_ENABLED: ${WEAVIATE_AUTHORIZATION_ADMINLIST_ENABLED:-true} - WEAVIATE_AUTHORIZATION_ADMINLIST_USERS: ${WEAVIATE_AUTHORIZATION_ADMINLIST_USERS:-hello@dify.ai} - WEAVIATE_CLUSTER_HOSTNAME: ${WEAVIATE_CLUSTER_HOSTNAME:-node1} - WEAVIATE_DEFAULT_VECTORIZER_MODULE: ${WEAVIATE_DEFAULT_VECTORIZER_MODULE:-none} - WEAVIATE_ENDPOINT: ${WEAVIATE_ENDPOINT:-http://weaviate:8080} - WEAVIATE_PERSISTENCE_DATA_PATH: ${WEAVIATE_PERSISTENCE_DATA_PATH:-/var/lib/weaviate} - WEAVIATE_QUERY_DEFAULTS_LIMIT: ${WEAVIATE_QUERY_DEFAULTS_LIMIT:-25} - WEB_API_CORS_ALLOW_ORIGINS: ${WEB_API_CORS_ALLOW_ORIGINS:-*} - WEB_SENTRY_DSN: ${WEB_SENTRY_DSN:-} - WORKFLOW_CALL_MAX_DEPTH: ${WORKFLOW_CALL_MAX_DEPTH:-5} - WORKFLOW_FILE_UPLOAD_LIMIT: ${WORKFLOW_FILE_UPLOAD_LIMIT:-10} - WORKFLOW_MAX_EXECUTION_STEPS: ${WORKFLOW_MAX_EXECUTION_STEPS:-500} - WORKFLOW_MAX_EXECUTION_TIME: ${WORKFLOW_MAX_EXECUTION_TIME:-1200} - WORKFLOW_PARALLEL_DEPTH_LIMIT: ${WORKFLOW_PARALLEL_DEPTH_LIMIT:-3} - image: langgenius/dify-plugin-daemon:0.0.3-local - ports: - - ${EXPOSE_PLUGIN_DEBUGGING_PORT:-5003}:${PLUGIN_DEBUGGING_PORT:-5003} - restart: always - volumes: - - ${DIFY_ROOT_PATH}/volumes/plugin_daemon:/app/storage - qdrant: - container_name: qdrant-dify - environment: - QDRANT_API_KEY: ${QDRANT_API_KEY:-difyai123456} - image: langgenius/qdrant:v1.7.3 - profiles: - - qdrant - restart: always - volumes: - - ${DIFY_ROOT_PATH}/volumes/qdrant:/qdrant/storage - redis: - command: redis-server --requirepass ${REDIS_PASSWORD:-difyai123456} - container_name: redis-dify - environment: - REDISCLI_AUTH: ${REDIS_PASSWORD:-difyai123456} - healthcheck: - test: - - CMD - - redis-cli - - ping - image: redis:6-alpine - restart: always - volumes: - - ${DIFY_ROOT_PATH}/volumes/redis/data:/data - sandbox: - container_name: sandbox-dify - environment: - API_KEY: ${SANDBOX_API_KEY:-dify-sandbox} - ENABLE_NETWORK: ${SANDBOX_ENABLE_NETWORK:-true} - GIN_MODE: ${SANDBOX_GIN_MODE:-release} - HTTPS_PROXY: ${SANDBOX_HTTPS_PROXY:-http://ssrf_proxy:3128} - HTTP_PROXY: ${SANDBOX_HTTP_PROXY:-http://ssrf_proxy:3128} - SANDBOX_PORT: ${SANDBOX_PORT:-8194} - WORKER_TIMEOUT: ${SANDBOX_WORKER_TIMEOUT:-15} - healthcheck: - test: - - CMD - - curl - - -f - - http://localhost:8194/health - image: langgenius/dify-sandbox:0.2.10 - networks: - - ssrf_proxy_network - restart: always - volumes: - - ${DIFY_ROOT_PATH}/volumes/sandbox/dependencies:/dependencies - - ${DIFY_ROOT_PATH}/volumes/sandbox/conf:/conf - ssrf_proxy: - container_name: ssrf_proxy-dify - entrypoint: - - sh - - -c - - "cp /docker-entrypoint-mount.sh /docker-entrypoint.sh && sed -i 's/\r$$//' /docker-entrypoint.sh\ - \ && chmod +x /docker-entrypoint.sh && /docker-entrypoint.sh" - environment: - COREDUMP_DIR: ${SSRF_COREDUMP_DIR:-/var/spool/squid} - HTTP_PORT: ${SSRF_HTTP_PORT:-3128} - REVERSE_PROXY_PORT: ${SSRF_REVERSE_PROXY_PORT:-8194} - SANDBOX_HOST: ${SSRF_SANDBOX_HOST:-sandbox} - SANDBOX_PORT: ${SANDBOX_PORT:-8194} - image: ubuntu/squid:latest - networks: - - ssrf_proxy_network - - default - restart: always - volumes: - - ${DIFY_ROOT_PATH}/ssrf_proxy/squid.conf.template:/etc/squid/squid.conf.template - - ${DIFY_ROOT_PATH}/ssrf_proxy/docker-entrypoint.sh:/docker-entrypoint-mount.sh - unstructured: - container_name: unstructured-dify - image: downloads.unstructured.io/unstructured-io/unstructured-api:latest - profiles: - - unstructured - restart: always - volumes: - - ${DIFY_ROOT_PATH}/volumes/unstructured:/app/data - weaviate: - container_name: weaviate-dify - environment: - AUTHENTICATION_ANONYMOUS_ACCESS_ENABLED: ${WEAVIATE_AUTHENTICATION_ANONYMOUS_ACCESS_ENABLED:-false} - AUTHENTICATION_APIKEY_ALLOWED_KEYS: ${WEAVIATE_AUTHENTICATION_APIKEY_ALLOWED_KEYS:-WVF5YThaHlkYwhGUSmCRgsX3tD5ngdN8pkih} - AUTHENTICATION_APIKEY_ENABLED: ${WEAVIATE_AUTHENTICATION_APIKEY_ENABLED:-true} - AUTHENTICATION_APIKEY_USERS: ${WEAVIATE_AUTHENTICATION_APIKEY_USERS:-hello@dify.ai} - AUTHORIZATION_ADMINLIST_ENABLED: ${WEAVIATE_AUTHORIZATION_ADMINLIST_ENABLED:-true} - AUTHORIZATION_ADMINLIST_USERS: ${WEAVIATE_AUTHORIZATION_ADMINLIST_USERS:-hello@dify.ai} - CLUSTER_HOSTNAME: ${WEAVIATE_CLUSTER_HOSTNAME:-node1} - DEFAULT_VECTORIZER_MODULE: ${WEAVIATE_DEFAULT_VECTORIZER_MODULE:-none} - PERSISTENCE_DATA_PATH: ${WEAVIATE_PERSISTENCE_DATA_PATH:-/var/lib/weaviate} - QUERY_DEFAULTS_LIMIT: ${WEAVIATE_QUERY_DEFAULTS_LIMIT:-25} - image: semitechnologies/weaviate:1.19.0 - profiles: - - '' - - weaviate - restart: always - volumes: - - ${DIFY_ROOT_PATH}/volumes/weaviate:/var/lib/weaviate - web: - container_name: dify - environment: - APP_API_URL: ${APP_API_URL:-} - CONSOLE_API_URL: ${CONSOLE_API_URL:-} - CSP_WHITELIST: ${CSP_WHITELIST:-} - INDEXING_MAX_SEGMENTATION_TOKENS_LENGTH: ${INDEXING_MAX_SEGMENTATION_TOKENS_LENGTH:-} - MARKETPLACE_API_URL: ${MARKETPLACE_API_URL:-https://marketplace.dify.ai} - MARKETPLACE_URL: ${MARKETPLACE_URL:-https://marketplace.dify.ai} - NEXT_TELEMETRY_DISABLED: ${NEXT_TELEMETRY_DISABLED:-0} - SENTRY_DSN: ${WEB_SENTRY_DSN:-} - TEXT_GENERATION_TIMEOUT_MS: ${TEXT_GENERATION_TIMEOUT_MS:-60000} - TOP_K_MAX_VALUE: ${TOP_K_MAX_VALUE:-} - image: langgenius/dify-web:1.0.0 - restart: always - worker: - container_name: worker-dify - depends_on: - - db - - redis - environment: - ACCESS_TOKEN_EXPIRE_MINUTES: ${ACCESS_TOKEN_EXPIRE_MINUTES:-60} - ALIYUN_OSS_ACCESS_KEY: ${ALIYUN_OSS_ACCESS_KEY:-your-access-key} - ALIYUN_OSS_AUTH_VERSION: ${ALIYUN_OSS_AUTH_VERSION:-v4} - ALIYUN_OSS_BUCKET_NAME: ${ALIYUN_OSS_BUCKET_NAME:-your-bucket-name} - ALIYUN_OSS_ENDPOINT: ${ALIYUN_OSS_ENDPOINT:-https://oss-ap-southeast-1-internal.aliyuncs.com} - ALIYUN_OSS_PATH: ${ALIYUN_OSS_PATH:-your-path} - ALIYUN_OSS_REGION: ${ALIYUN_OSS_REGION:-ap-southeast-1} - ALIYUN_OSS_SECRET_KEY: ${ALIYUN_OSS_SECRET_KEY:-your-secret-key} - ANALYTICDB_ACCOUNT: ${ANALYTICDB_ACCOUNT:-testaccount} - ANALYTICDB_HOST: ${ANALYTICDB_HOST:-gp-test.aliyuncs.com} - ANALYTICDB_INSTANCE_ID: ${ANALYTICDB_INSTANCE_ID:-gp-ab123456} - ANALYTICDB_KEY_ID: ${ANALYTICDB_KEY_ID:-your-ak} - ANALYTICDB_KEY_SECRET: ${ANALYTICDB_KEY_SECRET:-your-sk} - ANALYTICDB_MAX_CONNECTION: ${ANALYTICDB_MAX_CONNECTION:-5} - ANALYTICDB_MIN_CONNECTION: ${ANALYTICDB_MIN_CONNECTION:-1} - ANALYTICDB_NAMESPACE: ${ANALYTICDB_NAMESPACE:-dify} - ANALYTICDB_NAMESPACE_PASSWORD: ${ANALYTICDB_NAMESPACE_PASSWORD:-difypassword} - ANALYTICDB_PASSWORD: ${ANALYTICDB_PASSWORD:-testpassword} - ANALYTICDB_PORT: ${ANALYTICDB_PORT:-5432} - ANALYTICDB_REGION_ID: ${ANALYTICDB_REGION_ID:-cn-hangzhou} - API_SENTRY_DSN: ${API_SENTRY_DSN:-} - API_SENTRY_PROFILES_SAMPLE_RATE: ${API_SENTRY_PROFILES_SAMPLE_RATE:-1.0} - API_SENTRY_TRACES_SAMPLE_RATE: ${API_SENTRY_TRACES_SAMPLE_RATE:-1.0} - API_TOOL_DEFAULT_CONNECT_TIMEOUT: ${API_TOOL_DEFAULT_CONNECT_TIMEOUT:-10} - API_TOOL_DEFAULT_READ_TIMEOUT: ${API_TOOL_DEFAULT_READ_TIMEOUT:-60} - APP_API_URL: ${APP_API_URL:-} - APP_MAX_ACTIVE_REQUESTS: ${APP_MAX_ACTIVE_REQUESTS:-0} - APP_MAX_EXECUTION_TIME: ${APP_MAX_EXECUTION_TIME:-1200} - APP_WEB_URL: ${APP_WEB_URL:-} - AZURE_BLOB_ACCOUNT_KEY: ${AZURE_BLOB_ACCOUNT_KEY:-difyai} - AZURE_BLOB_ACCOUNT_NAME: ${AZURE_BLOB_ACCOUNT_NAME:-difyai} - AZURE_BLOB_ACCOUNT_URL: ${AZURE_BLOB_ACCOUNT_URL:-https://.blob.core.windows.net} - AZURE_BLOB_CONTAINER_NAME: ${AZURE_BLOB_CONTAINER_NAME:-difyai-container} - BAIDU_OBS_ACCESS_KEY: ${BAIDU_OBS_ACCESS_KEY:-your-access-key} - BAIDU_OBS_BUCKET_NAME: ${BAIDU_OBS_BUCKET_NAME:-your-bucket-name} - BAIDU_OBS_ENDPOINT: ${BAIDU_OBS_ENDPOINT:-your-server-url} - BAIDU_OBS_SECRET_KEY: ${BAIDU_OBS_SECRET_KEY:-your-secret-key} - BAIDU_VECTOR_DB_ACCOUNT: ${BAIDU_VECTOR_DB_ACCOUNT:-root} - BAIDU_VECTOR_DB_API_KEY: ${BAIDU_VECTOR_DB_API_KEY:-dify} - BAIDU_VECTOR_DB_CONNECTION_TIMEOUT_MS: ${BAIDU_VECTOR_DB_CONNECTION_TIMEOUT_MS:-30000} - BAIDU_VECTOR_DB_DATABASE: ${BAIDU_VECTOR_DB_DATABASE:-dify} - BAIDU_VECTOR_DB_ENDPOINT: ${BAIDU_VECTOR_DB_ENDPOINT:-http://127.0.0.1:5287} - BAIDU_VECTOR_DB_REPLICAS: ${BAIDU_VECTOR_DB_REPLICAS:-3} - BAIDU_VECTOR_DB_SHARD: ${BAIDU_VECTOR_DB_SHARD:-1} - BROKER_USE_SSL: ${BROKER_USE_SSL:-false} - CELERY_AUTO_SCALE: ${CELERY_AUTO_SCALE:-false} - CELERY_BROKER_URL: ${CELERY_BROKER_URL:-redis://:difyai123456@redis:6379/1} - CELERY_MAX_WORKERS: ${CELERY_MAX_WORKERS:-} - CELERY_MIN_WORKERS: ${CELERY_MIN_WORKERS:-} - CELERY_SENTINEL_MASTER_NAME: ${CELERY_SENTINEL_MASTER_NAME:-} - CELERY_SENTINEL_SOCKET_TIMEOUT: ${CELERY_SENTINEL_SOCKET_TIMEOUT:-0.1} - CELERY_USE_SENTINEL: ${CELERY_USE_SENTINEL:-false} - CELERY_WORKER_AMOUNT: ${CELERY_WORKER_AMOUNT:-} - CELERY_WORKER_CLASS: ${CELERY_WORKER_CLASS:-} - CERTBOT_DOMAIN: ${CERTBOT_DOMAIN:-your_domain.com} - CERTBOT_EMAIL: ${CERTBOT_EMAIL:-your_email@example.com} - CERTBOT_OPTIONS: ${CERTBOT_OPTIONS:-} - CHECK_UPDATE_URL: ${CHECK_UPDATE_URL:-https://updates.dify.ai} - CHROMA_AUTH_CREDENTIALS: ${CHROMA_AUTH_CREDENTIALS:-} - CHROMA_AUTH_PROVIDER: ${CHROMA_AUTH_PROVIDER:-chromadb.auth.token_authn.TokenAuthClientProvider} - CHROMA_DATABASE: ${CHROMA_DATABASE:-default_database} - CHROMA_HOST: ${CHROMA_HOST:-127.0.0.1} - CHROMA_IS_PERSISTENT: ${CHROMA_IS_PERSISTENT:-TRUE} - CHROMA_PORT: ${CHROMA_PORT:-8000} - CHROMA_SERVER_AUTHN_CREDENTIALS: ${CHROMA_SERVER_AUTHN_CREDENTIALS:-difyai123456} - CHROMA_SERVER_AUTHN_PROVIDER: ${CHROMA_SERVER_AUTHN_PROVIDER:-chromadb.auth.token_authn.TokenAuthenticationServerProvider} - CHROMA_TENANT: ${CHROMA_TENANT:-default_tenant} - CODE_EXECUTION_API_KEY: ${CODE_EXECUTION_API_KEY:-dify-sandbox} - CODE_EXECUTION_CONNECT_TIMEOUT: ${CODE_EXECUTION_CONNECT_TIMEOUT:-10} - CODE_EXECUTION_ENDPOINT: ${CODE_EXECUTION_ENDPOINT:-http://sandbox:8194} - CODE_EXECUTION_READ_TIMEOUT: ${CODE_EXECUTION_READ_TIMEOUT:-60} - CODE_EXECUTION_WRITE_TIMEOUT: ${CODE_EXECUTION_WRITE_TIMEOUT:-10} - CODE_GENERATION_MAX_TOKENS: ${CODE_GENERATION_MAX_TOKENS:-1024} - CODE_MAX_DEPTH: ${CODE_MAX_DEPTH:-5} - CODE_MAX_NUMBER: ${CODE_MAX_NUMBER:-9223372036854775807} - CODE_MAX_NUMBER_ARRAY_LENGTH: ${CODE_MAX_NUMBER_ARRAY_LENGTH:-1000} - CODE_MAX_OBJECT_ARRAY_LENGTH: ${CODE_MAX_OBJECT_ARRAY_LENGTH:-30} - CODE_MAX_PRECISION: ${CODE_MAX_PRECISION:-20} - CODE_MAX_STRING_ARRAY_LENGTH: ${CODE_MAX_STRING_ARRAY_LENGTH:-30} - CODE_MAX_STRING_LENGTH: ${CODE_MAX_STRING_LENGTH:-80000} - CODE_MIN_NUMBER: ${CODE_MIN_NUMBER:--9223372036854775808} - CONSOLE_API_URL: ${CONSOLE_API_URL:-} - CONSOLE_CORS_ALLOW_ORIGINS: ${CONSOLE_CORS_ALLOW_ORIGINS:-*} - CONSOLE_WEB_URL: ${CONSOLE_WEB_URL:-} - COUCHBASE_BUCKET_NAME: ${COUCHBASE_BUCKET_NAME:-Embeddings} - COUCHBASE_CONNECTION_STRING: ${COUCHBASE_CONNECTION_STRING:-couchbase://couchbase-server} - COUCHBASE_PASSWORD: ${COUCHBASE_PASSWORD:-password} - COUCHBASE_SCOPE_NAME: ${COUCHBASE_SCOPE_NAME:-_default} - COUCHBASE_USER: ${COUCHBASE_USER:-Administrator} - CREATE_TIDB_SERVICE_JOB_ENABLED: ${CREATE_TIDB_SERVICE_JOB_ENABLED:-false} - CSP_WHITELIST: ${CSP_WHITELIST:-} - DB_DATABASE: ${DB_DATABASE:-dify} - DB_HOST: ${DB_HOST:-db} - DB_PASSWORD: ${DB_PASSWORD:-difyai123456} - DB_PLUGIN_DATABASE: ${DB_PLUGIN_DATABASE:-dify_plugin} - DB_PORT: ${DB_PORT:-5432} - DB_USERNAME: ${DB_USERNAME:-postgres} - DEBUG: ${DEBUG:-false} - DEPLOY_ENV: ${DEPLOY_ENV:-PRODUCTION} - DIFY_BIND_ADDRESS: ${DIFY_BIND_ADDRESS:-0.0.0.0} - DIFY_PORT: ${DIFY_PORT:-5001} - ELASTICSEARCH_HOST: ${ELASTICSEARCH_HOST:-0.0.0.0} - ELASTICSEARCH_PASSWORD: ${ELASTICSEARCH_PASSWORD:-elastic} - ELASTICSEARCH_PORT: ${ELASTICSEARCH_PORT:-9200} - ELASTICSEARCH_USERNAME: ${ELASTICSEARCH_USERNAME:-elastic} - ENDPOINT_URL_TEMPLATE: ${ENDPOINT_URL_TEMPLATE:-http://localhost/e/{hook_id}} - ETCD_AUTO_COMPACTION_MODE: ${ETCD_AUTO_COMPACTION_MODE:-revision} - ETCD_AUTO_COMPACTION_RETENTION: ${ETCD_AUTO_COMPACTION_RETENTION:-1000} - ETCD_ENDPOINTS: ${ETCD_ENDPOINTS:-etcd:2379} - ETCD_QUOTA_BACKEND_BYTES: ${ETCD_QUOTA_BACKEND_BYTES:-4294967296} - ETCD_SNAPSHOT_COUNT: ${ETCD_SNAPSHOT_COUNT:-50000} - ETL_TYPE: ${ETL_TYPE:-dify} - EXPOSE_NGINX_PORT: ${PANEL_APP_PORT_HTTP:-8080} - EXPOSE_NGINX_SSL_PORT: ${PANEL_APP_PORT_HTTPS:-8443} - EXPOSE_PLUGIN_DAEMON_PORT: ${EXPOSE_PLUGIN_DAEMON_PORT:-5002} - EXPOSE_PLUGIN_DEBUGGING_HOST: ${EXPOSE_PLUGIN_DEBUGGING_HOST:-localhost} - EXPOSE_PLUGIN_DEBUGGING_PORT: ${EXPOSE_PLUGIN_DEBUGGING_PORT:-5003} - FILES_ACCESS_TIMEOUT: ${FILES_ACCESS_TIMEOUT:-300} - FILES_URL: ${FILES_URL:-} - FLASK_DEBUG: ${FLASK_DEBUG:-false} - FORCE_VERIFYING_SIGNATURE: ${FORCE_VERIFYING_SIGNATURE:-true} - GOOGLE_STORAGE_BUCKET_NAME: ${GOOGLE_STORAGE_BUCKET_NAME:-your-bucket-name} - GOOGLE_STORAGE_SERVICE_ACCOUNT_JSON_BASE64: ${GOOGLE_STORAGE_SERVICE_ACCOUNT_JSON_BASE64:-} - GUNICORN_TIMEOUT: ${GUNICORN_TIMEOUT:-360} - HTTP_REQUEST_NODE_MAX_BINARY_SIZE: ${HTTP_REQUEST_NODE_MAX_BINARY_SIZE:-10485760} - HTTP_REQUEST_NODE_MAX_TEXT_SIZE: ${HTTP_REQUEST_NODE_MAX_TEXT_SIZE:-1048576} - HUAWEI_OBS_ACCESS_KEY: ${HUAWEI_OBS_ACCESS_KEY:-your-access-key} - HUAWEI_OBS_BUCKET_NAME: ${HUAWEI_OBS_BUCKET_NAME:-your-bucket-name} - HUAWEI_OBS_SECRET_KEY: ${HUAWEI_OBS_SECRET_KEY:-your-secret-key} - HUAWEI_OBS_SERVER: ${HUAWEI_OBS_SERVER:-your-server-url} - INDEXING_MAX_SEGMENTATION_TOKENS_LENGTH: ${INDEXING_MAX_SEGMENTATION_TOKENS_LENGTH:-4000} - INIT_PASSWORD: ${INIT_PASSWORD:-} - INNER_API_KEY_FOR_PLUGIN: ${PLUGIN_DIFY_INNER_API_KEY:-QaHbTe77CtuXmsfyhR7+vRjI/+XbV1AaFy691iy+kGDv2Jvy0/eAh8Y1} - INVITE_EXPIRY_HOURS: ${INVITE_EXPIRY_HOURS:-72} - KIBANA_PORT: ${KIBANA_PORT:-5601} - LINDORM_PASSWORD: ${LINDORM_PASSWORD:-lindorm} - LINDORM_URL: ${LINDORM_URL:-http://lindorm:30070} - LINDORM_USERNAME: ${LINDORM_USERNAME:-lindorm} - LOG_DATEFORMAT: ${LOG_DATEFORMAT:-%Y-%m-%d %H:%M:%S} - LOG_FILE: ${LOG_FILE:-/app/logs/server.log} - LOG_FILE_BACKUP_COUNT: ${LOG_FILE_BACKUP_COUNT:-5} - LOG_FILE_MAX_SIZE: ${LOG_FILE_MAX_SIZE:-20} - LOG_LEVEL: ${LOG_LEVEL:-INFO} - LOG_TZ: ${LOG_TZ:-UTC} - MAIL_DEFAULT_SEND_FROM: ${MAIL_DEFAULT_SEND_FROM:-} - MAIL_TYPE: ${MAIL_TYPE:-resend} - MARKETPLACE_API_URL: ${MARKETPLACE_API_URL:-https://marketplace.dify.ai} - MARKETPLACE_ENABLED: ${MARKETPLACE_ENABLED:-true} - MAX_SUBMIT_COUNT: ${MAX_SUBMIT_COUNT:-100} - MAX_VARIABLE_SIZE: ${MAX_VARIABLE_SIZE:-204800} - MIGRATION_ENABLED: ${MIGRATION_ENABLED:-true} - MILVUS_AUTHORIZATION_ENABLED: ${MILVUS_AUTHORIZATION_ENABLED:-true} - MILVUS_ENABLE_HYBRID_SEARCH: ${MILVUS_ENABLE_HYBRID_SEARCH:-False} - MILVUS_PASSWORD: ${MILVUS_PASSWORD:-Milvus} - MILVUS_TOKEN: ${MILVUS_TOKEN:-} - MILVUS_URI: ${MILVUS_URI:-http://127.0.0.1:19530} - MILVUS_USER: ${MILVUS_USER:-root} - MINIO_ACCESS_KEY: ${MINIO_ACCESS_KEY:-minioadmin} - MINIO_ADDRESS: ${MINIO_ADDRESS:-minio:9000} - MINIO_SECRET_KEY: ${MINIO_SECRET_KEY:-minioadmin} - MODE: worker - MULTIMODAL_SEND_FORMAT: ${MULTIMODAL_SEND_FORMAT:-base64} - MYSCALE_DATABASE: ${MYSCALE_DATABASE:-dify} - MYSCALE_FTS_PARAMS: ${MYSCALE_FTS_PARAMS:-} - MYSCALE_HOST: ${MYSCALE_HOST:-myscale} - MYSCALE_PASSWORD: ${MYSCALE_PASSWORD:-} - MYSCALE_PORT: ${MYSCALE_PORT:-8123} - MYSCALE_USER: ${MYSCALE_USER:-default} - NGINX_CLIENT_MAX_BODY_SIZE: ${NGINX_CLIENT_MAX_BODY_SIZE:-15M} - NGINX_ENABLE_CERTBOT_CHALLENGE: ${NGINX_ENABLE_CERTBOT_CHALLENGE:-false} - NGINX_HTTPS_ENABLED: ${NGINX_HTTPS_ENABLED:-false} - NGINX_KEEPALIVE_TIMEOUT: ${NGINX_KEEPALIVE_TIMEOUT:-65} - NGINX_PORT: ${NGINX_PORT:-80} - NGINX_PROXY_READ_TIMEOUT: ${NGINX_PROXY_READ_TIMEOUT:-3600s} - NGINX_PROXY_SEND_TIMEOUT: ${NGINX_PROXY_SEND_TIMEOUT:-3600s} - NGINX_SERVER_NAME: ${NGINX_SERVER_NAME:-_} - NGINX_SSL_CERT_FILENAME: ${NGINX_SSL_CERT_FILENAME:-dify.crt} - NGINX_SSL_CERT_KEY_FILENAME: ${NGINX_SSL_CERT_KEY_FILENAME:-dify.key} - NGINX_SSL_PORT: ${NGINX_SSL_PORT:-443} - NGINX_SSL_PROTOCOLS: ${NGINX_SSL_PROTOCOLS:-TLSv1.1 TLSv1.2 TLSv1.3} - NGINX_WORKER_PROCESSES: ${NGINX_WORKER_PROCESSES:-auto} - NOTION_CLIENT_ID: ${NOTION_CLIENT_ID:-} - NOTION_CLIENT_SECRET: ${NOTION_CLIENT_SECRET:-} - NOTION_INTEGRATION_TYPE: ${NOTION_INTEGRATION_TYPE:-public} - NOTION_INTERNAL_SECRET: ${NOTION_INTERNAL_SECRET:-} - OCEANBASE_CLUSTER_NAME: ${OCEANBASE_CLUSTER_NAME:-difyai} - OCEANBASE_MEMORY_LIMIT: ${OCEANBASE_MEMORY_LIMIT:-6G} - OCEANBASE_VECTOR_DATABASE: ${OCEANBASE_VECTOR_DATABASE:-test} - OCEANBASE_VECTOR_HOST: ${OCEANBASE_VECTOR_HOST:-oceanbase} - OCEANBASE_VECTOR_PASSWORD: ${OCEANBASE_VECTOR_PASSWORD:-difyai123456} - OCEANBASE_VECTOR_PORT: ${OCEANBASE_VECTOR_PORT:-2881} - OCEANBASE_VECTOR_USER: ${OCEANBASE_VECTOR_USER:-root@test} - OCI_ACCESS_KEY: ${OCI_ACCESS_KEY:-your-access-key} - OCI_BUCKET_NAME: ${OCI_BUCKET_NAME:-your-bucket-name} - OCI_ENDPOINT: ${OCI_ENDPOINT:-https://objectstorage.us-ashburn-1.oraclecloud.com} - OCI_REGION: ${OCI_REGION:-us-ashburn-1} - OCI_SECRET_KEY: ${OCI_SECRET_KEY:-your-secret-key} - OPENAI_API_BASE: ${OPENAI_API_BASE:-https://api.openai.com/v1} - OPENDAL_FS_ROOT: ${OPENDAL_FS_ROOT:-storage} - OPENDAL_SCHEME: ${OPENDAL_SCHEME:-fs} - OPENSEARCH_BOOTSTRAP_MEMORY_LOCK: ${OPENSEARCH_BOOTSTRAP_MEMORY_LOCK:-true} - OPENSEARCH_DISCOVERY_TYPE: ${OPENSEARCH_DISCOVERY_TYPE:-single-node} - OPENSEARCH_HOST: ${OPENSEARCH_HOST:-opensearch} - OPENSEARCH_INITIAL_ADMIN_PASSWORD: ${OPENSEARCH_INITIAL_ADMIN_PASSWORD:-Qazwsxedc!@#123} - OPENSEARCH_JAVA_OPTS_MAX: ${OPENSEARCH_JAVA_OPTS_MAX:-1024m} - OPENSEARCH_JAVA_OPTS_MIN: ${OPENSEARCH_JAVA_OPTS_MIN:-512m} - OPENSEARCH_MEMLOCK_HARD: ${OPENSEARCH_MEMLOCK_HARD:--1} - OPENSEARCH_MEMLOCK_SOFT: ${OPENSEARCH_MEMLOCK_SOFT:--1} - OPENSEARCH_NOFILE_HARD: ${OPENSEARCH_NOFILE_HARD:-65536} - OPENSEARCH_NOFILE_SOFT: ${OPENSEARCH_NOFILE_SOFT:-65536} - OPENSEARCH_PASSWORD: ${OPENSEARCH_PASSWORD:-admin} - OPENSEARCH_PORT: ${OPENSEARCH_PORT:-9200} - OPENSEARCH_SECURE: ${OPENSEARCH_SECURE:-true} - OPENSEARCH_USER: ${OPENSEARCH_USER:-admin} - ORACLE_CHARACTERSET: ${ORACLE_CHARACTERSET:-AL32UTF8} - ORACLE_DATABASE: ${ORACLE_DATABASE:-FREEPDB1} - ORACLE_HOST: ${ORACLE_HOST:-oracle} - ORACLE_PASSWORD: ${ORACLE_PASSWORD:-dify} - ORACLE_PORT: ${ORACLE_PORT:-1521} - ORACLE_PWD: ${ORACLE_PWD:-Dify123456} - ORACLE_USER: ${ORACLE_USER:-dify} - PGDATA: ${PGDATA:-/var/lib/postgresql/data/pgdata} - PGUSER: ${PGUSER:-${DB_USERNAME}} - PGVECTOR_DATABASE: ${PGVECTOR_DATABASE:-dify} - PGVECTOR_HOST: ${PGVECTOR_HOST:-pgvector} - PGVECTOR_MAX_CONNECTION: ${PGVECTOR_MAX_CONNECTION:-5} - PGVECTOR_MIN_CONNECTION: ${PGVECTOR_MIN_CONNECTION:-1} - PGVECTOR_PASSWORD: ${PGVECTOR_PASSWORD:-difyai123456} - PGVECTOR_PGDATA: ${PGVECTOR_PGDATA:-/var/lib/postgresql/data/pgdata} - PGVECTOR_PGUSER: ${PGVECTOR_PGUSER:-postgres} - PGVECTOR_PORT: ${PGVECTOR_PORT:-5432} - PGVECTOR_POSTGRES_DB: ${PGVECTOR_POSTGRES_DB:-dify} - PGVECTOR_POSTGRES_PASSWORD: ${PGVECTOR_POSTGRES_PASSWORD:-difyai123456} - PGVECTOR_USER: ${PGVECTOR_USER:-postgres} - PGVECTO_RS_DATABASE: ${PGVECTO_RS_DATABASE:-dify} - PGVECTO_RS_HOST: ${PGVECTO_RS_HOST:-pgvecto-rs} - PGVECTO_RS_PASSWORD: ${PGVECTO_RS_PASSWORD:-difyai123456} - PGVECTO_RS_PORT: ${PGVECTO_RS_PORT:-5432} - PGVECTO_RS_USER: ${PGVECTO_RS_USER:-postgres} - PLUGIN_DAEMON_KEY: ${PLUGIN_DAEMON_KEY:-lYkiYYT6owG+71oLerGzA7GXCgOT++6ovaezWAjpCjf+Sjc3ZtU+qUEi} - PLUGIN_DAEMON_PORT: ${PLUGIN_DAEMON_PORT:-5002} - PLUGIN_DAEMON_URL: ${PLUGIN_DAEMON_URL:-http://plugin_daemon:5002} - PLUGIN_DEBUGGING_HOST: ${PLUGIN_DEBUGGING_HOST:-0.0.0.0} - PLUGIN_DEBUGGING_PORT: ${PLUGIN_DEBUGGING_PORT:-5003} - PLUGIN_DIFY_INNER_API_KEY: ${PLUGIN_DIFY_INNER_API_KEY:-QaHbTe77CtuXmsfyhR7+vRjI/+XbV1AaFy691iy+kGDv2Jvy0/eAh8Y1} - PLUGIN_DIFY_INNER_API_URL: ${PLUGIN_DIFY_INNER_API_URL:-http://api:5001} - PLUGIN_MAX_PACKAGE_SIZE: ${PLUGIN_MAX_PACKAGE_SIZE:-52428800} - PLUGIN_PPROF_ENABLED: ${PLUGIN_PPROF_ENABLED:-false} - POSITION_PROVIDER_EXCLUDES: ${POSITION_PROVIDER_EXCLUDES:-} - POSITION_PROVIDER_INCLUDES: ${POSITION_PROVIDER_INCLUDES:-} - POSITION_PROVIDER_PINS: ${POSITION_PROVIDER_PINS:-} - POSITION_TOOL_EXCLUDES: ${POSITION_TOOL_EXCLUDES:-} - POSITION_TOOL_INCLUDES: ${POSITION_TOOL_INCLUDES:-} - POSITION_TOOL_PINS: ${POSITION_TOOL_PINS:-} - POSTGRES_DB: ${POSTGRES_DB:-${DB_DATABASE}} - POSTGRES_EFFECTIVE_CACHE_SIZE: ${POSTGRES_EFFECTIVE_CACHE_SIZE:-4096MB} - POSTGRES_MAINTENANCE_WORK_MEM: ${POSTGRES_MAINTENANCE_WORK_MEM:-64MB} - POSTGRES_MAX_CONNECTIONS: ${POSTGRES_MAX_CONNECTIONS:-100} - POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-${DB_PASSWORD}} - POSTGRES_SHARED_BUFFERS: ${POSTGRES_SHARED_BUFFERS:-128MB} - POSTGRES_WORK_MEM: ${POSTGRES_WORK_MEM:-4MB} - PROMPT_GENERATION_MAX_TOKENS: ${PROMPT_GENERATION_MAX_TOKENS:-512} - QDRANT_API_KEY: ${QDRANT_API_KEY:-difyai123456} - QDRANT_CLIENT_TIMEOUT: ${QDRANT_CLIENT_TIMEOUT:-20} - QDRANT_GRPC_ENABLED: ${QDRANT_GRPC_ENABLED:-false} - QDRANT_GRPC_PORT: ${QDRANT_GRPC_PORT:-6334} - QDRANT_URL: ${QDRANT_URL:-http://qdrant:6333} - REDIS_CLUSTERS: ${REDIS_CLUSTERS:-} - REDIS_CLUSTERS_PASSWORD: ${REDIS_CLUSTERS_PASSWORD:-} - REDIS_DB: ${REDIS_DB:-0} - REDIS_HOST: ${REDIS_HOST:-redis} - REDIS_PASSWORD: ${REDIS_PASSWORD:-difyai123456} - REDIS_PORT: ${REDIS_PORT:-6379} - REDIS_SENTINELS: ${REDIS_SENTINELS:-} - REDIS_SENTINEL_PASSWORD: ${REDIS_SENTINEL_PASSWORD:-} - REDIS_SENTINEL_SERVICE_NAME: ${REDIS_SENTINEL_SERVICE_NAME:-} - REDIS_SENTINEL_SOCKET_TIMEOUT: ${REDIS_SENTINEL_SOCKET_TIMEOUT:-0.1} - REDIS_SENTINEL_USERNAME: ${REDIS_SENTINEL_USERNAME:-} - REDIS_USERNAME: ${REDIS_USERNAME:-} - REDIS_USE_CLUSTERS: ${REDIS_USE_CLUSTERS:-false} - REDIS_USE_SENTINEL: ${REDIS_USE_SENTINEL:-false} - REDIS_USE_SSL: ${REDIS_USE_SSL:-false} - REFRESH_TOKEN_EXPIRE_DAYS: ${REFRESH_TOKEN_EXPIRE_DAYS:-30} - RELYT_DATABASE: ${RELYT_DATABASE:-postgres} - RELYT_HOST: ${RELYT_HOST:-db} - RELYT_PASSWORD: ${RELYT_PASSWORD:-difyai123456} - RELYT_PORT: ${RELYT_PORT:-5432} - RELYT_USER: ${RELYT_USER:-postgres} - RESEND_API_KEY: ${RESEND_API_KEY:-your-resend-api-key} - RESEND_API_URL: ${RESEND_API_URL:-https://api.resend.com} - RESET_PASSWORD_TOKEN_EXPIRY_MINUTES: ${RESET_PASSWORD_TOKEN_EXPIRY_MINUTES:-5} - S3_ACCESS_KEY: ${S3_ACCESS_KEY:-} - S3_BUCKET_NAME: ${S3_BUCKET_NAME:-difyai} - S3_ENDPOINT: ${S3_ENDPOINT:-} - S3_REGION: ${S3_REGION:-us-east-1} - S3_SECRET_KEY: ${S3_SECRET_KEY:-} - S3_USE_AWS_MANAGED_IAM: ${S3_USE_AWS_MANAGED_IAM:-false} - SANDBOX_API_KEY: ${SANDBOX_API_KEY:-dify-sandbox} - SANDBOX_ENABLE_NETWORK: ${SANDBOX_ENABLE_NETWORK:-true} - SANDBOX_GIN_MODE: ${SANDBOX_GIN_MODE:-release} - SANDBOX_HTTPS_PROXY: ${SANDBOX_HTTPS_PROXY:-http://ssrf_proxy:3128} - SANDBOX_HTTP_PROXY: ${SANDBOX_HTTP_PROXY:-http://ssrf_proxy:3128} - SANDBOX_PORT: ${SANDBOX_PORT:-8194} - SANDBOX_WORKER_TIMEOUT: ${SANDBOX_WORKER_TIMEOUT:-15} - SCARF_NO_ANALYTICS: ${SCARF_NO_ANALYTICS:-true} - SECRET_KEY: ${SECRET_KEY:-sk-9f73s3ljTXVcMT3Blb3ljTqtsKiGHXVcMT3BlbkFJLK7U} - SENTRY_DSN: ${API_SENTRY_DSN:-} - SENTRY_PROFILES_SAMPLE_RATE: ${API_SENTRY_PROFILES_SAMPLE_RATE:-1.0} - SENTRY_TRACES_SAMPLE_RATE: ${API_SENTRY_TRACES_SAMPLE_RATE:-1.0} - SERVER_WORKER_AMOUNT: ${SERVER_WORKER_AMOUNT:-1} - SERVER_WORKER_CLASS: ${SERVER_WORKER_CLASS:-gevent} - SERVER_WORKER_CONNECTIONS: ${SERVER_WORKER_CONNECTIONS:-10} - SERVICE_API_URL: ${SERVICE_API_URL:-} - SMTP_OPPORTUNISTIC_TLS: ${SMTP_OPPORTUNISTIC_TLS:-false} - SMTP_PASSWORD: ${SMTP_PASSWORD:-} - SMTP_PORT: ${SMTP_PORT:-465} - SMTP_SERVER: ${SMTP_SERVER:-} - SMTP_USERNAME: ${SMTP_USERNAME:-} - SMTP_USE_TLS: ${SMTP_USE_TLS:-true} - SQLALCHEMY_ECHO: ${SQLALCHEMY_ECHO:-false} - SQLALCHEMY_POOL_RECYCLE: ${SQLALCHEMY_POOL_RECYCLE:-3600} - SQLALCHEMY_POOL_SIZE: ${SQLALCHEMY_POOL_SIZE:-30} - SSRF_COREDUMP_DIR: ${SSRF_COREDUMP_DIR:-/var/spool/squid} - SSRF_DEFAULT_CONNECT_TIME_OUT: ${SSRF_DEFAULT_CONNECT_TIME_OUT:-5} - SSRF_DEFAULT_READ_TIME_OUT: ${SSRF_DEFAULT_READ_TIME_OUT:-5} - SSRF_DEFAULT_TIME_OUT: ${SSRF_DEFAULT_TIME_OUT:-5} - SSRF_DEFAULT_WRITE_TIME_OUT: ${SSRF_DEFAULT_WRITE_TIME_OUT:-5} - SSRF_HTTP_PORT: ${SSRF_HTTP_PORT:-3128} - SSRF_PROXY_HTTPS_URL: ${SSRF_PROXY_HTTPS_URL:-http://ssrf_proxy:3128} - SSRF_PROXY_HTTP_URL: ${SSRF_PROXY_HTTP_URL:-http://ssrf_proxy:3128} - SSRF_REVERSE_PROXY_PORT: ${SSRF_REVERSE_PROXY_PORT:-8194} - SSRF_SANDBOX_HOST: ${SSRF_SANDBOX_HOST:-sandbox} - STORAGE_TYPE: ${STORAGE_TYPE:-opendal} - SUPABASE_API_KEY: ${SUPABASE_API_KEY:-your-access-key} - SUPABASE_BUCKET_NAME: ${SUPABASE_BUCKET_NAME:-your-bucket-name} - SUPABASE_URL: ${SUPABASE_URL:-your-server-url} - TEMPLATE_TRANSFORM_MAX_LENGTH: ${TEMPLATE_TRANSFORM_MAX_LENGTH:-80000} - TENCENT_COS_BUCKET_NAME: ${TENCENT_COS_BUCKET_NAME:-your-bucket-name} - TENCENT_COS_REGION: ${TENCENT_COS_REGION:-your-region} - TENCENT_COS_SCHEME: ${TENCENT_COS_SCHEME:-your-scheme} - TENCENT_COS_SECRET_ID: ${TENCENT_COS_SECRET_ID:-your-secret-id} - TENCENT_COS_SECRET_KEY: ${TENCENT_COS_SECRET_KEY:-your-secret-key} - TENCENT_VECTOR_DB_API_KEY: ${TENCENT_VECTOR_DB_API_KEY:-dify} - TENCENT_VECTOR_DB_DATABASE: ${TENCENT_VECTOR_DB_DATABASE:-dify} - TENCENT_VECTOR_DB_REPLICAS: ${TENCENT_VECTOR_DB_REPLICAS:-2} - TENCENT_VECTOR_DB_SHARD: ${TENCENT_VECTOR_DB_SHARD:-1} - TENCENT_VECTOR_DB_TIMEOUT: ${TENCENT_VECTOR_DB_TIMEOUT:-30} - TENCENT_VECTOR_DB_URL: ${TENCENT_VECTOR_DB_URL:-http://127.0.0.1} - TENCENT_VECTOR_DB_USERNAME: ${TENCENT_VECTOR_DB_USERNAME:-dify} - TEXT_GENERATION_TIMEOUT_MS: ${TEXT_GENERATION_TIMEOUT_MS:-60000} - TIDB_API_URL: ${TIDB_API_URL:-http://127.0.0.1} - TIDB_IAM_API_URL: ${TIDB_IAM_API_URL:-http://127.0.0.1} - TIDB_ON_QDRANT_API_KEY: ${TIDB_ON_QDRANT_API_KEY:-dify} - TIDB_ON_QDRANT_CLIENT_TIMEOUT: ${TIDB_ON_QDRANT_CLIENT_TIMEOUT:-20} - TIDB_ON_QDRANT_GRPC_ENABLED: ${TIDB_ON_QDRANT_GRPC_ENABLED:-false} - TIDB_ON_QDRANT_GRPC_PORT: ${TIDB_ON_QDRANT_GRPC_PORT:-6334} - TIDB_ON_QDRANT_URL: ${TIDB_ON_QDRANT_URL:-http://127.0.0.1} - TIDB_PRIVATE_KEY: ${TIDB_PRIVATE_KEY:-dify} - TIDB_PROJECT_ID: ${TIDB_PROJECT_ID:-dify} - TIDB_PUBLIC_KEY: ${TIDB_PUBLIC_KEY:-dify} - TIDB_REGION: ${TIDB_REGION:-regions/aws-us-east-1} - TIDB_SPEND_LIMIT: ${TIDB_SPEND_LIMIT:-100} - TIDB_VECTOR_DATABASE: ${TIDB_VECTOR_DATABASE:-dify} - TIDB_VECTOR_HOST: ${TIDB_VECTOR_HOST:-tidb} - TIDB_VECTOR_PASSWORD: ${TIDB_VECTOR_PASSWORD:-} - TIDB_VECTOR_PORT: ${TIDB_VECTOR_PORT:-4000} - TIDB_VECTOR_USER: ${TIDB_VECTOR_USER:-} - TOP_K_MAX_VALUE: ${TOP_K_MAX_VALUE:-10} - UNSTRUCTURED_API_KEY: ${UNSTRUCTURED_API_KEY:-} - UNSTRUCTURED_API_URL: ${UNSTRUCTURED_API_URL:-} - UPLOAD_AUDIO_FILE_SIZE_LIMIT: ${UPLOAD_AUDIO_FILE_SIZE_LIMIT:-50} - UPLOAD_FILE_BATCH_LIMIT: ${UPLOAD_FILE_BATCH_LIMIT:-5} - UPLOAD_FILE_SIZE_LIMIT: ${UPLOAD_FILE_SIZE_LIMIT:-15} - UPLOAD_IMAGE_FILE_SIZE_LIMIT: ${UPLOAD_IMAGE_FILE_SIZE_LIMIT:-10} - UPLOAD_VIDEO_FILE_SIZE_LIMIT: ${UPLOAD_VIDEO_FILE_SIZE_LIMIT:-100} - UPSTASH_VECTOR_TOKEN: ${UPSTASH_VECTOR_TOKEN:-dify} - UPSTASH_VECTOR_URL: ${UPSTASH_VECTOR_URL:-https://xxx-vector.upstash.io} - VECTOR_STORE: ${VECTOR_STORE:-weaviate} - VIKINGDB_ACCESS_KEY: ${VIKINGDB_ACCESS_KEY:-your-ak} - VIKINGDB_CONNECTION_TIMEOUT: ${VIKINGDB_CONNECTION_TIMEOUT:-30} - VIKINGDB_HOST: ${VIKINGDB_HOST:-api-vikingdb.xxx.volces.com} - VIKINGDB_REGION: ${VIKINGDB_REGION:-cn-shanghai} - VIKINGDB_SCHEMA: ${VIKINGDB_SCHEMA:-http} - VIKINGDB_SECRET_KEY: ${VIKINGDB_SECRET_KEY:-your-sk} - VIKINGDB_SOCKET_TIMEOUT: ${VIKINGDB_SOCKET_TIMEOUT:-30} - VOLCENGINE_TOS_ACCESS_KEY: ${VOLCENGINE_TOS_ACCESS_KEY:-your-access-key} - VOLCENGINE_TOS_BUCKET_NAME: ${VOLCENGINE_TOS_BUCKET_NAME:-your-bucket-name} - VOLCENGINE_TOS_ENDPOINT: ${VOLCENGINE_TOS_ENDPOINT:-your-server-url} - VOLCENGINE_TOS_REGION: ${VOLCENGINE_TOS_REGION:-your-region} - VOLCENGINE_TOS_SECRET_KEY: ${VOLCENGINE_TOS_SECRET_KEY:-your-secret-key} - WEAVIATE_API_KEY: ${WEAVIATE_API_KEY:-WVF5YThaHlkYwhGUSmCRgsX3tD5ngdN8pkih} - WEAVIATE_AUTHENTICATION_ANONYMOUS_ACCESS_ENABLED: ${WEAVIATE_AUTHENTICATION_ANONYMOUS_ACCESS_ENABLED:-true} - WEAVIATE_AUTHENTICATION_APIKEY_ALLOWED_KEYS: ${WEAVIATE_AUTHENTICATION_APIKEY_ALLOWED_KEYS:-WVF5YThaHlkYwhGUSmCRgsX3tD5ngdN8pkih} - WEAVIATE_AUTHENTICATION_APIKEY_ENABLED: ${WEAVIATE_AUTHENTICATION_APIKEY_ENABLED:-true} - WEAVIATE_AUTHENTICATION_APIKEY_USERS: ${WEAVIATE_AUTHENTICATION_APIKEY_USERS:-hello@dify.ai} - WEAVIATE_AUTHORIZATION_ADMINLIST_ENABLED: ${WEAVIATE_AUTHORIZATION_ADMINLIST_ENABLED:-true} - WEAVIATE_AUTHORIZATION_ADMINLIST_USERS: ${WEAVIATE_AUTHORIZATION_ADMINLIST_USERS:-hello@dify.ai} - WEAVIATE_CLUSTER_HOSTNAME: ${WEAVIATE_CLUSTER_HOSTNAME:-node1} - WEAVIATE_DEFAULT_VECTORIZER_MODULE: ${WEAVIATE_DEFAULT_VECTORIZER_MODULE:-none} - WEAVIATE_ENDPOINT: ${WEAVIATE_ENDPOINT:-http://weaviate:8080} - WEAVIATE_PERSISTENCE_DATA_PATH: ${WEAVIATE_PERSISTENCE_DATA_PATH:-/var/lib/weaviate} - WEAVIATE_QUERY_DEFAULTS_LIMIT: ${WEAVIATE_QUERY_DEFAULTS_LIMIT:-25} - WEB_API_CORS_ALLOW_ORIGINS: ${WEB_API_CORS_ALLOW_ORIGINS:-*} - WEB_SENTRY_DSN: ${WEB_SENTRY_DSN:-} - WORKFLOW_CALL_MAX_DEPTH: ${WORKFLOW_CALL_MAX_DEPTH:-5} - WORKFLOW_FILE_UPLOAD_LIMIT: ${WORKFLOW_FILE_UPLOAD_LIMIT:-10} - WORKFLOW_MAX_EXECUTION_STEPS: ${WORKFLOW_MAX_EXECUTION_STEPS:-500} - WORKFLOW_MAX_EXECUTION_TIME: ${WORKFLOW_MAX_EXECUTION_TIME:-1200} - WORKFLOW_PARALLEL_DEPTH_LIMIT: ${WORKFLOW_PARALLEL_DEPTH_LIMIT:-3} - image: langgenius/dify-api:1.0.0 - networks: - - ssrf_proxy_network - - default - restart: always - volumes: - - ${DIFY_ROOT_PATH}/volumes/app/storage:/app/api/storage -volumes: - dify_es01_data: null - oradata: null -x-shared-env: - ACCESS_TOKEN_EXPIRE_MINUTES: ${ACCESS_TOKEN_EXPIRE_MINUTES:-60} - ALIYUN_OSS_ACCESS_KEY: ${ALIYUN_OSS_ACCESS_KEY:-your-access-key} - ALIYUN_OSS_AUTH_VERSION: ${ALIYUN_OSS_AUTH_VERSION:-v4} - ALIYUN_OSS_BUCKET_NAME: ${ALIYUN_OSS_BUCKET_NAME:-your-bucket-name} - ALIYUN_OSS_ENDPOINT: ${ALIYUN_OSS_ENDPOINT:-https://oss-ap-southeast-1-internal.aliyuncs.com} - ALIYUN_OSS_PATH: ${ALIYUN_OSS_PATH:-your-path} - ALIYUN_OSS_REGION: ${ALIYUN_OSS_REGION:-ap-southeast-1} - ALIYUN_OSS_SECRET_KEY: ${ALIYUN_OSS_SECRET_KEY:-your-secret-key} - ANALYTICDB_ACCOUNT: ${ANALYTICDB_ACCOUNT:-testaccount} - ANALYTICDB_HOST: ${ANALYTICDB_HOST:-gp-test.aliyuncs.com} - ANALYTICDB_INSTANCE_ID: ${ANALYTICDB_INSTANCE_ID:-gp-ab123456} - ANALYTICDB_KEY_ID: ${ANALYTICDB_KEY_ID:-your-ak} - ANALYTICDB_KEY_SECRET: ${ANALYTICDB_KEY_SECRET:-your-sk} - ANALYTICDB_MAX_CONNECTION: ${ANALYTICDB_MAX_CONNECTION:-5} - ANALYTICDB_MIN_CONNECTION: ${ANALYTICDB_MIN_CONNECTION:-1} - ANALYTICDB_NAMESPACE: ${ANALYTICDB_NAMESPACE:-dify} - ANALYTICDB_NAMESPACE_PASSWORD: ${ANALYTICDB_NAMESPACE_PASSWORD:-difypassword} - ANALYTICDB_PASSWORD: ${ANALYTICDB_PASSWORD:-testpassword} - ANALYTICDB_PORT: ${ANALYTICDB_PORT:-5432} - ANALYTICDB_REGION_ID: ${ANALYTICDB_REGION_ID:-cn-hangzhou} - API_SENTRY_DSN: ${API_SENTRY_DSN:-} - API_SENTRY_PROFILES_SAMPLE_RATE: ${API_SENTRY_PROFILES_SAMPLE_RATE:-1.0} - API_SENTRY_TRACES_SAMPLE_RATE: ${API_SENTRY_TRACES_SAMPLE_RATE:-1.0} - API_TOOL_DEFAULT_CONNECT_TIMEOUT: ${API_TOOL_DEFAULT_CONNECT_TIMEOUT:-10} - API_TOOL_DEFAULT_READ_TIMEOUT: ${API_TOOL_DEFAULT_READ_TIMEOUT:-60} - APP_API_URL: ${APP_API_URL:-} - APP_MAX_ACTIVE_REQUESTS: ${APP_MAX_ACTIVE_REQUESTS:-0} - APP_MAX_EXECUTION_TIME: ${APP_MAX_EXECUTION_TIME:-1200} - APP_WEB_URL: ${APP_WEB_URL:-} - AZURE_BLOB_ACCOUNT_KEY: ${AZURE_BLOB_ACCOUNT_KEY:-difyai} - AZURE_BLOB_ACCOUNT_NAME: ${AZURE_BLOB_ACCOUNT_NAME:-difyai} - AZURE_BLOB_ACCOUNT_URL: ${AZURE_BLOB_ACCOUNT_URL:-https://.blob.core.windows.net} - AZURE_BLOB_CONTAINER_NAME: ${AZURE_BLOB_CONTAINER_NAME:-difyai-container} - BAIDU_OBS_ACCESS_KEY: ${BAIDU_OBS_ACCESS_KEY:-your-access-key} - BAIDU_OBS_BUCKET_NAME: ${BAIDU_OBS_BUCKET_NAME:-your-bucket-name} - BAIDU_OBS_ENDPOINT: ${BAIDU_OBS_ENDPOINT:-your-server-url} - BAIDU_OBS_SECRET_KEY: ${BAIDU_OBS_SECRET_KEY:-your-secret-key} - BAIDU_VECTOR_DB_ACCOUNT: ${BAIDU_VECTOR_DB_ACCOUNT:-root} - BAIDU_VECTOR_DB_API_KEY: ${BAIDU_VECTOR_DB_API_KEY:-dify} - BAIDU_VECTOR_DB_CONNECTION_TIMEOUT_MS: ${BAIDU_VECTOR_DB_CONNECTION_TIMEOUT_MS:-30000} - BAIDU_VECTOR_DB_DATABASE: ${BAIDU_VECTOR_DB_DATABASE:-dify} - BAIDU_VECTOR_DB_ENDPOINT: ${BAIDU_VECTOR_DB_ENDPOINT:-http://127.0.0.1:5287} - BAIDU_VECTOR_DB_REPLICAS: ${BAIDU_VECTOR_DB_REPLICAS:-3} - BAIDU_VECTOR_DB_SHARD: ${BAIDU_VECTOR_DB_SHARD:-1} - BROKER_USE_SSL: ${BROKER_USE_SSL:-false} - CELERY_AUTO_SCALE: ${CELERY_AUTO_SCALE:-false} - CELERY_BROKER_URL: ${CELERY_BROKER_URL:-redis://:difyai123456@redis:6379/1} - CELERY_MAX_WORKERS: ${CELERY_MAX_WORKERS:-} - CELERY_MIN_WORKERS: ${CELERY_MIN_WORKERS:-} - CELERY_SENTINEL_MASTER_NAME: ${CELERY_SENTINEL_MASTER_NAME:-} - CELERY_SENTINEL_SOCKET_TIMEOUT: ${CELERY_SENTINEL_SOCKET_TIMEOUT:-0.1} - CELERY_USE_SENTINEL: ${CELERY_USE_SENTINEL:-false} - CELERY_WORKER_AMOUNT: ${CELERY_WORKER_AMOUNT:-} - CELERY_WORKER_CLASS: ${CELERY_WORKER_CLASS:-} - CERTBOT_DOMAIN: ${CERTBOT_DOMAIN:-your_domain.com} - CERTBOT_EMAIL: ${CERTBOT_EMAIL:-your_email@example.com} - CERTBOT_OPTIONS: ${CERTBOT_OPTIONS:-} - CHECK_UPDATE_URL: ${CHECK_UPDATE_URL:-https://updates.dify.ai} - CHROMA_AUTH_CREDENTIALS: ${CHROMA_AUTH_CREDENTIALS:-} - CHROMA_AUTH_PROVIDER: ${CHROMA_AUTH_PROVIDER:-chromadb.auth.token_authn.TokenAuthClientProvider} - CHROMA_DATABASE: ${CHROMA_DATABASE:-default_database} - CHROMA_HOST: ${CHROMA_HOST:-127.0.0.1} - CHROMA_IS_PERSISTENT: ${CHROMA_IS_PERSISTENT:-TRUE} - CHROMA_PORT: ${CHROMA_PORT:-8000} - CHROMA_SERVER_AUTHN_CREDENTIALS: ${CHROMA_SERVER_AUTHN_CREDENTIALS:-difyai123456} - CHROMA_SERVER_AUTHN_PROVIDER: ${CHROMA_SERVER_AUTHN_PROVIDER:-chromadb.auth.token_authn.TokenAuthenticationServerProvider} - CHROMA_TENANT: ${CHROMA_TENANT:-default_tenant} - CODE_EXECUTION_API_KEY: ${CODE_EXECUTION_API_KEY:-dify-sandbox} - CODE_EXECUTION_CONNECT_TIMEOUT: ${CODE_EXECUTION_CONNECT_TIMEOUT:-10} - CODE_EXECUTION_ENDPOINT: ${CODE_EXECUTION_ENDPOINT:-http://sandbox:8194} - CODE_EXECUTION_READ_TIMEOUT: ${CODE_EXECUTION_READ_TIMEOUT:-60} - CODE_EXECUTION_WRITE_TIMEOUT: ${CODE_EXECUTION_WRITE_TIMEOUT:-10} - CODE_GENERATION_MAX_TOKENS: ${CODE_GENERATION_MAX_TOKENS:-1024} - CODE_MAX_DEPTH: ${CODE_MAX_DEPTH:-5} - CODE_MAX_NUMBER: ${CODE_MAX_NUMBER:-9223372036854775807} - CODE_MAX_NUMBER_ARRAY_LENGTH: ${CODE_MAX_NUMBER_ARRAY_LENGTH:-1000} - CODE_MAX_OBJECT_ARRAY_LENGTH: ${CODE_MAX_OBJECT_ARRAY_LENGTH:-30} - CODE_MAX_PRECISION: ${CODE_MAX_PRECISION:-20} - CODE_MAX_STRING_ARRAY_LENGTH: ${CODE_MAX_STRING_ARRAY_LENGTH:-30} - CODE_MAX_STRING_LENGTH: ${CODE_MAX_STRING_LENGTH:-80000} - CODE_MIN_NUMBER: ${CODE_MIN_NUMBER:--9223372036854775808} - CONSOLE_API_URL: ${CONSOLE_API_URL:-} - CONSOLE_CORS_ALLOW_ORIGINS: ${CONSOLE_CORS_ALLOW_ORIGINS:-*} - CONSOLE_WEB_URL: ${CONSOLE_WEB_URL:-} - COUCHBASE_BUCKET_NAME: ${COUCHBASE_BUCKET_NAME:-Embeddings} - COUCHBASE_CONNECTION_STRING: ${COUCHBASE_CONNECTION_STRING:-couchbase://couchbase-server} - COUCHBASE_PASSWORD: ${COUCHBASE_PASSWORD:-password} - COUCHBASE_SCOPE_NAME: ${COUCHBASE_SCOPE_NAME:-_default} - COUCHBASE_USER: ${COUCHBASE_USER:-Administrator} - CREATE_TIDB_SERVICE_JOB_ENABLED: ${CREATE_TIDB_SERVICE_JOB_ENABLED:-false} - CSP_WHITELIST: ${CSP_WHITELIST:-} - DB_DATABASE: ${DB_DATABASE:-dify} - DB_HOST: ${DB_HOST:-db} - DB_PASSWORD: ${DB_PASSWORD:-difyai123456} - DB_PLUGIN_DATABASE: ${DB_PLUGIN_DATABASE:-dify_plugin} - DB_PORT: ${DB_PORT:-5432} - DB_USERNAME: ${DB_USERNAME:-postgres} - DEBUG: ${DEBUG:-false} - DEPLOY_ENV: ${DEPLOY_ENV:-PRODUCTION} - DIFY_BIND_ADDRESS: ${DIFY_BIND_ADDRESS:-0.0.0.0} - DIFY_PORT: ${DIFY_PORT:-5001} - ELASTICSEARCH_HOST: ${ELASTICSEARCH_HOST:-0.0.0.0} - ELASTICSEARCH_PASSWORD: ${ELASTICSEARCH_PASSWORD:-elastic} - ELASTICSEARCH_PORT: ${ELASTICSEARCH_PORT:-9200} - ELASTICSEARCH_USERNAME: ${ELASTICSEARCH_USERNAME:-elastic} - ENDPOINT_URL_TEMPLATE: ${ENDPOINT_URL_TEMPLATE:-http://localhost/e/{hook_id}} - ETCD_AUTO_COMPACTION_MODE: ${ETCD_AUTO_COMPACTION_MODE:-revision} - ETCD_AUTO_COMPACTION_RETENTION: ${ETCD_AUTO_COMPACTION_RETENTION:-1000} - ETCD_ENDPOINTS: ${ETCD_ENDPOINTS:-etcd:2379} - ETCD_QUOTA_BACKEND_BYTES: ${ETCD_QUOTA_BACKEND_BYTES:-4294967296} - ETCD_SNAPSHOT_COUNT: ${ETCD_SNAPSHOT_COUNT:-50000} - ETL_TYPE: ${ETL_TYPE:-dify} - EXPOSE_NGINX_PORT: ${PANEL_APP_PORT_HTTP:-8080} - EXPOSE_NGINX_SSL_PORT: ${PANEL_APP_PORT_HTTPS:-8443} - EXPOSE_PLUGIN_DAEMON_PORT: ${EXPOSE_PLUGIN_DAEMON_PORT:-5002} - EXPOSE_PLUGIN_DEBUGGING_HOST: ${EXPOSE_PLUGIN_DEBUGGING_HOST:-localhost} - EXPOSE_PLUGIN_DEBUGGING_PORT: ${EXPOSE_PLUGIN_DEBUGGING_PORT:-5003} - FILES_ACCESS_TIMEOUT: ${FILES_ACCESS_TIMEOUT:-300} - FILES_URL: ${FILES_URL:-} - FLASK_DEBUG: ${FLASK_DEBUG:-false} - FORCE_VERIFYING_SIGNATURE: ${FORCE_VERIFYING_SIGNATURE:-true} - GOOGLE_STORAGE_BUCKET_NAME: ${GOOGLE_STORAGE_BUCKET_NAME:-your-bucket-name} - GOOGLE_STORAGE_SERVICE_ACCOUNT_JSON_BASE64: ${GOOGLE_STORAGE_SERVICE_ACCOUNT_JSON_BASE64:-} - GUNICORN_TIMEOUT: ${GUNICORN_TIMEOUT:-360} - HTTP_REQUEST_NODE_MAX_BINARY_SIZE: ${HTTP_REQUEST_NODE_MAX_BINARY_SIZE:-10485760} - HTTP_REQUEST_NODE_MAX_TEXT_SIZE: ${HTTP_REQUEST_NODE_MAX_TEXT_SIZE:-1048576} - HUAWEI_OBS_ACCESS_KEY: ${HUAWEI_OBS_ACCESS_KEY:-your-access-key} - HUAWEI_OBS_BUCKET_NAME: ${HUAWEI_OBS_BUCKET_NAME:-your-bucket-name} - HUAWEI_OBS_SECRET_KEY: ${HUAWEI_OBS_SECRET_KEY:-your-secret-key} - HUAWEI_OBS_SERVER: ${HUAWEI_OBS_SERVER:-your-server-url} - INDEXING_MAX_SEGMENTATION_TOKENS_LENGTH: ${INDEXING_MAX_SEGMENTATION_TOKENS_LENGTH:-4000} - INIT_PASSWORD: ${INIT_PASSWORD:-} - INVITE_EXPIRY_HOURS: ${INVITE_EXPIRY_HOURS:-72} - KIBANA_PORT: ${KIBANA_PORT:-5601} - LINDORM_PASSWORD: ${LINDORM_PASSWORD:-lindorm} - LINDORM_URL: ${LINDORM_URL:-http://lindorm:30070} - LINDORM_USERNAME: ${LINDORM_USERNAME:-lindorm} - LOG_DATEFORMAT: ${LOG_DATEFORMAT:-%Y-%m-%d %H:%M:%S} - LOG_FILE: ${LOG_FILE:-/app/logs/server.log} - LOG_FILE_BACKUP_COUNT: ${LOG_FILE_BACKUP_COUNT:-5} - LOG_FILE_MAX_SIZE: ${LOG_FILE_MAX_SIZE:-20} - LOG_LEVEL: ${LOG_LEVEL:-INFO} - LOG_TZ: ${LOG_TZ:-UTC} - MAIL_DEFAULT_SEND_FROM: ${MAIL_DEFAULT_SEND_FROM:-} - MAIL_TYPE: ${MAIL_TYPE:-resend} - MARKETPLACE_API_URL: ${MARKETPLACE_API_URL:-https://marketplace.dify.ai} - MARKETPLACE_ENABLED: ${MARKETPLACE_ENABLED:-true} - MAX_SUBMIT_COUNT: ${MAX_SUBMIT_COUNT:-100} - MAX_VARIABLE_SIZE: ${MAX_VARIABLE_SIZE:-204800} - MIGRATION_ENABLED: ${MIGRATION_ENABLED:-true} - MILVUS_AUTHORIZATION_ENABLED: ${MILVUS_AUTHORIZATION_ENABLED:-true} - MILVUS_ENABLE_HYBRID_SEARCH: ${MILVUS_ENABLE_HYBRID_SEARCH:-False} - MILVUS_PASSWORD: ${MILVUS_PASSWORD:-Milvus} - MILVUS_TOKEN: ${MILVUS_TOKEN:-} - MILVUS_URI: ${MILVUS_URI:-http://127.0.0.1:19530} - MILVUS_USER: ${MILVUS_USER:-root} - MINIO_ACCESS_KEY: ${MINIO_ACCESS_KEY:-minioadmin} - MINIO_ADDRESS: ${MINIO_ADDRESS:-minio:9000} - MINIO_SECRET_KEY: ${MINIO_SECRET_KEY:-minioadmin} - MULTIMODAL_SEND_FORMAT: ${MULTIMODAL_SEND_FORMAT:-base64} - MYSCALE_DATABASE: ${MYSCALE_DATABASE:-dify} - MYSCALE_FTS_PARAMS: ${MYSCALE_FTS_PARAMS:-} - MYSCALE_HOST: ${MYSCALE_HOST:-myscale} - MYSCALE_PASSWORD: ${MYSCALE_PASSWORD:-} - MYSCALE_PORT: ${MYSCALE_PORT:-8123} - MYSCALE_USER: ${MYSCALE_USER:-default} - NGINX_CLIENT_MAX_BODY_SIZE: ${NGINX_CLIENT_MAX_BODY_SIZE:-15M} - NGINX_ENABLE_CERTBOT_CHALLENGE: ${NGINX_ENABLE_CERTBOT_CHALLENGE:-false} - NGINX_HTTPS_ENABLED: ${NGINX_HTTPS_ENABLED:-false} - NGINX_KEEPALIVE_TIMEOUT: ${NGINX_KEEPALIVE_TIMEOUT:-65} - NGINX_PORT: ${NGINX_PORT:-80} - NGINX_PROXY_READ_TIMEOUT: ${NGINX_PROXY_READ_TIMEOUT:-3600s} - NGINX_PROXY_SEND_TIMEOUT: ${NGINX_PROXY_SEND_TIMEOUT:-3600s} - NGINX_SERVER_NAME: ${NGINX_SERVER_NAME:-_} - NGINX_SSL_CERT_FILENAME: ${NGINX_SSL_CERT_FILENAME:-dify.crt} - NGINX_SSL_CERT_KEY_FILENAME: ${NGINX_SSL_CERT_KEY_FILENAME:-dify.key} - NGINX_SSL_PORT: ${NGINX_SSL_PORT:-443} - NGINX_SSL_PROTOCOLS: ${NGINX_SSL_PROTOCOLS:-TLSv1.1 TLSv1.2 TLSv1.3} - NGINX_WORKER_PROCESSES: ${NGINX_WORKER_PROCESSES:-auto} - NOTION_CLIENT_ID: ${NOTION_CLIENT_ID:-} - NOTION_CLIENT_SECRET: ${NOTION_CLIENT_SECRET:-} - NOTION_INTEGRATION_TYPE: ${NOTION_INTEGRATION_TYPE:-public} - NOTION_INTERNAL_SECRET: ${NOTION_INTERNAL_SECRET:-} - OCEANBASE_CLUSTER_NAME: ${OCEANBASE_CLUSTER_NAME:-difyai} - OCEANBASE_MEMORY_LIMIT: ${OCEANBASE_MEMORY_LIMIT:-6G} - OCEANBASE_VECTOR_DATABASE: ${OCEANBASE_VECTOR_DATABASE:-test} - OCEANBASE_VECTOR_HOST: ${OCEANBASE_VECTOR_HOST:-oceanbase} - OCEANBASE_VECTOR_PASSWORD: ${OCEANBASE_VECTOR_PASSWORD:-difyai123456} - OCEANBASE_VECTOR_PORT: ${OCEANBASE_VECTOR_PORT:-2881} - OCEANBASE_VECTOR_USER: ${OCEANBASE_VECTOR_USER:-root@test} - OCI_ACCESS_KEY: ${OCI_ACCESS_KEY:-your-access-key} - OCI_BUCKET_NAME: ${OCI_BUCKET_NAME:-your-bucket-name} - OCI_ENDPOINT: ${OCI_ENDPOINT:-https://objectstorage.us-ashburn-1.oraclecloud.com} - OCI_REGION: ${OCI_REGION:-us-ashburn-1} - OCI_SECRET_KEY: ${OCI_SECRET_KEY:-your-secret-key} - OPENAI_API_BASE: ${OPENAI_API_BASE:-https://api.openai.com/v1} - OPENDAL_FS_ROOT: ${OPENDAL_FS_ROOT:-storage} - OPENDAL_SCHEME: ${OPENDAL_SCHEME:-fs} - OPENSEARCH_BOOTSTRAP_MEMORY_LOCK: ${OPENSEARCH_BOOTSTRAP_MEMORY_LOCK:-true} - OPENSEARCH_DISCOVERY_TYPE: ${OPENSEARCH_DISCOVERY_TYPE:-single-node} - OPENSEARCH_HOST: ${OPENSEARCH_HOST:-opensearch} - OPENSEARCH_INITIAL_ADMIN_PASSWORD: ${OPENSEARCH_INITIAL_ADMIN_PASSWORD:-Qazwsxedc!@#123} - OPENSEARCH_JAVA_OPTS_MAX: ${OPENSEARCH_JAVA_OPTS_MAX:-1024m} - OPENSEARCH_JAVA_OPTS_MIN: ${OPENSEARCH_JAVA_OPTS_MIN:-512m} - OPENSEARCH_MEMLOCK_HARD: ${OPENSEARCH_MEMLOCK_HARD:--1} - OPENSEARCH_MEMLOCK_SOFT: ${OPENSEARCH_MEMLOCK_SOFT:--1} - OPENSEARCH_NOFILE_HARD: ${OPENSEARCH_NOFILE_HARD:-65536} - OPENSEARCH_NOFILE_SOFT: ${OPENSEARCH_NOFILE_SOFT:-65536} - OPENSEARCH_PASSWORD: ${OPENSEARCH_PASSWORD:-admin} - OPENSEARCH_PORT: ${OPENSEARCH_PORT:-9200} - OPENSEARCH_SECURE: ${OPENSEARCH_SECURE:-true} - OPENSEARCH_USER: ${OPENSEARCH_USER:-admin} - ORACLE_CHARACTERSET: ${ORACLE_CHARACTERSET:-AL32UTF8} - ORACLE_DATABASE: ${ORACLE_DATABASE:-FREEPDB1} - ORACLE_HOST: ${ORACLE_HOST:-oracle} - ORACLE_PASSWORD: ${ORACLE_PASSWORD:-dify} - ORACLE_PORT: ${ORACLE_PORT:-1521} - ORACLE_PWD: ${ORACLE_PWD:-Dify123456} - ORACLE_USER: ${ORACLE_USER:-dify} - PGDATA: ${PGDATA:-/var/lib/postgresql/data/pgdata} - PGUSER: ${PGUSER:-${DB_USERNAME}} - PGVECTOR_DATABASE: ${PGVECTOR_DATABASE:-dify} - PGVECTOR_HOST: ${PGVECTOR_HOST:-pgvector} - PGVECTOR_MAX_CONNECTION: ${PGVECTOR_MAX_CONNECTION:-5} - PGVECTOR_MIN_CONNECTION: ${PGVECTOR_MIN_CONNECTION:-1} - PGVECTOR_PASSWORD: ${PGVECTOR_PASSWORD:-difyai123456} - PGVECTOR_PGDATA: ${PGVECTOR_PGDATA:-/var/lib/postgresql/data/pgdata} - PGVECTOR_PGUSER: ${PGVECTOR_PGUSER:-postgres} - PGVECTOR_PORT: ${PGVECTOR_PORT:-5432} - PGVECTOR_POSTGRES_DB: ${PGVECTOR_POSTGRES_DB:-dify} - PGVECTOR_POSTGRES_PASSWORD: ${PGVECTOR_POSTGRES_PASSWORD:-difyai123456} - PGVECTOR_USER: ${PGVECTOR_USER:-postgres} - PGVECTO_RS_DATABASE: ${PGVECTO_RS_DATABASE:-dify} - PGVECTO_RS_HOST: ${PGVECTO_RS_HOST:-pgvecto-rs} - PGVECTO_RS_PASSWORD: ${PGVECTO_RS_PASSWORD:-difyai123456} - PGVECTO_RS_PORT: ${PGVECTO_RS_PORT:-5432} - PGVECTO_RS_USER: ${PGVECTO_RS_USER:-postgres} - PLUGIN_DAEMON_KEY: ${PLUGIN_DAEMON_KEY:-lYkiYYT6owG+71oLerGzA7GXCgOT++6ovaezWAjpCjf+Sjc3ZtU+qUEi} - PLUGIN_DAEMON_PORT: ${PLUGIN_DAEMON_PORT:-5002} - PLUGIN_DAEMON_URL: ${PLUGIN_DAEMON_URL:-http://plugin_daemon:5002} - PLUGIN_DEBUGGING_HOST: ${PLUGIN_DEBUGGING_HOST:-0.0.0.0} - PLUGIN_DEBUGGING_PORT: ${PLUGIN_DEBUGGING_PORT:-5003} - PLUGIN_DIFY_INNER_API_KEY: ${PLUGIN_DIFY_INNER_API_KEY:-QaHbTe77CtuXmsfyhR7+vRjI/+XbV1AaFy691iy+kGDv2Jvy0/eAh8Y1} - PLUGIN_DIFY_INNER_API_URL: ${PLUGIN_DIFY_INNER_API_URL:-http://api:5001} - PLUGIN_MAX_PACKAGE_SIZE: ${PLUGIN_MAX_PACKAGE_SIZE:-52428800} - PLUGIN_PPROF_ENABLED: ${PLUGIN_PPROF_ENABLED:-false} - POSITION_PROVIDER_EXCLUDES: ${POSITION_PROVIDER_EXCLUDES:-} - POSITION_PROVIDER_INCLUDES: ${POSITION_PROVIDER_INCLUDES:-} - POSITION_PROVIDER_PINS: ${POSITION_PROVIDER_PINS:-} - POSITION_TOOL_EXCLUDES: ${POSITION_TOOL_EXCLUDES:-} - POSITION_TOOL_INCLUDES: ${POSITION_TOOL_INCLUDES:-} - POSITION_TOOL_PINS: ${POSITION_TOOL_PINS:-} - POSTGRES_DB: ${POSTGRES_DB:-${DB_DATABASE}} - POSTGRES_EFFECTIVE_CACHE_SIZE: ${POSTGRES_EFFECTIVE_CACHE_SIZE:-4096MB} - POSTGRES_MAINTENANCE_WORK_MEM: ${POSTGRES_MAINTENANCE_WORK_MEM:-64MB} - POSTGRES_MAX_CONNECTIONS: ${POSTGRES_MAX_CONNECTIONS:-100} - POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-${DB_PASSWORD}} - POSTGRES_SHARED_BUFFERS: ${POSTGRES_SHARED_BUFFERS:-128MB} - POSTGRES_WORK_MEM: ${POSTGRES_WORK_MEM:-4MB} - PROMPT_GENERATION_MAX_TOKENS: ${PROMPT_GENERATION_MAX_TOKENS:-512} - QDRANT_API_KEY: ${QDRANT_API_KEY:-difyai123456} - QDRANT_CLIENT_TIMEOUT: ${QDRANT_CLIENT_TIMEOUT:-20} - QDRANT_GRPC_ENABLED: ${QDRANT_GRPC_ENABLED:-false} - QDRANT_GRPC_PORT: ${QDRANT_GRPC_PORT:-6334} - QDRANT_URL: ${QDRANT_URL:-http://qdrant:6333} - REDIS_CLUSTERS: ${REDIS_CLUSTERS:-} - REDIS_CLUSTERS_PASSWORD: ${REDIS_CLUSTERS_PASSWORD:-} - REDIS_DB: ${REDIS_DB:-0} - REDIS_HOST: ${REDIS_HOST:-redis} - REDIS_PASSWORD: ${REDIS_PASSWORD:-difyai123456} - REDIS_PORT: ${REDIS_PORT:-6379} - REDIS_SENTINELS: ${REDIS_SENTINELS:-} - REDIS_SENTINEL_PASSWORD: ${REDIS_SENTINEL_PASSWORD:-} - REDIS_SENTINEL_SERVICE_NAME: ${REDIS_SENTINEL_SERVICE_NAME:-} - REDIS_SENTINEL_SOCKET_TIMEOUT: ${REDIS_SENTINEL_SOCKET_TIMEOUT:-0.1} - REDIS_SENTINEL_USERNAME: ${REDIS_SENTINEL_USERNAME:-} - REDIS_USERNAME: ${REDIS_USERNAME:-} - REDIS_USE_CLUSTERS: ${REDIS_USE_CLUSTERS:-false} - REDIS_USE_SENTINEL: ${REDIS_USE_SENTINEL:-false} - REDIS_USE_SSL: ${REDIS_USE_SSL:-false} - REFRESH_TOKEN_EXPIRE_DAYS: ${REFRESH_TOKEN_EXPIRE_DAYS:-30} - RELYT_DATABASE: ${RELYT_DATABASE:-postgres} - RELYT_HOST: ${RELYT_HOST:-db} - RELYT_PASSWORD: ${RELYT_PASSWORD:-difyai123456} - RELYT_PORT: ${RELYT_PORT:-5432} - RELYT_USER: ${RELYT_USER:-postgres} - RESEND_API_KEY: ${RESEND_API_KEY:-your-resend-api-key} - RESEND_API_URL: ${RESEND_API_URL:-https://api.resend.com} - RESET_PASSWORD_TOKEN_EXPIRY_MINUTES: ${RESET_PASSWORD_TOKEN_EXPIRY_MINUTES:-5} - S3_ACCESS_KEY: ${S3_ACCESS_KEY:-} - S3_BUCKET_NAME: ${S3_BUCKET_NAME:-difyai} - S3_ENDPOINT: ${S3_ENDPOINT:-} - S3_REGION: ${S3_REGION:-us-east-1} - S3_SECRET_KEY: ${S3_SECRET_KEY:-} - S3_USE_AWS_MANAGED_IAM: ${S3_USE_AWS_MANAGED_IAM:-false} - SANDBOX_API_KEY: ${SANDBOX_API_KEY:-dify-sandbox} - SANDBOX_ENABLE_NETWORK: ${SANDBOX_ENABLE_NETWORK:-true} - SANDBOX_GIN_MODE: ${SANDBOX_GIN_MODE:-release} - SANDBOX_HTTPS_PROXY: ${SANDBOX_HTTPS_PROXY:-http://ssrf_proxy:3128} - SANDBOX_HTTP_PROXY: ${SANDBOX_HTTP_PROXY:-http://ssrf_proxy:3128} - SANDBOX_PORT: ${SANDBOX_PORT:-8194} - SANDBOX_WORKER_TIMEOUT: ${SANDBOX_WORKER_TIMEOUT:-15} - SCARF_NO_ANALYTICS: ${SCARF_NO_ANALYTICS:-true} - SECRET_KEY: ${SECRET_KEY:-sk-9f73s3ljTXVcMT3Blb3ljTqtsKiGHXVcMT3BlbkFJLK7U} - SENTRY_DSN: ${SENTRY_DSN:-} - SERVER_WORKER_AMOUNT: ${SERVER_WORKER_AMOUNT:-1} - SERVER_WORKER_CLASS: ${SERVER_WORKER_CLASS:-gevent} - SERVER_WORKER_CONNECTIONS: ${SERVER_WORKER_CONNECTIONS:-10} - SERVICE_API_URL: ${SERVICE_API_URL:-} - SMTP_OPPORTUNISTIC_TLS: ${SMTP_OPPORTUNISTIC_TLS:-false} - SMTP_PASSWORD: ${SMTP_PASSWORD:-} - SMTP_PORT: ${SMTP_PORT:-465} - SMTP_SERVER: ${SMTP_SERVER:-} - SMTP_USERNAME: ${SMTP_USERNAME:-} - SMTP_USE_TLS: ${SMTP_USE_TLS:-true} - SQLALCHEMY_ECHO: ${SQLALCHEMY_ECHO:-false} - SQLALCHEMY_POOL_RECYCLE: ${SQLALCHEMY_POOL_RECYCLE:-3600} - SQLALCHEMY_POOL_SIZE: ${SQLALCHEMY_POOL_SIZE:-30} - SSRF_COREDUMP_DIR: ${SSRF_COREDUMP_DIR:-/var/spool/squid} - SSRF_DEFAULT_CONNECT_TIME_OUT: ${SSRF_DEFAULT_CONNECT_TIME_OUT:-5} - SSRF_DEFAULT_READ_TIME_OUT: ${SSRF_DEFAULT_READ_TIME_OUT:-5} - SSRF_DEFAULT_TIME_OUT: ${SSRF_DEFAULT_TIME_OUT:-5} - SSRF_DEFAULT_WRITE_TIME_OUT: ${SSRF_DEFAULT_WRITE_TIME_OUT:-5} - SSRF_HTTP_PORT: ${SSRF_HTTP_PORT:-3128} - SSRF_PROXY_HTTPS_URL: ${SSRF_PROXY_HTTPS_URL:-http://ssrf_proxy:3128} - SSRF_PROXY_HTTP_URL: ${SSRF_PROXY_HTTP_URL:-http://ssrf_proxy:3128} - SSRF_REVERSE_PROXY_PORT: ${SSRF_REVERSE_PROXY_PORT:-8194} - SSRF_SANDBOX_HOST: ${SSRF_SANDBOX_HOST:-sandbox} - STORAGE_TYPE: ${STORAGE_TYPE:-opendal} - SUPABASE_API_KEY: ${SUPABASE_API_KEY:-your-access-key} - SUPABASE_BUCKET_NAME: ${SUPABASE_BUCKET_NAME:-your-bucket-name} - SUPABASE_URL: ${SUPABASE_URL:-your-server-url} - TEMPLATE_TRANSFORM_MAX_LENGTH: ${TEMPLATE_TRANSFORM_MAX_LENGTH:-80000} - TENCENT_COS_BUCKET_NAME: ${TENCENT_COS_BUCKET_NAME:-your-bucket-name} - TENCENT_COS_REGION: ${TENCENT_COS_REGION:-your-region} - TENCENT_COS_SCHEME: ${TENCENT_COS_SCHEME:-your-scheme} - TENCENT_COS_SECRET_ID: ${TENCENT_COS_SECRET_ID:-your-secret-id} - TENCENT_COS_SECRET_KEY: ${TENCENT_COS_SECRET_KEY:-your-secret-key} - TENCENT_VECTOR_DB_API_KEY: ${TENCENT_VECTOR_DB_API_KEY:-dify} - TENCENT_VECTOR_DB_DATABASE: ${TENCENT_VECTOR_DB_DATABASE:-dify} - TENCENT_VECTOR_DB_REPLICAS: ${TENCENT_VECTOR_DB_REPLICAS:-2} - TENCENT_VECTOR_DB_SHARD: ${TENCENT_VECTOR_DB_SHARD:-1} - TENCENT_VECTOR_DB_TIMEOUT: ${TENCENT_VECTOR_DB_TIMEOUT:-30} - TENCENT_VECTOR_DB_URL: ${TENCENT_VECTOR_DB_URL:-http://127.0.0.1} - TENCENT_VECTOR_DB_USERNAME: ${TENCENT_VECTOR_DB_USERNAME:-dify} - TEXT_GENERATION_TIMEOUT_MS: ${TEXT_GENERATION_TIMEOUT_MS:-60000} - TIDB_API_URL: ${TIDB_API_URL:-http://127.0.0.1} - TIDB_IAM_API_URL: ${TIDB_IAM_API_URL:-http://127.0.0.1} - TIDB_ON_QDRANT_API_KEY: ${TIDB_ON_QDRANT_API_KEY:-dify} - TIDB_ON_QDRANT_CLIENT_TIMEOUT: ${TIDB_ON_QDRANT_CLIENT_TIMEOUT:-20} - TIDB_ON_QDRANT_GRPC_ENABLED: ${TIDB_ON_QDRANT_GRPC_ENABLED:-false} - TIDB_ON_QDRANT_GRPC_PORT: ${TIDB_ON_QDRANT_GRPC_PORT:-6334} - TIDB_ON_QDRANT_URL: ${TIDB_ON_QDRANT_URL:-http://127.0.0.1} - TIDB_PRIVATE_KEY: ${TIDB_PRIVATE_KEY:-dify} - TIDB_PROJECT_ID: ${TIDB_PROJECT_ID:-dify} - TIDB_PUBLIC_KEY: ${TIDB_PUBLIC_KEY:-dify} - TIDB_REGION: ${TIDB_REGION:-regions/aws-us-east-1} - TIDB_SPEND_LIMIT: ${TIDB_SPEND_LIMIT:-100} - TIDB_VECTOR_DATABASE: ${TIDB_VECTOR_DATABASE:-dify} - TIDB_VECTOR_HOST: ${TIDB_VECTOR_HOST:-tidb} - TIDB_VECTOR_PASSWORD: ${TIDB_VECTOR_PASSWORD:-} - TIDB_VECTOR_PORT: ${TIDB_VECTOR_PORT:-4000} - TIDB_VECTOR_USER: ${TIDB_VECTOR_USER:-} - TOP_K_MAX_VALUE: ${TOP_K_MAX_VALUE:-10} - UNSTRUCTURED_API_KEY: ${UNSTRUCTURED_API_KEY:-} - UNSTRUCTURED_API_URL: ${UNSTRUCTURED_API_URL:-} - UPLOAD_AUDIO_FILE_SIZE_LIMIT: ${UPLOAD_AUDIO_FILE_SIZE_LIMIT:-50} - UPLOAD_FILE_BATCH_LIMIT: ${UPLOAD_FILE_BATCH_LIMIT:-5} - UPLOAD_FILE_SIZE_LIMIT: ${UPLOAD_FILE_SIZE_LIMIT:-15} - UPLOAD_IMAGE_FILE_SIZE_LIMIT: ${UPLOAD_IMAGE_FILE_SIZE_LIMIT:-10} - UPLOAD_VIDEO_FILE_SIZE_LIMIT: ${UPLOAD_VIDEO_FILE_SIZE_LIMIT:-100} - UPSTASH_VECTOR_TOKEN: ${UPSTASH_VECTOR_TOKEN:-dify} - UPSTASH_VECTOR_URL: ${UPSTASH_VECTOR_URL:-https://xxx-vector.upstash.io} - VECTOR_STORE: ${VECTOR_STORE:-weaviate} - VIKINGDB_ACCESS_KEY: ${VIKINGDB_ACCESS_KEY:-your-ak} - VIKINGDB_CONNECTION_TIMEOUT: ${VIKINGDB_CONNECTION_TIMEOUT:-30} - VIKINGDB_HOST: ${VIKINGDB_HOST:-api-vikingdb.xxx.volces.com} - VIKINGDB_REGION: ${VIKINGDB_REGION:-cn-shanghai} - VIKINGDB_SCHEMA: ${VIKINGDB_SCHEMA:-http} - VIKINGDB_SECRET_KEY: ${VIKINGDB_SECRET_KEY:-your-sk} - VIKINGDB_SOCKET_TIMEOUT: ${VIKINGDB_SOCKET_TIMEOUT:-30} - VOLCENGINE_TOS_ACCESS_KEY: ${VOLCENGINE_TOS_ACCESS_KEY:-your-access-key} - VOLCENGINE_TOS_BUCKET_NAME: ${VOLCENGINE_TOS_BUCKET_NAME:-your-bucket-name} - VOLCENGINE_TOS_ENDPOINT: ${VOLCENGINE_TOS_ENDPOINT:-your-server-url} - VOLCENGINE_TOS_REGION: ${VOLCENGINE_TOS_REGION:-your-region} - VOLCENGINE_TOS_SECRET_KEY: ${VOLCENGINE_TOS_SECRET_KEY:-your-secret-key} - WEAVIATE_API_KEY: ${WEAVIATE_API_KEY:-WVF5YThaHlkYwhGUSmCRgsX3tD5ngdN8pkih} - WEAVIATE_AUTHENTICATION_ANONYMOUS_ACCESS_ENABLED: ${WEAVIATE_AUTHENTICATION_ANONYMOUS_ACCESS_ENABLED:-true} - WEAVIATE_AUTHENTICATION_APIKEY_ALLOWED_KEYS: ${WEAVIATE_AUTHENTICATION_APIKEY_ALLOWED_KEYS:-WVF5YThaHlkYwhGUSmCRgsX3tD5ngdN8pkih} - WEAVIATE_AUTHENTICATION_APIKEY_ENABLED: ${WEAVIATE_AUTHENTICATION_APIKEY_ENABLED:-true} - WEAVIATE_AUTHENTICATION_APIKEY_USERS: ${WEAVIATE_AUTHENTICATION_APIKEY_USERS:-hello@dify.ai} - WEAVIATE_AUTHORIZATION_ADMINLIST_ENABLED: ${WEAVIATE_AUTHORIZATION_ADMINLIST_ENABLED:-true} - WEAVIATE_AUTHORIZATION_ADMINLIST_USERS: ${WEAVIATE_AUTHORIZATION_ADMINLIST_USERS:-hello@dify.ai} - WEAVIATE_CLUSTER_HOSTNAME: ${WEAVIATE_CLUSTER_HOSTNAME:-node1} - WEAVIATE_DEFAULT_VECTORIZER_MODULE: ${WEAVIATE_DEFAULT_VECTORIZER_MODULE:-none} - WEAVIATE_ENDPOINT: ${WEAVIATE_ENDPOINT:-http://weaviate:8080} - WEAVIATE_PERSISTENCE_DATA_PATH: ${WEAVIATE_PERSISTENCE_DATA_PATH:-/var/lib/weaviate} - WEAVIATE_QUERY_DEFAULTS_LIMIT: ${WEAVIATE_QUERY_DEFAULTS_LIMIT:-25} - WEB_API_CORS_ALLOW_ORIGINS: ${WEB_API_CORS_ALLOW_ORIGINS:-*} - WEB_SENTRY_DSN: ${WEB_SENTRY_DSN:-} - WORKFLOW_CALL_MAX_DEPTH: ${WORKFLOW_CALL_MAX_DEPTH:-5} - WORKFLOW_FILE_UPLOAD_LIMIT: ${WORKFLOW_FILE_UPLOAD_LIMIT:-10} - WORKFLOW_MAX_EXECUTION_STEPS: ${WORKFLOW_MAX_EXECUTION_STEPS:-500} - WORKFLOW_MAX_EXECUTION_TIME: ${WORKFLOW_MAX_EXECUTION_TIME:-1200} - WORKFLOW_PARALLEL_DEPTH_LIMIT: ${WORKFLOW_PARALLEL_DEPTH_LIMIT:-3} diff --git a/dockge/dify/envs/default.env b/dockge/dify/envs/default.env deleted file mode 100644 index cd05f46e6..000000000 --- a/dockge/dify/envs/default.env +++ /dev/null @@ -1,2 +0,0 @@ -# copyright© 2024 XinJiang Ms Studio -ENV_FILE=.env diff --git a/dockge/dify/envs/dify.env b/dockge/dify/envs/dify.env deleted file mode 100644 index 9f6732ed9..000000000 --- a/dockge/dify/envs/dify.env +++ /dev/null @@ -1,965 +0,0 @@ -# ------------------------------ -# Environment Variables for API service & worker -# ------------------------------ - -# ------------------------------ -# Common Variables -# ------------------------------ - -# The backend URL of the console API, -# used to concatenate the authorization callback. -# If empty, it is the same domain. -# Example: https://api.console.dify.ai -CONSOLE_API_URL= - -# The front-end URL of the console web, -# used to concatenate some front-end addresses and for CORS configuration use. -# If empty, it is the same domain. -# Example: https://console.dify.ai -CONSOLE_WEB_URL= - -# Service API Url, -# used to display Service API Base Url to the front-end. -# If empty, it is the same domain. -# Example: https://api.dify.ai -SERVICE_API_URL= - -# WebApp API backend Url, -# used to declare the back-end URL for the front-end API. -# If empty, it is the same domain. -# Example: https://api.app.dify.ai -APP_API_URL= - -# WebApp Url, -# used to display WebAPP API Base Url to the front-end. -# If empty, it is the same domain. -# Example: https://app.dify.ai -APP_WEB_URL= - -# File preview or download Url prefix. -# used to display File preview or download Url to the front-end or as Multi-model inputs; -# Url is signed and has expiration time. -FILES_URL= - -# ------------------------------ -# Server Configuration -# ------------------------------ - -# The log level for the application. -# Supported values are `DEBUG`, `INFO`, `WARNING`, `ERROR`, `CRITICAL` -LOG_LEVEL=INFO -# Log file path -LOG_FILE=/app/logs/server.log -# Log file max size, the unit is MB -LOG_FILE_MAX_SIZE=20 -# Log file max backup count -LOG_FILE_BACKUP_COUNT=5 -# Log dateformat -LOG_DATEFORMAT=%Y-%m-%d %H:%M:%S -# Log Timezone -LOG_TZ=UTC - -# Debug mode, default is false. -# It is recommended to turn on this configuration for local development -# to prevent some problems caused by monkey patch. -DEBUG=false - -# Flask debug mode, it can output trace information at the interface when turned on, -# which is convenient for debugging. -FLASK_DEBUG=false - -# A secretkey 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`. -SECRET_KEY=sk-9f73s3ljTXVcMT3Blb3ljTqtsKiGHXVcMT3BlbkFJLK7U - -# Password for admin user initialization. -# If left unset, admin user will not be prompted for a password -# when creating the initial admin account. -# The length of the password cannot exceed 30 charactors. -INIT_PASSWORD= - -# Deployment environment. -# Supported values are `PRODUCTION`, `TESTING`. Default is `PRODUCTION`. -# Testing environment. There will be a distinct color label on the front-end page, -# indicating that this environment is a testing environment. -DEPLOY_ENV=PRODUCTION - -# Whether to enable the version check policy. -# If set to empty, https://updates.dify.ai will be called for version check. -CHECK_UPDATE_URL=https://updates.dify.ai - -# Used to change the OpenAI base address, default is https://api.openai.com/v1. -# When OpenAI cannot be accessed in China, replace it with a domestic mirror address, -# or when a local model provides OpenAI compatible API, it can be replaced. -OPENAI_API_BASE=https://api.openai.com/v1 - -# When enabled, migrations will be executed prior to application startup -# and the application will start after the migrations have completed. -MIGRATION_ENABLED=true - -# File Access Time specifies a time interval in seconds for the file to be accessed. -# The default value is 300 seconds. -FILES_ACCESS_TIMEOUT=300 - -# Access token expiration time in minutes -ACCESS_TOKEN_EXPIRE_MINUTES=60 - -# Refresh token expiration time in days -REFRESH_TOKEN_EXPIRE_DAYS=30 - -# The maximum number of active requests for the application, where 0 means unlimited, should be a non-negative integer. -APP_MAX_ACTIVE_REQUESTS=0 -APP_MAX_EXECUTION_TIME=1200 - -# ------------------------------ -# Container Startup Related Configuration -# Only effective when starting with docker image or docker-compose. -# ------------------------------ - -# API service binding address, default: 0.0.0.0, i.e., all addresses can be accessed. -DIFY_BIND_ADDRESS=0.0.0.0 - -# API service binding port number, default 5001. -DIFY_PORT=5001 - -# The number of API server workers, i.e., the number of workers. -# Formula: number of cpu cores x 2 + 1 for sync, 1 for Gevent -# Reference: https://docs.gunicorn.org/en/stable/design.html#how-many-workers -SERVER_WORKER_AMOUNT=1 - -# Defaults to gevent. If using windows, it can be switched to sync or solo. -SERVER_WORKER_CLASS=gevent - -# Default number of worker connections, the default is 10. -SERVER_WORKER_CONNECTIONS=10 - -# Similar to SERVER_WORKER_CLASS. -# If using windows, it can be switched to sync or solo. -CELERY_WORKER_CLASS= - -# Request handling timeout. The default is 200, -# it is recommended to set it to 360 to support a longer sse connection time. -GUNICORN_TIMEOUT=360 - -# The number of Celery workers. The default is 1, and can be set as needed. -CELERY_WORKER_AMOUNT= - -# Flag indicating whether to enable autoscaling of Celery workers. -# -# Autoscaling is useful when tasks are CPU intensive and can be dynamically -# allocated and deallocated based on the workload. -# -# When autoscaling is enabled, the maximum and minimum number of workers can -# be specified. The autoscaling algorithm will dynamically adjust the number -# of workers within the specified range. -# -# Default is false (i.e., autoscaling is disabled). -# -# Example: -# CELERY_AUTO_SCALE=true -CELERY_AUTO_SCALE=false - -# The maximum number of Celery workers that can be autoscaled. -# This is optional and only used when autoscaling is enabled. -# Default is not set. -CELERY_MAX_WORKERS= - -# The minimum number of Celery workers that can be autoscaled. -# This is optional and only used when autoscaling is enabled. -# Default is not set. -CELERY_MIN_WORKERS= - -# API Tool configuration -API_TOOL_DEFAULT_CONNECT_TIMEOUT=10 -API_TOOL_DEFAULT_READ_TIMEOUT=60 - - -# ------------------------------ -# Database Configuration -# The database uses PostgreSQL. Please use the public schema. -# It is consistent with the configuration in the 'db' service below. -# ------------------------------ - -DB_USERNAME=postgres -DB_PASSWORD=difyai123456 -DB_HOST=db -DB_PORT=5432 -DB_DATABASE=dify -# The size of the database connection pool. -# The default is 30 connections, which can be appropriately increased. -SQLALCHEMY_POOL_SIZE=30 -# Database connection pool recycling time, the default is 3600 seconds. -SQLALCHEMY_POOL_RECYCLE=3600 -# Whether to print SQL, default is false. -SQLALCHEMY_ECHO=false - -# Maximum number of connections to the database -# Default is 100 -# -# Reference: https://www.postgresql.org/docs/current/runtime-config-connection.html#GUC-MAX-CONNECTIONS -POSTGRES_MAX_CONNECTIONS=100 - -# Sets the amount of shared memory used for postgres's shared buffers. -# Default is 128MB -# Recommended value: 25% of available memory -# Reference: https://www.postgresql.org/docs/current/runtime-config-resource.html#GUC-SHARED-BUFFERS -POSTGRES_SHARED_BUFFERS=128MB - -# Sets the amount of memory used by each database worker for working space. -# Default is 4MB -# -# Reference: https://www.postgresql.org/docs/current/runtime-config-resource.html#GUC-WORK-MEM -POSTGRES_WORK_MEM=4MB - -# Sets the amount of memory reserved for maintenance activities. -# Default is 64MB -# -# Reference: https://www.postgresql.org/docs/current/runtime-config-resource.html#GUC-MAINTENANCE-WORK-MEM -POSTGRES_MAINTENANCE_WORK_MEM=64MB - -# Sets the planner's assumption about the effective cache size. -# Default is 4096MB -# -# Reference: https://www.postgresql.org/docs/current/runtime-config-query.html#GUC-EFFECTIVE-CACHE-SIZE -POSTGRES_EFFECTIVE_CACHE_SIZE=4096MB - -# ------------------------------ -# Redis Configuration -# This Redis configuration is used for caching and for pub/sub during conversation. -# ------------------------------ - -REDIS_HOST=redis -REDIS_PORT=6379 -REDIS_USERNAME= -REDIS_PASSWORD=difyai123456 -REDIS_USE_SSL=false -REDIS_DB=0 - -# Whether to use Redis Sentinel mode. -# If set to true, the application will automatically discover and connect to the master node through Sentinel. -REDIS_USE_SENTINEL=false - -# List of Redis Sentinel nodes. If Sentinel mode is enabled, provide at least one Sentinel IP and port. -# Format: `:,:,:` -REDIS_SENTINELS= -REDIS_SENTINEL_SERVICE_NAME= -REDIS_SENTINEL_USERNAME= -REDIS_SENTINEL_PASSWORD= -REDIS_SENTINEL_SOCKET_TIMEOUT=0.1 - -# List of Redis Cluster nodes. If Cluster mode is enabled, provide at least one Cluster IP and port. -# Format: `:,:,:` -REDIS_USE_CLUSTERS=false -REDIS_CLUSTERS= -REDIS_CLUSTERS_PASSWORD= - -# ------------------------------ -# Celery Configuration -# ------------------------------ - -# Use redis as the broker, and redis db 1 for celery broker. -# Format as follows: `redis://:@:/` -# Example: redis://:difyai123456@redis:6379/1 -# If use Redis Sentinel, format as follows: `sentinel://:@:/` -# Example: sentinel://localhost:26379/1;sentinel://localhost:26380/1;sentinel://localhost:26381/1 -CELERY_BROKER_URL=redis://:difyai123456@redis:6379/1 -BROKER_USE_SSL=false - -# If you are using Redis Sentinel for high availability, configure the following settings. -CELERY_USE_SENTINEL=false -CELERY_SENTINEL_MASTER_NAME= -CELERY_SENTINEL_SOCKET_TIMEOUT=0.1 - -# ------------------------------ -# CORS Configuration -# Used to set the front-end cross-domain access policy. -# ------------------------------ - -# Specifies the allowed origins for cross-origin requests to the Web API, -# e.g. https://dify.app or * for all origins. -WEB_API_CORS_ALLOW_ORIGINS=* - -# Specifies the allowed origins for cross-origin requests to the console API, -# e.g. https://cloud.dify.ai or * for all origins. -CONSOLE_CORS_ALLOW_ORIGINS=* - -# ------------------------------ -# File Storage Configuration -# ------------------------------ - -# The type of storage to use for storing user files. -STORAGE_TYPE=opendal - -# Apache OpenDAL Configuration -# The configuration for OpenDAL consists of the following format: OPENDAL__. -# You can find all the service configurations (CONFIG_NAME) in the repository at: https://github.com/apache/opendal/tree/main/core/src/services. -# Dify will scan configurations starting with OPENDAL_ and automatically apply them. -# The scheme name for the OpenDAL storage. -OPENDAL_SCHEME=fs -# Configurations for OpenDAL Local File System. -OPENDAL_FS_ROOT=storage - -# S3 Configuration -# -S3_ENDPOINT= -S3_REGION=us-east-1 -S3_BUCKET_NAME=difyai -S3_ACCESS_KEY= -S3_SECRET_KEY= -# Whether to use AWS managed IAM roles for authenticating with the S3 service. -# If set to false, the access key and secret key must be provided. -S3_USE_AWS_MANAGED_IAM=false - -# Azure Blob Configuration -# -AZURE_BLOB_ACCOUNT_NAME=difyai -AZURE_BLOB_ACCOUNT_KEY=difyai -AZURE_BLOB_CONTAINER_NAME=difyai-container -AZURE_BLOB_ACCOUNT_URL=https://.blob.core.windows.net - -# Google Storage Configuration -# -GOOGLE_STORAGE_BUCKET_NAME=your-bucket-name -GOOGLE_STORAGE_SERVICE_ACCOUNT_JSON_BASE64= - -# The Alibaba Cloud OSS configurations, -# -ALIYUN_OSS_BUCKET_NAME=your-bucket-name -ALIYUN_OSS_ACCESS_KEY=your-access-key -ALIYUN_OSS_SECRET_KEY=your-secret-key -ALIYUN_OSS_ENDPOINT=https://oss-ap-southeast-1-internal.aliyuncs.com -ALIYUN_OSS_REGION=ap-southeast-1 -ALIYUN_OSS_AUTH_VERSION=v4 -# Don't start with '/'. OSS doesn't support leading slash in object names. -ALIYUN_OSS_PATH=your-path - -# Tencent COS Configuration -# -TENCENT_COS_BUCKET_NAME=your-bucket-name -TENCENT_COS_SECRET_KEY=your-secret-key -TENCENT_COS_SECRET_ID=your-secret-id -TENCENT_COS_REGION=your-region -TENCENT_COS_SCHEME=your-scheme - -# Oracle Storage Configuration -# -OCI_ENDPOINT=https://objectstorage.us-ashburn-1.oraclecloud.com -OCI_BUCKET_NAME=your-bucket-name -OCI_ACCESS_KEY=your-access-key -OCI_SECRET_KEY=your-secret-key -OCI_REGION=us-ashburn-1 - -# Huawei OBS Configuration -# -HUAWEI_OBS_BUCKET_NAME=your-bucket-name -HUAWEI_OBS_SECRET_KEY=your-secret-key -HUAWEI_OBS_ACCESS_KEY=your-access-key -HUAWEI_OBS_SERVER=your-server-url - -# Volcengine TOS Configuration -# -VOLCENGINE_TOS_BUCKET_NAME=your-bucket-name -VOLCENGINE_TOS_SECRET_KEY=your-secret-key -VOLCENGINE_TOS_ACCESS_KEY=your-access-key -VOLCENGINE_TOS_ENDPOINT=your-server-url -VOLCENGINE_TOS_REGION=your-region - -# Baidu OBS Storage Configuration -# -BAIDU_OBS_BUCKET_NAME=your-bucket-name -BAIDU_OBS_SECRET_KEY=your-secret-key -BAIDU_OBS_ACCESS_KEY=your-access-key -BAIDU_OBS_ENDPOINT=your-server-url - -# Supabase Storage Configuration -# -SUPABASE_BUCKET_NAME=your-bucket-name -SUPABASE_API_KEY=your-access-key -SUPABASE_URL=your-server-url - -# ------------------------------ -# Vector Database Configuration -# ------------------------------ - -# The type of vector store to use. -# Supported values are `weaviate`, `qdrant`, `milvus`, `myscale`, `relyt`, `pgvector`, `pgvecto-rs`, `chroma`, `opensearch`, `tidb_vector`, `oracle`, `tencent`, `elasticsearch`, `elasticsearch-ja`, `analyticdb`, `couchbase`, `vikingdb`, `oceanbase`. -VECTOR_STORE=weaviate - -# The Weaviate endpoint URL. Only available when VECTOR_STORE is `weaviate`. -WEAVIATE_ENDPOINT=http://weaviate:8080 -WEAVIATE_API_KEY=WVF5YThaHlkYwhGUSmCRgsX3tD5ngdN8pkih - -# The Qdrant endpoint URL. Only available when VECTOR_STORE is `qdrant`. -QDRANT_URL=http://qdrant:6333 -QDRANT_API_KEY=difyai123456 -QDRANT_CLIENT_TIMEOUT=20 -QDRANT_GRPC_ENABLED=false -QDRANT_GRPC_PORT=6334 - -# Milvus configuration Only available when VECTOR_STORE is `milvus`. -# The milvus uri. -MILVUS_URI=http://127.0.0.1:19530 -MILVUS_TOKEN= -MILVUS_USER=root -MILVUS_PASSWORD=Milvus -MILVUS_ENABLE_HYBRID_SEARCH=False - -# MyScale configuration, only available when VECTOR_STORE is `myscale` -# For multi-language support, please set MYSCALE_FTS_PARAMS with referring to: -# https://myscale.com/docs/en/text-search/#understanding-fts-index-parameters -MYSCALE_HOST=myscale -MYSCALE_PORT=8123 -MYSCALE_USER=default -MYSCALE_PASSWORD= -MYSCALE_DATABASE=dify -MYSCALE_FTS_PARAMS= - -# Couchbase configurations, only available when VECTOR_STORE is `couchbase` -# The connection string must include hostname defined in the docker-compose file (couchbase-server in this case) -COUCHBASE_CONNECTION_STRING=couchbase://couchbase-server -COUCHBASE_USER=Administrator -COUCHBASE_PASSWORD=password -COUCHBASE_BUCKET_NAME=Embeddings -COUCHBASE_SCOPE_NAME=_default - -# pgvector configurations, only available when VECTOR_STORE is `pgvector` -PGVECTOR_HOST=pgvector -PGVECTOR_PORT=5432 -PGVECTOR_USER=postgres -PGVECTOR_PASSWORD=difyai123456 -PGVECTOR_DATABASE=dify -PGVECTOR_MIN_CONNECTION=1 -PGVECTOR_MAX_CONNECTION=5 - -# pgvecto-rs configurations, only available when VECTOR_STORE is `pgvecto-rs` -PGVECTO_RS_HOST=pgvecto-rs -PGVECTO_RS_PORT=5432 -PGVECTO_RS_USER=postgres -PGVECTO_RS_PASSWORD=difyai123456 -PGVECTO_RS_DATABASE=dify - -# analyticdb configurations, only available when VECTOR_STORE is `analyticdb` -ANALYTICDB_KEY_ID=your-ak -ANALYTICDB_KEY_SECRET=your-sk -ANALYTICDB_REGION_ID=cn-hangzhou -ANALYTICDB_INSTANCE_ID=gp-ab123456 -ANALYTICDB_ACCOUNT=testaccount -ANALYTICDB_PASSWORD=testpassword -ANALYTICDB_NAMESPACE=dify -ANALYTICDB_NAMESPACE_PASSWORD=difypassword -ANALYTICDB_HOST=gp-test.aliyuncs.com -ANALYTICDB_PORT=5432 -ANALYTICDB_MIN_CONNECTION=1 -ANALYTICDB_MAX_CONNECTION=5 - -# TiDB vector configurations, only available when VECTOR_STORE is `tidb` -TIDB_VECTOR_HOST=tidb -TIDB_VECTOR_PORT=4000 -TIDB_VECTOR_USER= -TIDB_VECTOR_PASSWORD= -TIDB_VECTOR_DATABASE=dify - -# Tidb on qdrant configuration, only available when VECTOR_STORE is `tidb_on_qdrant` -TIDB_ON_QDRANT_URL=http://127.0.0.1 -TIDB_ON_QDRANT_API_KEY=dify -TIDB_ON_QDRANT_CLIENT_TIMEOUT=20 -TIDB_ON_QDRANT_GRPC_ENABLED=false -TIDB_ON_QDRANT_GRPC_PORT=6334 -TIDB_PUBLIC_KEY=dify -TIDB_PRIVATE_KEY=dify -TIDB_API_URL=http://127.0.0.1 -TIDB_IAM_API_URL=http://127.0.0.1 -TIDB_REGION=regions/aws-us-east-1 -TIDB_PROJECT_ID=dify -TIDB_SPEND_LIMIT=100 - -# Chroma configuration, only available when VECTOR_STORE is `chroma` -CHROMA_HOST=127.0.0.1 -CHROMA_PORT=8000 -CHROMA_TENANT=default_tenant -CHROMA_DATABASE=default_database -CHROMA_AUTH_PROVIDER=chromadb.auth.token_authn.TokenAuthClientProvider -CHROMA_AUTH_CREDENTIALS= - -# Oracle configuration, only available when VECTOR_STORE is `oracle` -ORACLE_HOST=oracle -ORACLE_PORT=1521 -ORACLE_USER=dify -ORACLE_PASSWORD=dify -ORACLE_DATABASE=FREEPDB1 - -# relyt configurations, only available when VECTOR_STORE is `relyt` -RELYT_HOST=db -RELYT_PORT=5432 -RELYT_USER=postgres -RELYT_PASSWORD=difyai123456 -RELYT_DATABASE=postgres - -# open search configuration, only available when VECTOR_STORE is `opensearch` -OPENSEARCH_HOST=opensearch -OPENSEARCH_PORT=9200 -OPENSEARCH_USER=admin -OPENSEARCH_PASSWORD=admin -OPENSEARCH_SECURE=true - -# tencent vector configurations, only available when VECTOR_STORE is `tencent` -TENCENT_VECTOR_DB_URL=http://127.0.0.1 -TENCENT_VECTOR_DB_API_KEY=dify -TENCENT_VECTOR_DB_TIMEOUT=30 -TENCENT_VECTOR_DB_USERNAME=dify -TENCENT_VECTOR_DB_DATABASE=dify -TENCENT_VECTOR_DB_SHARD=1 -TENCENT_VECTOR_DB_REPLICAS=2 - -# ElasticSearch configuration, only available when VECTOR_STORE is `elasticsearch` -ELASTICSEARCH_HOST=0.0.0.0 -ELASTICSEARCH_PORT=9200 -ELASTICSEARCH_USERNAME=elastic -ELASTICSEARCH_PASSWORD=elastic -KIBANA_PORT=5601 - -# baidu vector configurations, only available when VECTOR_STORE is `baidu` -BAIDU_VECTOR_DB_ENDPOINT=http://127.0.0.1:5287 -BAIDU_VECTOR_DB_CONNECTION_TIMEOUT_MS=30000 -BAIDU_VECTOR_DB_ACCOUNT=root -BAIDU_VECTOR_DB_API_KEY=dify -BAIDU_VECTOR_DB_DATABASE=dify -BAIDU_VECTOR_DB_SHARD=1 -BAIDU_VECTOR_DB_REPLICAS=3 - -# VikingDB configurations, only available when VECTOR_STORE is `vikingdb` -VIKINGDB_ACCESS_KEY=your-ak -VIKINGDB_SECRET_KEY=your-sk -VIKINGDB_REGION=cn-shanghai -VIKINGDB_HOST=api-vikingdb.xxx.volces.com -VIKINGDB_SCHEMA=http -VIKINGDB_CONNECTION_TIMEOUT=30 -VIKINGDB_SOCKET_TIMEOUT=30 - -# Lindorm configuration, only available when VECTOR_STORE is `lindorm` -LINDORM_URL=http://lindorm:30070 -LINDORM_USERNAME=lindorm -LINDORM_PASSWORD=lindorm - -# OceanBase Vector configuration, only available when VECTOR_STORE is `oceanbase` -OCEANBASE_VECTOR_HOST=oceanbase -OCEANBASE_VECTOR_PORT=2881 -OCEANBASE_VECTOR_USER=root@test -OCEANBASE_VECTOR_PASSWORD=difyai123456 -OCEANBASE_VECTOR_DATABASE=test -OCEANBASE_CLUSTER_NAME=difyai -OCEANBASE_MEMORY_LIMIT=6G - -# Upstash Vector configuration, only available when VECTOR_STORE is `upstash` -UPSTASH_VECTOR_URL=https://xxx-vector.upstash.io -UPSTASH_VECTOR_TOKEN=dify - -# ------------------------------ -# Knowledge Configuration -# ------------------------------ - -# Upload file size limit, default 15M. -UPLOAD_FILE_SIZE_LIMIT=15 - -# The maximum number of files that can be uploaded at a time, default 5. -UPLOAD_FILE_BATCH_LIMIT=5 - -# ETL type, support: `dify`, `Unstructured` -# `dify` Dify's proprietary file extraction scheme -# `Unstructured` Unstructured.io file extraction scheme -ETL_TYPE=dify - -# Unstructured API path and API key, needs to be configured when ETL_TYPE is Unstructured -# Or using Unstructured for document extractor node for pptx. -# For example: http://unstructured:8000/general/v0/general -UNSTRUCTURED_API_URL= -UNSTRUCTURED_API_KEY= -SCARF_NO_ANALYTICS=true - -# ------------------------------ -# Model Configuration -# ------------------------------ - -# The maximum number of tokens allowed for prompt generation. -# This setting controls the upper limit of tokens that can be used by the LLM -# when generating a prompt in the prompt generation tool. -# Default: 512 tokens. -PROMPT_GENERATION_MAX_TOKENS=512 - -# The maximum number of tokens allowed for code generation. -# This setting controls the upper limit of tokens that can be used by the LLM -# when generating code in the code generation tool. -# Default: 1024 tokens. -CODE_GENERATION_MAX_TOKENS=1024 - -# ------------------------------ -# Multi-modal Configuration -# ------------------------------ - -# The format of the image/video/audio/document sent when the multi-modal model is input, -# the default is base64, optional url. -# The delay of the call in url mode will be lower than that in base64 mode. -# It is generally recommended to use the more compatible base64 mode. -# If configured as url, you need to configure FILES_URL as an externally accessible address so that the multi-modal model can access the image/video/audio/document. -MULTIMODAL_SEND_FORMAT=base64 -# Upload image file size limit, default 10M. -UPLOAD_IMAGE_FILE_SIZE_LIMIT=10 -# Upload video file size limit, default 100M. -UPLOAD_VIDEO_FILE_SIZE_LIMIT=100 -# Upload audio file size limit, default 50M. -UPLOAD_AUDIO_FILE_SIZE_LIMIT=50 - -# ------------------------------ -# Sentry Configuration -# Used for application monitoring and error log tracking. -# ------------------------------ -SENTRY_DSN= - -# API Service Sentry DSN address, default is empty, when empty, -# all monitoring information is not reported to Sentry. -# If not set, Sentry error reporting will be disabled. -API_SENTRY_DSN= -# API Service The reporting ratio of Sentry events, if it is 0.01, it is 1%. -API_SENTRY_TRACES_SAMPLE_RATE=1.0 -# API Service The reporting ratio of Sentry profiles, if it is 0.01, it is 1%. -API_SENTRY_PROFILES_SAMPLE_RATE=1.0 - -# Web Service Sentry DSN address, default is empty, when empty, -# all monitoring information is not reported to Sentry. -# If not set, Sentry error reporting will be disabled. -WEB_SENTRY_DSN= - -# ------------------------------ -# Notion Integration Configuration -# Variables can be obtained by applying for Notion integration: https://www.notion.so/my-integrations -# ------------------------------ - -# Configure as "public" or "internal". -# Since Notion's OAuth redirect URL only supports HTTPS, -# if deploying locally, please use Notion's internal integration. -NOTION_INTEGRATION_TYPE=public -# Notion OAuth client secret (used for public integration type) -NOTION_CLIENT_SECRET= -# Notion OAuth client id (used for public integration type) -NOTION_CLIENT_ID= -# Notion internal integration secret. -# If the value of NOTION_INTEGRATION_TYPE is "internal", -# you need to configure this variable. -NOTION_INTERNAL_SECRET= - -# ------------------------------ -# Mail related configuration -# ------------------------------ - -# Mail type, support: resend, smtp -MAIL_TYPE=resend - -# Default send from email address, if not specified -MAIL_DEFAULT_SEND_FROM= - -# API-Key for the Resend email provider, used when MAIL_TYPE is `resend`. -RESEND_API_URL=https://api.resend.com -RESEND_API_KEY=your-resend-api-key - - -# SMTP server configuration, used when MAIL_TYPE is `smtp` -SMTP_SERVER= -SMTP_PORT=465 -SMTP_USERNAME= -SMTP_PASSWORD= -SMTP_USE_TLS=true -SMTP_OPPORTUNISTIC_TLS=false - -# ------------------------------ -# Others Configuration -# ------------------------------ - -# Maximum length of segmentation tokens for indexing -INDEXING_MAX_SEGMENTATION_TOKENS_LENGTH=4000 - -# Member invitation link valid time (hours), -# Default: 72. -INVITE_EXPIRY_HOURS=72 - -# Reset password token valid time (minutes), -RESET_PASSWORD_TOKEN_EXPIRY_MINUTES=5 - -# The sandbox service endpoint. -CODE_EXECUTION_ENDPOINT=http://sandbox:8194 -CODE_EXECUTION_API_KEY=dify-sandbox -CODE_MAX_NUMBER=9223372036854775807 -CODE_MIN_NUMBER=-9223372036854775808 -CODE_MAX_DEPTH=5 -CODE_MAX_PRECISION=20 -CODE_MAX_STRING_LENGTH=80000 -CODE_MAX_STRING_ARRAY_LENGTH=30 -CODE_MAX_OBJECT_ARRAY_LENGTH=30 -CODE_MAX_NUMBER_ARRAY_LENGTH=1000 -CODE_EXECUTION_CONNECT_TIMEOUT=10 -CODE_EXECUTION_READ_TIMEOUT=60 -CODE_EXECUTION_WRITE_TIMEOUT=10 -TEMPLATE_TRANSFORM_MAX_LENGTH=80000 - -# Workflow runtime configuration -WORKFLOW_MAX_EXECUTION_STEPS=500 -WORKFLOW_MAX_EXECUTION_TIME=1200 -WORKFLOW_CALL_MAX_DEPTH=5 -MAX_VARIABLE_SIZE=204800 -WORKFLOW_PARALLEL_DEPTH_LIMIT=3 -WORKFLOW_FILE_UPLOAD_LIMIT=10 - -# HTTP request node in workflow configuration -HTTP_REQUEST_NODE_MAX_BINARY_SIZE=10485760 -HTTP_REQUEST_NODE_MAX_TEXT_SIZE=1048576 - -# SSRF Proxy server HTTP URL -SSRF_PROXY_HTTP_URL=http://ssrf_proxy:3128 -# SSRF Proxy server HTTPS URL -SSRF_PROXY_HTTPS_URL=http://ssrf_proxy:3128 - -# ------------------------------ -# Environment Variables for web Service -# ------------------------------ - -# The timeout for the text generation in millisecond -TEXT_GENERATION_TIMEOUT_MS=60000 - -# ------------------------------ -# Environment Variables for db Service -# ------------------------------ - -PGUSER=${DB_USERNAME} -# The password for the default postgres user. -POSTGRES_PASSWORD=${DB_PASSWORD} -# The name of the default postgres database. -POSTGRES_DB=${DB_DATABASE} -# postgres data directory -PGDATA=/var/lib/postgresql/data/pgdata - -# ------------------------------ -# Environment Variables for sandbox Service -# ------------------------------ - -# The API key for the sandbox service -SANDBOX_API_KEY=dify-sandbox -# The mode in which the Gin framework runs -SANDBOX_GIN_MODE=release -# The timeout for the worker in seconds -SANDBOX_WORKER_TIMEOUT=15 -# Enable network for the sandbox service -SANDBOX_ENABLE_NETWORK=true -# HTTP proxy URL for SSRF protection -SANDBOX_HTTP_PROXY=http://ssrf_proxy:3128 -# HTTPS proxy URL for SSRF protection -SANDBOX_HTTPS_PROXY=http://ssrf_proxy:3128 -# The port on which the sandbox service runs -SANDBOX_PORT=8194 - -# ------------------------------ -# Environment Variables for weaviate Service -# (only used when VECTOR_STORE is weaviate) -# ------------------------------ -WEAVIATE_PERSISTENCE_DATA_PATH=/var/lib/weaviate -WEAVIATE_QUERY_DEFAULTS_LIMIT=25 -WEAVIATE_AUTHENTICATION_ANONYMOUS_ACCESS_ENABLED=true -WEAVIATE_DEFAULT_VECTORIZER_MODULE=none -WEAVIATE_CLUSTER_HOSTNAME=node1 -WEAVIATE_AUTHENTICATION_APIKEY_ENABLED=true -WEAVIATE_AUTHENTICATION_APIKEY_ALLOWED_KEYS=WVF5YThaHlkYwhGUSmCRgsX3tD5ngdN8pkih -WEAVIATE_AUTHENTICATION_APIKEY_USERS=hello@dify.ai -WEAVIATE_AUTHORIZATION_ADMINLIST_ENABLED=true -WEAVIATE_AUTHORIZATION_ADMINLIST_USERS=hello@dify.ai - -# ------------------------------ -# Environment Variables for Chroma -# (only used when VECTOR_STORE is chroma) -# ------------------------------ - -# Authentication credentials for Chroma server -CHROMA_SERVER_AUTHN_CREDENTIALS=difyai123456 -# Authentication provider for Chroma server -CHROMA_SERVER_AUTHN_PROVIDER=chromadb.auth.token_authn.TokenAuthenticationServerProvider -# Persistence setting for Chroma server -CHROMA_IS_PERSISTENT=TRUE - -# ------------------------------ -# Environment Variables for Oracle Service -# (only used when VECTOR_STORE is Oracle) -# ------------------------------ -ORACLE_PWD=Dify123456 -ORACLE_CHARACTERSET=AL32UTF8 - -# ------------------------------ -# Environment Variables for milvus Service -# (only used when VECTOR_STORE is milvus) -# ------------------------------ -# ETCD configuration for auto compaction mode -ETCD_AUTO_COMPACTION_MODE=revision -# ETCD configuration for auto compaction retention in terms of number of revisions -ETCD_AUTO_COMPACTION_RETENTION=1000 -# ETCD configuration for backend quota in bytes -ETCD_QUOTA_BACKEND_BYTES=4294967296 -# ETCD configuration for the number of changes before triggering a snapshot -ETCD_SNAPSHOT_COUNT=50000 -# MinIO access key for authentication -MINIO_ACCESS_KEY=minioadmin -# MinIO secret key for authentication -MINIO_SECRET_KEY=minioadmin -# ETCD service endpoints -ETCD_ENDPOINTS=etcd:2379 -# MinIO service address -MINIO_ADDRESS=minio:9000 -# Enable or disable security authorization -MILVUS_AUTHORIZATION_ENABLED=true - -# ------------------------------ -# Environment Variables for pgvector / pgvector-rs Service -# (only used when VECTOR_STORE is pgvector / pgvector-rs) -# ------------------------------ -PGVECTOR_PGUSER=postgres -# The password for the default postgres user. -PGVECTOR_POSTGRES_PASSWORD=difyai123456 -# The name of the default postgres database. -PGVECTOR_POSTGRES_DB=dify -# postgres data directory -PGVECTOR_PGDATA=/var/lib/postgresql/data/pgdata - -# ------------------------------ -# Environment Variables for opensearch -# (only used when VECTOR_STORE is opensearch) -# ------------------------------ -OPENSEARCH_DISCOVERY_TYPE=single-node -OPENSEARCH_BOOTSTRAP_MEMORY_LOCK=true -OPENSEARCH_JAVA_OPTS_MIN=512m -OPENSEARCH_JAVA_OPTS_MAX=1024m -OPENSEARCH_INITIAL_ADMIN_PASSWORD=Qazwsxedc!@#123 -OPENSEARCH_MEMLOCK_SOFT=-1 -OPENSEARCH_MEMLOCK_HARD=-1 -OPENSEARCH_NOFILE_SOFT=65536 -OPENSEARCH_NOFILE_HARD=65536 - -# ------------------------------ -# Environment Variables for Nginx reverse proxy -# ------------------------------ -NGINX_SERVER_NAME=_ -NGINX_HTTPS_ENABLED=false -# HTTP port -NGINX_PORT=80 -# SSL settings are only applied when HTTPS_ENABLED is true -NGINX_SSL_PORT=443 -# if HTTPS_ENABLED is true, you're required to add your own SSL certificates/keys to the `./nginx/ssl` directory -# and modify the env vars below accordingly. -NGINX_SSL_CERT_FILENAME=dify.crt -NGINX_SSL_CERT_KEY_FILENAME=dify.key -NGINX_SSL_PROTOCOLS=TLSv1.1 TLSv1.2 TLSv1.3 - -# Nginx performance tuning -NGINX_WORKER_PROCESSES=auto -NGINX_CLIENT_MAX_BODY_SIZE=15M -NGINX_KEEPALIVE_TIMEOUT=65 - -# Proxy settings -NGINX_PROXY_READ_TIMEOUT=3600s -NGINX_PROXY_SEND_TIMEOUT=3600s - -# Set true to accept requests for /.well-known/acme-challenge/ -NGINX_ENABLE_CERTBOT_CHALLENGE=false - -# ------------------------------ -# Certbot Configuration -# ------------------------------ - -# Email address (required to get certificates from Let's Encrypt) -CERTBOT_EMAIL=your_email@example.com - -# Domain name -CERTBOT_DOMAIN=your_domain.com - -# certbot command options -# i.e: --force-renewal --dry-run --test-cert --debug -CERTBOT_OPTIONS= - -# ------------------------------ -# Environment Variables for SSRF Proxy -# ------------------------------ -SSRF_HTTP_PORT=3128 -SSRF_COREDUMP_DIR=/var/spool/squid -SSRF_REVERSE_PROXY_PORT=8194 -SSRF_SANDBOX_HOST=sandbox -SSRF_DEFAULT_TIME_OUT=5 -SSRF_DEFAULT_CONNECT_TIME_OUT=5 -SSRF_DEFAULT_READ_TIME_OUT=5 -SSRF_DEFAULT_WRITE_TIME_OUT=5 - -# ------------------------------ -# docker env var for specifying vector db type at startup -# (based on the vector db type, the corresponding docker -# compose profile will be used) -# if you want to use unstructured, add ',unstructured' to the end -# ------------------------------ -COMPOSE_PROFILES=${VECTOR_STORE:-weaviate} - -# ------------------------------ -# Docker Compose Service Expose Host Port Configurations -# ------------------------------ -EXPOSE_NGINX_PORT=80 -EXPOSE_NGINX_SSL_PORT=443 - -# ---------------------------------------------------------------------------- -# ModelProvider & Tool Position Configuration -# Used to specify the model providers and tools that can be used in the app. -# ---------------------------------------------------------------------------- - -# Pin, include, and exclude tools -# Use comma-separated values with no spaces between items. -# Example: POSITION_TOOL_PINS=bing,google -POSITION_TOOL_PINS= -POSITION_TOOL_INCLUDES= -POSITION_TOOL_EXCLUDES= - -# Pin, include, and exclude model providers -# Use comma-separated values with no spaces between items. -# Example: POSITION_PROVIDER_PINS=openai,openllm -POSITION_PROVIDER_PINS= -POSITION_PROVIDER_INCLUDES= -POSITION_PROVIDER_EXCLUDES= - -# CSP https://developer.mozilla.org/en-US/docs/Web/HTTP/CSP -CSP_WHITELIST= - -# Enable or disable create tidb service job -CREATE_TIDB_SERVICE_JOB_ENABLED=false - -# Maximum number of submitted thread count in a ThreadPool for parallel node execution -MAX_SUBMIT_COUNT=100 - -# The maximum number of top-k value for RAG. -TOP_K_MAX_VALUE=10 - -# ------------------------------ -# Plugin Daemon Configuration -# ------------------------------ - -DB_PLUGIN_DATABASE=dify_plugin -EXPOSE_PLUGIN_DAEMON_PORT=5002 -PLUGIN_DAEMON_PORT=5002 -PLUGIN_DAEMON_KEY=lYkiYYT6owG+71oLerGzA7GXCgOT++6ovaezWAjpCjf+Sjc3ZtU+qUEi -PLUGIN_DAEMON_URL=http://plugin_daemon:5002 -PLUGIN_MAX_PACKAGE_SIZE=52428800 -PLUGIN_PPROF_ENABLED=false - -PLUGIN_DEBUGGING_HOST=0.0.0.0 -PLUGIN_DEBUGGING_PORT=5003 -EXPOSE_PLUGIN_DEBUGGING_HOST=localhost -EXPOSE_PLUGIN_DEBUGGING_PORT=5003 - -PLUGIN_DIFY_INNER_API_KEY=QaHbTe77CtuXmsfyhR7+vRjI/+XbV1AaFy691iy+kGDv2Jvy0/eAh8Y1 -PLUGIN_DIFY_INNER_API_URL=http://api:5001 - -ENDPOINT_URL_TEMPLATE=http://localhost/e/{hook_id} - -MARKETPLACE_ENABLED=true -MARKETPLACE_API_URL=https://marketplace.dify.ai - -FORCE_VERIFYING_SIGNATURE=true diff --git a/dockge/dify/envs/global.env b/dockge/dify/envs/global.env deleted file mode 100644 index e10989fe4..000000000 --- a/dockge/dify/envs/global.env +++ /dev/null @@ -1,2 +0,0 @@ -# copyright© 2024 XinJiang Ms Studio -TZ=Asia/Shanghai diff --git a/dockge/mastodon/.env b/dockge/mastodon/.env deleted file mode 100644 index 0b1ed7269..000000000 --- a/dockge/mastodon/.env +++ /dev/null @@ -1,72 +0,0 @@ -# Postgres 服务 (前置检查) [必填] -PANEL_POSTGRES_TYPE=postgresql - -# Redis 服务 (前置检查) [必填] -PANEL_REDIS_TYPE=redis - -# 数据持久化路径 [必填] -MASTODON_ROOT_PATH=/home/mastodon - -# WebUI 端口 [必填] -PANEL_APP_PORT_HTTP=3000 - -# Stream 端口 [必填] -PANEL_APP_PORT_STREAM=4000 - -# 数据库加密密钥 [必填] -ACTIVE_RECORD_ENCRYPTION_DETERMINISTIC_KEY= - -# 数据库加密盐 [必填] -ACTIVE_RECORD_ENCRYPTION_KEY_DERIVATION_SALT= - -# 数据库加密主键 [必填] -ACTIVE_RECORD_ENCRYPTION_PRIMARY_KEY= - -# 密钥 [必填] -SECRET_KEY_BASE= - -# OTP 密钥 [必填] -OTP_SECRET= - -# 数据库 主机地址 [必填] -DB_HOST=127.0.0.1 - -# 数据库 端口 [必填] -DB_PORT=5432 - -# 数据库 名称 [必填] -DB_NAME=mastodon - -# 数据库 用户名 [必填] -DB_USER=mastodon - -# 数据库 密码 [必填] -DB_PASS= - -# Redis 主机 [必填] -REDIS_HOST=127.0.0.1 - -# Redis 端口 [必填] -REDIS_PORT=6379 - -# Redis 索引 (0-20) [必填] -REDIS_DB=0 - -# Redis 用户名 -REDIS_USERNAME= - -# Redis 密码 -REDIS_PASSWORD= - -# ES数据库 主机地址 -ES_HOST=127.0.0.1 - -# ES数据库 端口 -ES_PORT=9200 - -# ES数据库 用户名 -ES_USER=elastic - -# ES数据库 密码 -ES_PASS= - diff --git a/dockge/mastodon/docker-compose.yml b/dockge/mastodon/docker-compose.yml deleted file mode 100644 index 622c7676a..000000000 --- a/dockge/mastodon/docker-compose.yml +++ /dev/null @@ -1,53 +0,0 @@ -networks: - 1panel-network: - external: true -services: - mastodon: - command: bundle exec puma -C config/puma.rb - container_name: mastodon - env_file: - - ./envs/global.env - - ./envs/mastodon.env - - .env - environment: - - TZ=Asia/Shanghai - image: ghcr.io/mastodon/mastodon:v4.3.6 - labels: - createdBy: Apps - networks: - - 1panel-network - ports: - - ${PANEL_APP_PORT_HTTP}:3000 - restart: always - volumes: - - ${MASTODON_ROOT_PATH}/system:/mastodon/public/system - sidekiq-mastodon: - command: bundle exec sidekiq - container_name: sidekiq-mastodon - env_file: - - ./envs/global.env - - ./envs/mastodon.env - - .env - environment: - - TZ=Asia/Shanghai - image: ghcr.io/mastodon/mastodon:v4.3.6 - networks: - - 1panel-network - restart: always - volumes: - - ${MASTODON_ROOT_PATH}/system:/mastodon/public/system - streaming-mastodon: - command: node ./streaming/index.js - container_name: streaming-mastodon - env_file: - - ./envs/global.env - - ./envs/mastodon.env - - .env - environment: - - TZ=Asia/Shanghai - image: ghcr.io/mastodon/mastodon-streaming:v4.3.6 - networks: - - 1panel-network - ports: - - ${PANEL_APP_PORT_STREAM}:4000 - restart: always diff --git a/dockge/mastodon/envs/default.env b/dockge/mastodon/envs/default.env deleted file mode 100644 index cd05f46e6..000000000 --- a/dockge/mastodon/envs/default.env +++ /dev/null @@ -1,2 +0,0 @@ -# copyright© 2024 XinJiang Ms Studio -ENV_FILE=.env diff --git a/dockge/mastodon/envs/global.env b/dockge/mastodon/envs/global.env deleted file mode 100644 index e10989fe4..000000000 --- a/dockge/mastodon/envs/global.env +++ /dev/null @@ -1,2 +0,0 @@ -# copyright© 2024 XinJiang Ms Studio -TZ=Asia/Shanghai diff --git a/dockge/mastodon/envs/mastodon.env b/dockge/mastodon/envs/mastodon.env deleted file mode 100644 index 12ab2b6dc..000000000 --- a/dockge/mastodon/envs/mastodon.env +++ /dev/null @@ -1,109 +0,0 @@ -# This is a sample configuration file. You can generate your configuration -# with the `bundle exec rails mastodon:setup` interactive setup wizard, but to customize -# your setup even further, you'll need to edit it manually. This sample does -# not demonstrate all available configuration options. Please look at -# https://docs.joinmastodon.org/admin/config/ for the full documentation. - -# Note that this file accepts slightly different syntax depending on whether -# you are using `docker-compose` or not. In particular, if you use -# `docker-compose`, the value of each declared variable will be taken verbatim, -# including surrounding quotes. -# See: https://github.com/mastodon/mastodon/issues/16895 - -# Federation -# ---------- -# This identifies your server and cannot be changed safely later -# ---------- -LOCAL_DOMAIN=example.com - -# Redis -# ----- -REDIS_HOST=localhost -REDIS_PORT=6379 - -# PostgreSQL -# ---------- -DB_HOST=/var/run/postgresql -DB_USER=mastodon -DB_NAME=mastodon_production -DB_PASS= -DB_PORT=5432 - -# Elasticsearch (optional) -# ------------------------ -ES_ENABLED=true -ES_HOST=localhost -ES_PORT=9200 -# Authentication for ES (optional) -ES_USER=elastic -ES_PASS=password - -# Secrets -# ------- -# Make sure to use `bundle exec rails secret` to generate secrets -# ------- -SECRET_KEY_BASE= -OTP_SECRET= - -# Encryption secrets -# ------------------ -# Must be available (and set to same values) for all server processes -# These are private/secret values, do not share outside hosting environment -# Use `bin/rails db:encryption:init` to generate fresh secrets -# Do NOT change these secrets once in use, as this would cause data loss and other issues -# ------------------ -# ACTIVE_RECORD_ENCRYPTION_DETERMINISTIC_KEY= -# ACTIVE_RECORD_ENCRYPTION_KEY_DERIVATION_SALT= -# ACTIVE_RECORD_ENCRYPTION_PRIMARY_KEY= - -# Web Push -# -------- -# Generate with `bundle exec rails mastodon:webpush:generate_vapid_key` -# -------- -VAPID_PRIVATE_KEY= -VAPID_PUBLIC_KEY= - -# Sending mail -# ------------ -SMTP_SERVER= -SMTP_PORT=587 -SMTP_LOGIN= -SMTP_PASSWORD= -SMTP_FROM_ADDRESS=notifications@example.com - -# File storage (optional) -# ----------------------- -S3_ENABLED=true -S3_BUCKET=files.example.com -AWS_ACCESS_KEY_ID= -AWS_SECRET_ACCESS_KEY= -S3_ALIAS_HOST=files.example.com - -# IP and session retention -# ----------------------- -# Make sure to modify the scheduling of ip_cleanup_scheduler in config/sidekiq.yml -# to be less than daily if you lower IP_RETENTION_PERIOD below two days (172800). -# ----------------------- -IP_RETENTION_PERIOD=31556952 -SESSION_RETENTION_PERIOD=31556952 - -# Fetch All Replies Behavior -# -------------------------- -# When a user expands a post (DetailedStatus view), fetch all of its replies -# (default: false) -FETCH_REPLIES_ENABLED=false - -# Period to wait between fetching replies (in minutes) -FETCH_REPLIES_COOLDOWN_MINUTES=15 - -# Period to wait after a post is first created before fetching its replies (in minutes) -FETCH_REPLIES_INITIAL_WAIT_MINUTES=5 - -# Max number of replies to fetch - total, recursively through a whole reply tree -FETCH_REPLIES_MAX_GLOBAL=1000 - -# Max number of replies to fetch - for a single post -FETCH_REPLIES_MAX_SINGLE=500 - -# Max number of replies Collection pages to fetch - total -FETCH_REPLIES_MAX_PAGES=500