字节笔记本字节笔记本

Dify 适用于 Windows WSL 的 docker compose 配置

2024-06-21

Docker Compose配置文件定义了适用于Windows WSL的Dify应用,包括API、Worker、Web、数据库、缓存、向量存储、代理和反向代理等多个服务的设置。

version: '3'
services:
  api:
    image: langgenius/dify-api:0.6.11
    restart: always
    environment:
      MODE: api
      LOG_LEVEL: INFO
      SECRET_KEY: sk-9f73s3ljTXVcMT3Blb3ljTqtsKiGHXVcMT3BlbkFJLK7U
      CONSOLE_WEB_URL: ''
      INIT_PASSWORD: ''
      CONSOLE_API_URL: ''
      SERVICE_API_URL: ''
      APP_WEB_URL: ''
      FILES_URL: ''
      FILES_ACCESS_TIMEOUT: 300
      MIGRATION_ENABLED: 'true'
      DB_USERNAME: postgres
      DB_PASSWORD: difyai123456
      DB_HOST: db
      DB_PORT: 5432
      DB_DATABASE: dify
      REDIS_HOST: redis
      REDIS_PORT: 6379
      REDIS_USERNAME: ''
      REDIS_PASSWORD: difyai123456
      REDIS_USE_SSL: 'false'
      REDIS_DB: 0
      CELERY_BROKER_URL: redis://:difyai123456@redis:6379/1
      WEB_API_CORS_ALLOW_ORIGINS: '*'
      CONSOLE_CORS_ALLOW_ORIGINS: '*'
      STORAGE_TYPE: local
      STORAGE_LOCAL_PATH: storage
      VECTOR_STORE: weaviate
      WEAVIATE_ENDPOINT: http://weaviate:8080
      WEAVIATE_API_KEY: WVF5YThaHlkYwhGUSmCRgsX3tD5ngdN8pkih
    depends_on:
      - db
      - redis
    volumes:
      - ./volumes/app/storage:/app/api/storage
    networks:
      - ssrf_proxy_network
      - default

  worker:
    image: langgenius/dify-api:0.6.11
    restart: always
    environment:
      MODE: worker
      LOG_LEVEL: INFO
      SECRET_KEY: sk-9f73s3ljTXVcMT3Blb3ljTqtsKiGHXVcMT3BlbkFJLK7U
      DB_USERNAME: postgres
      DB_PASSWORD: difyai123456
      DB_HOST: db
      DB_PORT: 5432
      DB_DATABASE: dify
      REDIS_HOST: redis
      REDIS_PORT: 6379
      REDIS_USERNAME: ''
      REDIS_PASSWORD: difyai123456
      REDIS_DB: 0
      REDIS_USE_SSL: 'false'
      CELERY_BROKER_URL: redis://:difyai123456@redis:6379/1
      STORAGE_TYPE: local
      STORAGE_LOCAL_PATH: storage
      VECTOR_STORE: weaviate
      WEAVIATE_ENDPOINT: http://weaviate:8080
      WEAVIATE_API_KEY: WVF5YThaHlkYwhGUSmCRgsX3tD5ngdN8pkih
    depends_on:
      - db
      - redis
    volumes:
      - ./volumes/app/storage:/app/api/storage
    networks:
      - ssrf_proxy_network
      - default

  web:
    image: langgenius/dify-web:0.6.11
    restart: always
    environment:
      CONSOLE_API_URL: ''
      APP_API_URL: ''
      SENTRY_DSN: ''
    depends_on:
      - api
    networks:
      - default

  db:
    image: postgres:15-alpine
    restart: always
    environment:
      POSTGRES_USER: postgres
      POSTGRES_PASSWORD: difyai123456
      POSTGRES_DB: dify
    volumes:
      - postgres_data:/var/lib/postgresql/data
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U postgres"]
      interval: 10s
      timeout: 5s
      retries: 5
    networks:
      - default

  redis:
    image: redis:6-alpine
    restart: always
    volumes:
      - redis_data:/data
    command: redis-server --requirepass difyai123456
    healthcheck:
      test: ["CMD", "redis-cli", "ping"]
      interval: 10s
      timeout: 5s
      retries: 5
    networks:
      - default

  weaviate:
    image: semitechnologies/weaviate:1.19.0
    restart: always
    volumes:
      - weaviate_data:/var/lib/weaviate
    environment:
      QUERY_DEFAULTS_LIMIT: 25
      AUTHENTICATION_ANONYMOUS_ACCESS_ENABLED: 'false'
      PERSISTENCE_DATA_PATH: '/var/lib/weaviate'
      DEFAULT_VECTORIZER_MODULE: 'none'
      CLUSTER_HOSTNAME: 'node1'
      AUTHENTICATION_APIKEY_ENABLED: 'true'
      AUTHENTICATION_APIKEY_ALLOWED_KEYS: 'WVF5YThaHlkYwhGUSmCRgsX3tD5ngdN8pkih'
      AUTHENTICATION_APIKEY_USERS: '[email protected]'
      AUTHORIZATION_ADMINLIST_ENABLED: 'true'
      AUTHORIZATION_ADMINLIST_USERS: '[email protected]'
    networks:
      - default

  sandbox:
    image: langgenius/dify-sandbox:0.2.1
    restart: always
    environment:
      API_KEY: dify-sandbox
      GIN_MODE: 'release'
      WORKER_TIMEOUT: 15
      ENABLE_NETWORK: 'true'
      HTTP_PROXY: 'http://ssrf_proxy:3128'
      HTTPS_PROXY: 'http://ssrf_proxy:3128'
      SANDBOX_PORT: 8194
    volumes:
      - ./volumes/sandbox/dependencies:/dependencies
    networks:
      - ssrf_proxy_network

  ssrf_proxy:
    image: ubuntu/squid:latest
    restart: always
    volumes:
      - ./volumes/ssrf_proxy/squid.conf:/etc/squid/squid.conf
    networks:
      - ssrf_proxy_network
      - default

  nginx:
    image: nginx:latest
    restart: always
    volumes:
      - ./nginx/nginx.conf:/etc/nginx/nginx.conf
      - ./nginx/proxy.conf:/etc/nginx/proxy.conf
      - ./nginx/conf.d:/etc/nginx/conf.d
    depends_on:
      - api
      - web
    ports:
      - "80:80"
    networks:
      - default

