Dify中的docker-compose.yaml分析-web、db、redis、weaviate等

打印 上一主题 下一主题

主题 775|帖子 775|积分 2325

本文重要介绍了web、db、redis、weaviate、sandbox和ssrf_proxy等服务的配置,除此之外,还有Qdrant(向量数据库)、Milvus(向量数据库)和Nginx(反向代理)服务不再介绍。
1.web服务:前端应用

  1. # Frontend web application.
  2. web:
  3.   image: langgenius/dify-web:0.6.9
  4.   restart: always
  5.   environment:
  6.     # The base URL of console application api server, refers to the Console base URL of WEB service if console domain is
  7.     # different from api or web app domain.
  8.     # example: http://cloud.dify.ai
  9.     CONSOLE_API_URL: ''
  10.     # The URL for Web APP api server, refers to the Web App base URL of WEB service if web app domain is different from
  11.     # console or api domain.
  12.     # example: http://udify.app
  13.     APP_API_URL: ''
  14.     # The DSN for Sentry error reporting. If not set, Sentry error reporting will be disabled.
  15.     SENTRY_DSN: ''
  16.   # uncomment to expose dify-web port to host
  17.   # ports:
  18.   #   - "3000:3000"
复制代码
  1. # Frontend web application.
  2. web:
  3.   image: langgenius/dify-web:0.6.9
复制代码
使用名为 langgenius/dify-web 的 Docker 镜像,版本为 0.6.9,启动前端 Web 应用步伐。
  1.   restart: always
复制代码
确保容器在任何环境下(比方瓦解、体系重启等)都主动重启。
  1.   environment:
复制代码
界说容器运行时的环境变量。
  1.     # The base URL of console application api server, refers to the Console base URL of WEB service if console domain is
  2.     # different from api or web app domain.
  3.     # example: http://cloud.dify.ai
  4.     CONSOLE_API_URL: ''
复制代码
控制台应用步伐 API 服务器的根本 URL。假如控制台域名与 API 或 Web 应用域名不同,则指向 Web 服务的控制台根本 URL。此处未设置值。
  1.     # The URL for Web APP api server, refers to the Web App base URL of WEB service if web app domain is different from
  2.     # console or api domain.
  3.     # example: http://udify.app
  4.     APP_API_URL: ''
复制代码
Web 应用 API 服务器的 URL。假如 Web 应用域名与控制台或 API 域名不同,则指向 Web 服务的 Web 应用根本 URL。此处未设置值。
  1.     # The DSN for Sentry error reporting. If not set, Sentry error reporting will be disabled.
  2.     SENTRY_DSN: ''
复制代码
Sentry 错误报告的数据源名称。假如未设置,则禁用 Sentry 错误报告。此处未设置值。
  1.   # uncomment to expose dify-web port to host
  2.   # ports:
  3.   #   - "3000:3000"
复制代码
端口配置,取消注释以将 dify-web 端口袒露给主机。


  • ports:指定端口映射,比方 "3000:3000"。
2.db服务:Postgres数据库

  1. # The postgres database.
  2. db:
  3.   image: postgres:15-alpine
  4.   restart: always
  5.   environment:
  6.     PGUSER: postgres
  7.     # The password for the default postgres user.
  8.     POSTGRES_PASSWORD: difyai123456
  9.     # The name of the default postgres database.
  10.     POSTGRES_DB: dify
  11.     # postgres data directory
  12.     PGDATA: /var/lib/postgresql/data/pgdata
  13.   volumes:
  14.     - db_data:/var/lib/postgresql/data
  15.   # uncomment to expose db(postgresql) port to host
  16.   ports:
  17.     - "5432:5432"
  18.   healthcheck:
  19.     test: [ "CMD", "pg_isready" ]
  20.     interval: 1s
  21.     timeout: 3s
  22.     retries: 30
复制代码
  1. # The postgres database.
  2. db:
  3.   image: postgres:15-alpine
复制代码
使用名为 postgres 的 Docker 镜像,版本为 15-alpine,启动 PostgreSQL 数据库。
  1.   restart: always
复制代码
确保容器在任何环境下(比方瓦解、体系重启等)都主动重启。
  1.   environment:
复制代码
界说容器运行时的环境变量。
  1.     PGUSER: postgres
复制代码
默认的 PostgreSQL 用户名。
  1.     # The password for the default postgres user.
  2.     POSTGRES_PASSWORD: difyai123456
