Dify AI Ӧ�ÿ�����Ŀ

docker-compose.yml 7.3KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274
  1. # Docker Compose for Dify Self-Hosted
  2. # 西安云美电子科技有限公司 - 企业知识库
  3. # 版本:基于 Dify v1.x 社区版
  4. #
  5. # 使用方法:
  6. # cp .env.example .env
  7. # 编辑 .env 填写实际值
  8. # docker compose up -d
  9. services:
  10. ### ======================== 基础设施 ========================
  11. # PostgreSQL 数据库
  12. db:
  13. image: postgres:15-alpine
  14. restart: always
  15. environment:
  16. POSTGRES_USER: ${POSTGRES_USER:-postgres}
  17. POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
  18. POSTGRES_DB: ${POSTGRES_DB:-dify}
  19. volumes:
  20. - db_data:/var/lib/postgresql/data
  21. healthcheck:
  22. test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER:-postgres}"]
  23. interval: 10s
  24. timeout: 5s
  25. retries: 5
  26. networks:
  27. - dify-network
  28. # Redis 缓存
  29. redis:
  30. image: redis:7-alpine
  31. restart: always
  32. command: redis-server --requirepass ${REDIS_PASSWORD} --appendonly yes
  33. volumes:
  34. - redis_data:/data
  35. healthcheck:
  36. test: ["CMD", "redis-cli", "-a", "${REDIS_PASSWORD}", "ping"]
  37. interval: 10s
  38. timeout: 5s
  39. retries: 5
  40. networks:
  41. - dify-network
  42. ### ======================== Dify 核心服务 ========================
  43. # Dify API 后端
  44. api:
  45. image: langgenius/dify-api:latest
  46. restart: always
  47. env_file:
  48. - .env.docker
  49. environment:
  50. # 基础配置
  51. - MODE=${DIFY_MODE:-api}
  52. - LOG_LEVEL=${LOG_LEVEL:-INFO}
  53. - LOG_FILE=${LOG_FILE:-}
  54. - SECRET_KEY=${SECRET_KEY}
  55. # 数据库配置
  56. - DB_USERNAME=${POSTGRES_USER:-postgres}
  57. - DB_PASSWORD=${POSTGRES_PASSWORD}
  58. - DB_HOST=db
  59. - DB_PORT=5432
  60. - DB_DATABASE=${POSTGRES_DB:-dify}
  61. # Redis 配置
  62. - REDIS_HOST=redis
  63. - REDIS_PORT=6379
  64. - REDIS_PASSWORD=${REDIS_PASSWORD}
  65. - REDIS_DB=${REDIS_DB:-0}
  66. # 存储配置
  67. - STORAGE_TYPE=${STORAGE_TYPE:-local}
  68. - STORAGE_LOCAL_PATH=/app/api/storage
  69. # 向量数据库
  70. - VECTOR_STORE=${VECTOR_STORE:-qdrant}
  71. - QDRANT_URL=http://qdrant:6333
  72. - QDRANT_API_KEY=${QDRANT_API_KEY:-}
  73. # S3 配置(可选)
  74. - S3_USE_CUSTOM_DOMAIN=${S3_USE_CUSTOM_DOMAIN:-true}
  75. - S3_ENDPOINT=${S3_ENDPOINT:-}
  76. - S3_BUCKET_NAME=${S3_BUCKET_NAME:-}
  77. - S3_ACCESS_KEY=${S3_ACCESS_KEY:-}
  78. - S3_SECRET_KEY=${S3_SECRET_KEY:-}
  79. - S3_REGION=${S3_REGION:-}
  80. # SandBox 配置
  81. - CODE_EXECUTION_API_KEY=${SANDBOX_API_KEY:-}
  82. - CODE_EXECUTION_API_URL=${SANDBOX_URL:-}
  83. # 模型配置(DeepSeek)
  84. - DEEPSEEK_API_BASE=${DEEPSEEK_API_BASE:-https://api.deepseek.com}
  85. - DEEPSEEK_API_KEY=${DEEPSEEK_API_KEY:-}
  86. # 其他
  87. - HTTP_APP_PORT=5001
  88. - CELERY_BROKER_URL=redis://:${REDIS_PASSWORD}@redis:6379/1
  89. - CELERY_RESULT_BACKEND=redis://:${REDIS_PASSWORD}@redis:6379/1
  90. volumes:
  91. - api_storage:/app/api/storage
  92. - app_data:/app/data
  93. depends_on:
  94. db:
  95. condition: service_healthy
  96. redis:
  97. condition: service_healthy
  98. networks:
  99. - dify-network
  100. # Dify Web 前端
  101. web:
  102. image: langgenius/dify-web:latest
  103. restart: always
  104. environment:
  105. - NEXT_PUBLIC_API_BASE_URL=${NEXT_PUBLIC_API_BASE_URL:-}
  106. - NEXT_PUBLIC_DEPLOY_ENV=${NEXT_PUBLIC_DEPLOY_ENV:-PRODUCTION}
  107. # 不使用 Nginx 时可直接访问 Web(设置 WEB_PORT=3000 启用)
  108. ports:
  109. - "${WEB_PORT:-}"
  110. volumes:
  111. - web_config:/app/config
  112. depends_on:
  113. - api
  114. networks:
  115. - dify-network
  116. # Dify Worker(异步任务处理)
  117. worker:
  118. image: langgenius/dify-api:latest
  119. restart: always
  120. env_file:
  121. - .env.docker
  122. environment:
  123. # 基础配置
  124. - MODE=${DIFY_MODE:-worker}
  125. - LOG_LEVEL=${LOG_LEVEL:-INFO}
  126. - SECRET_KEY=${SECRET_KEY}
  127. # 数据库配置
  128. - DB_USERNAME=${POSTGRES_USER:-postgres}
  129. - DB_PASSWORD=${POSTGRES_PASSWORD}
  130. - DB_HOST=db
  131. - DB_PORT=5432
  132. - DB_DATABASE=${POSTGRES_DB:-dify}
  133. # Redis 配置
  134. - REDIS_HOST=redis
  135. - REDIS_PORT=6379
  136. - REDIS_PASSWORD=${REDIS_PASSWORD}
  137. - REDIS_DB=${REDIS_DB:-0}
  138. # 存储配置
  139. - STORAGE_TYPE=${STORAGE_TYPE:-local}
  140. - STORAGE_LOCAL_PATH=/app/api/storage
  141. # 向量数据库
  142. - VECTOR_STORE=${VECTOR_STORE:-qdrant}
  143. - QDRANT_URL=http://qdrant:6333
  144. - QDRANT_API_KEY=${QDRANT_API_KEY:-}
  145. # 模型配置(DeepSeek)
  146. - DEEPSEEK_API_BASE=${DEEPSEEK_API_BASE:-https://api.deepseek.com}
  147. - DEEPSEEK_API_KEY=${DEEPSEEK_API_KEY:-}
  148. # Celery
  149. - CELERY_BROKER_URL=redis://:${REDIS_PASSWORD}@redis:6379/1
  150. - CELERY_RESULT_BACKEND=redis://:${REDIS_PASSWORD}@redis:6379/1
  151. volumes:
  152. - api_storage:/app/api/storage
  153. - app_data:/app/data
  154. depends_on:
  155. db:
  156. condition: service_healthy
  157. redis:
  158. condition: service_healthy
  159. networks:
  160. - dify-network
  161. ### ======================== 向量数据库 ========================
  162. # Qdrant 向量数据库(默认)
  163. qdrant:
  164. image: qdrant/qdrant:latest
  165. restart: always
  166. volumes:
  167. - qdrant_data:/qdrant/storage
  168. environment:
  169. - QDRANT_API_KEY=${QDRANT_API_KEY:-}
  170. ports:
  171. - "${QDRANT_PORT:-6333}:6333"
  172. networks:
  173. - dify-network
  174. ### ======================== 安全与代理 ========================
  175. # Nginx 反向代理
  176. nginx:
  177. image: nginx:alpine
  178. restart: always
  179. ports:
  180. - "${NGINX_PORT:-80}:80"
  181. - "${NGINX_SSL_PORT:-443}:443"
  182. volumes:
  183. - ./nginx/nginx.conf:/etc/nginx/nginx.conf:ro
  184. - ./nginx/ssl:/etc/nginx/ssl:ro
  185. - nginx_logs:/var/log/nginx
  186. depends_on:
  187. - api
  188. - web
  189. networks:
  190. - dify-network
  191. # SSRF 代理(安全防护)
  192. ssrf-proxy:
  193. image: ubuntu/squid:latest
  194. restart: always
  195. volumes:
  196. - ./ssrf-proxy/squid.conf.template:/etc/squid/squid.conf.template:ro
  197. environment:
  198. - HTTP_PROXY_PORT=${SSRF_PROXY_PORT:-3128}
  199. ports:
  200. - "${SSRF_PROXY_PORT:-3128}:3128"
  201. networks:
  202. - dify-network
  203. ### ======================== 可选服务 ========================
  204. # Sandbox 代码执行环境(可选,按需启用)
  205. # sandbox:
  206. # image: langgenius/dify-sandbox:latest
  207. # restart: always
  208. # environment:
  209. # - API_KEY=${SANDBOX_API_KEY}
  210. # - GIN_MODE=release
  211. # - WORKER_TIMEOUT=${SANDBOX_WORKER_TIMEOUT:-15}
  212. # - ENABLE_NETWORK=${SANDBOX_ENABLE_NETWORK:-true}
  213. # volumes:
  214. # - sandbox_data:/data
  215. # networks:
  216. # - dify-network
  217. # Elasticsearch(可选,替代 Qdrant)
  218. # elasticsearch:
  219. # image: elasticsearch:8.11.0
  220. # restart: always
  221. # volumes:
  222. # - es_data:/usr/share/elasticsearch/data
  223. # environment:
  224. # - discovery.type=single-node
  225. # - xpack.security.enabled=false
  226. # - ES_JAVA_OPTS=-Xms512m -Xmx512m
  227. # networks:
  228. # - dify-network
  229. # Weaviate(可选,替代 Qdrant)
  230. # weaviate:
  231. # image: semitechnologies/weaviate:latest
  232. # restart: always
  233. # volumes:
  234. # - weaviate_data:/var/lib/weaviate
  235. # environment:
  236. # - QUERY_DEFAULTS_LIMIT=25
  237. # - AUTHENTICATION_ANONYMOUS_ACCESS_ENABLED=true
  238. # - PERSISTENCE_DATA_PATH=/var/lib/weaviate
  239. # ports:
  240. # - "8080:8080"
  241. # networks:
  242. # - dify-network
  243. volumes:
  244. db_data:
  245. redis_data:
  246. api_storage:
  247. app_data:
  248. qdrant_data:
  249. nginx_logs:
  250. # sandbox_data:
  251. # es_data:
  252. # weaviate_data:
  253. networks:
  254. dify-network:
  255. driver: bridge