volumes:
  postgres_data:
  redis_data:
  weaviate_data:

networks:
  ssrf_proxy_network:
    driver: bridge
    internal: true
  default:
  1. api:

    • 使用 langgenius/dify-api:0.6.11 镜像。
    • 环境变量配置了数据库、Redis、Weaviate 和其他服务的连接信息。
    • 持续重启,依赖 dbredis 服务。
    • 挂载本地存储到容器。
  2. worker:

    • 同样使用 langgenius/dify-api:0.6.11 镜像,但模式为 worker
    • 环境变量类似 api 服务,配置了数据库、Redis 和 Weaviate 的连接信息。
    • 持续重启,依赖 dbredis 服务。
    • 挂载本地存储到容器。
  3. web:

    • 使用 langgenius/dify-web:0.6.11 镜像。
    • 环境变量配置了 API URL 和 Sentry DSN(用于错误监控)。
    • 持续重启,依赖 api 服务。
  4. db:

    • 使用 postgres:15-alpine 镜像。
    • 配置了 PostgreSQL 数据库的用户名、密码和数据库名。
    • 持续重启,并且有健康检查配置。
    • 挂载本地存储到容器。
  5. redis:

    • 使用 redis:6-alpine 镜像。
    • 配置了 Redis 密码和健康检查。
    • 持续重启,挂载本地存储到容器。
  6. weaviate:

    • 使用 semitechnologies/weaviate:1.19.0 镜像。
    • 配置了 Weaviate 的身份验证和授权,以及数据持久化路径。
    • 持续重启,挂载本地存储到容器。
  7. sandbox:

    • 使用 langgenius/dify-sandbox:0.2.1 镜像。
    • 配置了 API 密钥、Gin 模式、代理设置等。
    • 持续重启,挂载本地存储到容器。
  8. ssrf_proxy:

    • 使用 ubuntu/squid:latest 镜像。
    • 挂载了本地的 Squid 配置文件。
    • 持续重启。
  9. nginx:

    • 使用 nginx:latest 镜像。
    • 挂载了本地的 Nginx 配置文件。
    • 持续重启,依赖 apiweb 服务。
    • 映射主机的 80 端口到容器的 80 端口。

卷 (Volumes)

  • postgres_data: 用于持久化 PostgreSQL 数据。
  • redis_data: 用于持久化 Redis 数据。
  • weaviate_data: 用于持久化 Weaviate 数据。

网络 (Networks)

  • ssrf_proxy_network: 内部网络,用于 Sandbox 和 SSRF 代理之间的通信。
  • default: 默认网络,供所有服务使用。

这个配置文件涵盖了 API、Web、数据库、缓存、向量存储、代理和反向代理等多个服务的设置,适用于一个复杂的微服务架构应用。