复制代码
默认的 PostgreSQL 用户暗码。
  1.     # The name of the default postgres database.
  2.     POSTGRES_DB: dify
复制代码
默认的 PostgreSQL 数据库名称。
  1.     # postgres data directory
  2.     PGDATA: /var/lib/postgresql/data/pgdata
复制代码
PostgreSQL 数据目次。
  1.   volumes:
  2.     - db_data:/var/lib/postgresql/data
复制代码
卷配置,将命名卷 db_data 挂载到容器中的 /var/lib/postgresql/data 目次,以长期化存储 PostgreSQL 数据。
  1.   # uncomment to expose db(postgresql) port to host
  2.   ports:
  3.     - "5432:5432"
复制代码
端口配置,取消注释以将 PostgreSQL 端口袒露给主机。


  • ports:指定端口映射,比方 "5432:5432"。
  1.   healthcheck:
  2.     test: [ "CMD", "pg_isready" ]
复制代码
健康检查,使用 pg_isready 命令测试 PostgreSQL 的健康状态。
  1.     interval: 1s
复制代码
健康检查的时间间隔,每 1 秒检查一次。
  1.     timeout: 3s
复制代码
健康检查的超时时间,3 秒后超时。
  1.     retries: 30
复制代码
健康检查的重试次数,最多重试 30 次。
3.redis服务:Redis缓存

  1. # The redis cache.
  2. redis:
  3.   image: redis:6-alpine
  4.   restart: always
  5.   volumes:
  6.     # Mount the redis data directory to the container.
  7.     - ./volumes/redis/data:/data
  8.   # Set the redis password when startup redis server.
  9.   command: redis-server --requirepass difyai123456
  10.   healthcheck:
  11.     test: [ "CMD", "redis-cli", "ping" ]
  12.   # uncomment to expose redis port to host
  13.   # ports:
  14.   #   - "6379:6379"
复制代码
  1. # The redis cache.
  2. redis:
  3.   image: redis:6-alpine
复制代码
使用名为 redis 的 Docker 镜像,版本为 6-alpine,启动 Redis 缓存服务。
  1.   restart: always
复制代码
确保容器在任何环境下(比方瓦解、体系重启等)都主动重启。
  1.   volumes:
  2.     # Mount the redis data directory to the container.
  3.     - ./volumes/redis/data:/data
复制代码
卷配置,将本地目次 ./volumes/redis/data 挂载到容器中的 /data 目次,以长期化存储 Redis 数据。
  1.   # Set the redis password when startup redis server.
  2.   command: redis-server --requirepass difyai123456
复制代码
启动 Redis 服务器时设置暗码 difyai123456。
  1.   healthcheck:
  2.     test: [ "CMD", "redis-cli", "ping" ]
复制代码
健康检查,使用 redis-cli ping 命令测试 Redis 的健康状态。
  1.   # uncomment to expose redis port to host
  2.   # ports:
  3.   #   - "6379:6379"
复制代码
端口配置,取消注释以将 Redis 端口袒露给主机。


  • ports:指定端口映射,比方 "6379:6379"。
4.weaviate服务:向量数据库

  1. # The Weaviate vector store.
  2. weaviate:
  3.   image: semitechnologies/weaviate:1.19.0
  4.   restart: always
  5.   volumes:
  6.     # Mount the Weaviate data directory to the container.
  7.     - ./volumes/weaviate:/var/lib/weaviate
  8.   environment:
  9.     # The Weaviate configurations
  10.     # You can refer to the [Weaviate](https://weaviate.io/developers/weaviate/config-refs/env-vars) documentation for more information.
  11.     QUERY_DEFAULTS_LIMIT: 25
  12.     AUTHENTICATION_ANONYMOUS_ACCESS_ENABLED: 'false'
  13.     PERSISTENCE_DATA_PATH: '/var/lib/weaviate'
  14.     DEFAULT_VECTORIZER_MODULE: 'none'
  15.     CLUSTER_HOSTNAME: 'node1'
  16.     AUTHENTICATION_APIKEY_ENABLED: 'true'
  17.     AUTHENTICATION_APIKEY_ALLOWED_KEYS: 'WVF5YThaHlkYwhGUSmCRgsX3tD5ngdN8pkih'
  18.     AUTHENTICATION_APIKEY_USERS: 'hello@dify.ai'
  19.     AUTHORIZATION_ADMINLIST_ENABLED: 'true'
  20.     AUTHORIZATION_ADMINLIST_USERS: 'hello@dify.ai'
  21.   # uncomment to expose weaviate port to host
  22.   # ports:
  23.   #  - "8080:8080"
复制代码
  1. # The Weaviate vector store.
  2. weaviate:
  3.   image: semitechnologies/weaviate:1.19.0
复制代码
使用名为 semitechnologies/weaviate 的 Docker 镜像,版本为 1.19.0,启动 Weaviate 向量存储服务。
  1.   restart: always
复制代码
确保容器在任何环境下(比方瓦解、体系重启等)都主动重启。
  1.   volumes:
  2.     # Mount the Weaviate data directory to the container.
  3.     - ./volumes/weaviate:/var/lib/weaviate
复制代码
卷配置,将本地目次 ./volumes/weaviate 挂载到容器中的 /var/lib/weaviate 目次,以长期化存储 Weaviate 数据。
  1.   environment:
复制代码
界说容器运行时的环境变量。
  1.     # The Weaviate configurations
  2.     # You can refer to the [Weaviate](https://weaviate.io/developers/weaviate/config-refs/env-vars) documentation for more information.
  3.     QUERY_DEFAULTS_LIMIT: 25
复制代码
Weaviate 配置项,设置默认查询限制为 25。
  1.     AUTHENTICATION_ANONYMOUS_ACCESS_ENABLED: 'false'
复制代码
禁用匿名访问。
  1.     PERSISTENCE_DATA_PATH: '/var/lib/weaviate'
复制代码
设置数据长期化路径为 /var/lib/weaviate。
  1.     DEFAULT_VECTORIZER_MODULE: 'none'
复制代码
设置默认的向量化模块为 none。
  1.     CLUSTER_HOSTNAME: 'node1'
复制代码
设置集群主机名为 node1。
  1.     AUTHENTICATION_APIKEY_ENABLED: 'true'
复制代码
启用 API 密钥身份验证。
  1.     AUTHENTICATION_APIKEY_ALLOWED_KEYS: 'WVF5YThaHlkYwhGUSmCRgsX3tD5ngdN8pkih'
复制代码
答应的 API 密钥为 WVF5YThaHlkYwhGUSmCRgsX3tD5ngdN8pkih。
  1.     AUTHENTICATION_APIKEY_USERS: 'hello@dify.ai'
复制代码
API 密钥用户为 hello@dify.ai。
  1.     AUTHORIZATION_ADMINLIST_ENABLED: 'true'
复制代码
启用管理员列表授权。
  1.     AUTHORIZATION_ADMINLIST_USERS: 'hello@dify.ai'
复制代码
管理员列表用户为 hello@dify.ai。
  1.   # uncomment to expose weaviate port to host
  2.   # ports:
  3.   #  - "8080:8080"
复制代码
端口配置,取消注释以将 Weaviate 端口袒露给主机。


  • ports:指定端口映射,比方 "8080:8080"。
5.sandbox服务:沙盒

  1. # The DifySandbox
  2. sandbox:
  3.   image: langgenius/dify-sandbox:0.2.0
  4.   restart: always
  5.   environment:
  6.     # The DifySandbox configurations
  7.     # Make sure you are changing this key for your deployment with a strong key.
  8.     # You can generate a strong key using `openssl rand -base64 42`.
  9.     API_KEY: dify-sandbox
  10.     GIN_MODE: 'release'
  11.     WORKER_TIMEOUT: 15
  12.     ENABLE_NETWORK: 'true'
  13.     HTTP_PROXY: 'http://ssrf_proxy:3128'
  14.     HTTPS_PROXY: 'http://ssrf_proxy:3128'
  15.   volumes:
  16.     - ./volumes/sandbox/dependencies:/dependencies
  17.   networks:
  18.     - ssrf_proxy_network
复制代码
  1. # The DifySandbox
  2. sandbox:
  3.   image: langgenius/dify-sandbox:0.2.0
复制代码
使用名为 langgenius/dify-sandbox 的 Docker 镜像,版本为 0.2.0,启动 DifySandbox 服务。
  1.   restart: always
复制代码
确保容器在任何环境下(比方瓦解、体系重启等)都主动重启。
  1.   environment:
复制代码
界说容器运行时的环境变量。
  1.     # The DifySandbox configurations
  2.     # Make sure you are changing this key for your deployment with a strong key.
  3.     # You can generate a strong key using `openssl rand -base64 42`.
  4.     API_KEY: dify-sandbox
复制代码
DifySandbox 配置项,设置 API 密钥为 dify-sandbox。确保在摆设时使用强密钥,可以使用 openssl rand -base64 42 生成。
  1.     GIN_MODE: 'release'
复制代码
设置 Gin 框架的运行模式为 release。
  1.     WORKER_TIMEOUT: 15
复制代码
设置工作超时时间为 15 秒。
  1.     ENABLE_NETWORK: 'true'
复制代码
启用网络访问。
  1.     HTTP_PROXY: 'http://ssrf_proxy:3128'
复制代码
设置 HTTP 代理为 http://ssrf_proxy:3128。
  1.     HTTPS_PROXY: 'http://ssrf_proxy:3128'
复制代码
设置 HTTPS 代理为 http://ssrf_proxy:3128。
  1.   volumes:
  2.     - ./volumes/sandbox/dependencies:/dependencies
复制代码
卷配置,将本地目次 ./volumes/sandbox/dependencies 挂载到容器中的 /dependencies 目次,以存储依靠项。
  1.   networks:
  2.     - ssrf_proxy_network
复制代码
网络配置,指定此服务毗连到 ssrf_proxy_network 网络。
6.ssrf_proxy服务:SSRF代理服务

  1. # ssrf_proxy server
  2. # for more information, please refer to
  3. # https://docs.dify.ai/getting-started/install-self-hosted/install-faq#id-16.-why-is-ssrf_proxy-needed
  4. ssrf_proxy:
  5.   image: ubuntu/squid:latest
  6.   restart: always
  7.   volumes:
  8.     # pls clearly modify the squid.conf file to fit your network environment.
  9.     - ./volumes/ssrf_proxy/squid.conf:/etc/squid/squid.conf
  10.   networks:
  11.     - ssrf_proxy_network
  12.     - default
复制代码
  1. # ssrf_proxy server
  2. # for more information, please refer to
  3. # https://docs.dify.ai/getting-started/install-self-hosted/install-faq#id-16.-why-is-ssrf_proxy-needed
  4. ssrf_proxy:
  5.   image: ubuntu/squid:latest
复制代码
使用名为 ubuntu/squid 的 Docker 镜像,最新版本,启动 SSRF 代理服务器。更多信息请参考 Dify 文档。
  1.   restart: always
复制代码
确保容器在任何环境下(比方瓦解、体系重启等)都主动重启。
  1.   volumes:
  2.     # pls clearly modify the squid.conf file to fit your network environment.
  3.     - ./volumes/ssrf_proxy/squid.conf:/etc/squid/squid.conf
复制代码
卷配置,将本地目次 ./volumes/ssrf_proxy/squid.conf 挂载到容器中的 /etc/squid/squid.conf 文件。请明确修改 squid.conf 文件以顺应您的网络环境。
  1.   networks:
  2.     - ssrf_proxy_network
  3.     - default
复制代码
网络配置,指定此服务毗连到 ssrf_proxy_network 和 default 网络。
7.ssrf_proxy_network:SSRF代理网络

  1. networks:
  2.   # create a network between sandbox, api and ssrf_proxy, and can not access outside.
  3.   ssrf_proxy_network:
  4.     driver: bridge
  5.     internal: true
复制代码
ssrf_proxy_network 是 Docker Compose 文件中界说的一个网络。在这个网络中的服务可以相互通信,但不能访问 Docker 主机的网络。
在这个项目中,ssrf_proxy_network 用于毗连 sandbox,api 和 ssrf_proxy 服务。这意味着这些服务可以相互通信,但不能访问 Docker 主机的网络。这是一种安全措施,可以防止潜在的网络攻击。
ssrf_proxy 服务是一个代理服务器,用于处理来自 sandbox 和 api 服务的网络请求。如许,所有的网络请求都会通过 ssrf_proxy 服务,这可以提供额外的安全控制和日记记录。
internal: true 表现这个网络是内部的,这意味着这个网络中的服务不能访问 Docker 主机的网络。这是一种安全措施,可以防止潜在的网络攻击。
参考文献

[1] 为什么需要SSRF_PROXY:https://docs.dify.ai/v/zh-hans/learn-more/faq/install-faq#id-18.-wei-shi-mo-xu-yao-ssrfproxy
[2] Squid configuration directives:https://www.squid-cache.org/Doc/config/
[3] Server-side request forgery (SSRF):https://portswigger.net/web-security/ssrf

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

魏晓东

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表