Dify AI Ӧ�ÿ�����Ŀ

docker-compose.yml 7.3KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270
  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. environment:
  48. # 基础配置
  49. - MODE=${DIFY_MODE:-api}
  50. - LOG_LEVEL=${LOG_LEVEL:-INFO}
  51. - LOG_FILE=${LOG_FILE:-}
  52. - SECRET_KEY=${SECRET_KEY}
  53. # 数据库配置
  54. - DB_USERNAME=${POSTGRES_USER:-postgres}
  55. - DB_PASSWORD=${POSTGRES_PASSWORD}
  56. - DB_HOST=db
  57. - DB_PORT=5432
  58. - DB_DATABASE=${POSTGRES_DB:-dify}
  59. # Redis 配置
  60. - REDIS_HOST=redis
  61. - REDIS_PORT=6379
  62. - REDIS_PASSWORD=${REDIS_PASSWORD}
  63. - REDIS_DB=${REDIS_DB:-0}
  64. # 存储配置
  65. - STORAGE_TYPE=${STORAGE_TYPE:-local}
  66. - STORAGE_LOCAL_PATH=/app/api/storage
  67. # 向量数据库
  68. - VECTOR_STORE=${VECTOR_STORE:-qdrant}
  69. - QDRANT_URL=http://qdrant:6333
  70. - QDRANT_API_KEY=${QDRANT_API_KEY:-}
  71. # S3 配置(可选)
  72. - S3_USE_CUSTOM_DOMAIN=${S3_USE_CUSTOM_DOMAIN:-true}
  73. - S3_ENDPOINT=${S3_ENDPOINT:-}
  74. - S3_BUCKET_NAME=${S3_BUCKET_NAME:-}
  75. - S3_ACCESS_KEY=${S3_ACCESS_KEY:-}
  76. - S3_SECRET_KEY=${S3_SECRET_KEY:-}
  77. - S3_REGION=${S3_REGION:-}
  78. # SandBox 配置
  79. - CODE_EXECUTION_API_KEY=${SANDBOX_API_KEY:-}
  80. - CODE_EXECUTION_API_URL=${SANDBOX_URL:-}
  81. # 模型配置(DeepSeek)
  82. - DEEPSEEK_API_BASE=${DEEPSEEK_API_BASE:-https://api.deepseek.com}
  83. - DEEPSEEK_API_KEY=${DEEPSEEK_API_KEY:-}
  84. # 其他
  85. - HTTP_APP_PORT=5001
  86. - CELERY_BROKER_URL=redis://:${REDIS_PASSWORD}@redis:6379/1
  87. - CELERY_RESULT_BACKEND=redis://:${REDIS_PASSWORD}@redis:6379/1
  88. volumes:
  89. - api_storage:/app/api/storage
  90. - app_data:/app/data
  91. depends_on:
  92. db:
  93. condition: service_healthy
  94. redis:
  95. condition: service_healthy
  96. networks:
  97. - dify-network
  98. # Dify Web 前端
  99. web:
  100. image: langgenius/dify-web:latest
  101. restart: always
  102. environment:
  103. - NEXT_PUBLIC_API_BASE_URL=${NEXT_PUBLIC_API_BASE_URL:-}
  104. - NEXT_PUBLIC_DEPLOY_ENV=${NEXT_PUBLIC_DEPLOY_ENV:-PRODUCTION}
  105. # 不使用 Nginx 时可直接访问 Web(设置 WEB_PORT=3000 启用)
  106. ports:
  107. - "${WEB_PORT:-}"
  108. volumes:
  109. - web_config:/app/config
  110. depends_on:
  111. - api
  112. networks:
  113. - dify-network
  114. # Dify Worker(异步任务处理)
  115. worker:
  116. image: langgenius/dify-api:latest
  117. restart: always
  118. environment:
  119. # 基础配置
  120. - MODE=${DIFY_MODE:-worker}
  121. - LOG_LEVEL=${LOG_LEVEL:-INFO}
  122. - SECRET_KEY=${SECRET_KEY}
  123. # 数据库配置
  124. - DB_USERNAME=${POSTGRES_USER:-postgres}
  125. - DB_PASSWORD=${POSTGRES_PASSWORD}
  126. - DB_HOST=db
  127. - DB_PORT=5432
  128. - DB_DATABASE=${POSTGRES_DB:-dify}
  129. # Redis 配置
  130. - REDIS_HOST=redis
  131. - REDIS_PORT=6379
  132. - REDIS_PASSWORD=${REDIS_PASSWORD}
  133. - REDIS_DB=${REDIS_DB:-0}
  134. # 存储配置
  135. - STORAGE_TYPE=${STORAGE_TYPE:-local}
  136. - STORAGE_LOCAL_PATH=/app/api/storage
  137. # 向量数据库
  138. - VECTOR_STORE=${VECTOR_STORE:-qdrant}
  139. - QDRANT_URL=http://qdrant:6333
  140. - QDRANT_API_KEY=${QDRANT_API_KEY:-}
  141. # 模型配置(DeepSeek)
  142. - DEEPSEEK_API_BASE=${DEEPSEEK_API_BASE:-https://api.deepseek.com}
  143. - DEEPSEEK_API_KEY=${DEEPSEEK_API_KEY:-}
  144. # Celery
  145. - CELERY_BROKER_URL=redis://:${REDIS_PASSWORD}@redis:6379/1
  146. - CELERY_RESULT_BACKEND=redis://:${REDIS_PASSWORD}@redis:6379/1
  147. volumes:
  148. - api_storage:/app/api/storage
  149. - app_data:/app/data
  150. depends_on:
  151. db:
  152. condition: service_healthy
  153. redis:
  154. condition: service_healthy
  155. networks:
  156. - dify-network
  157. ### ======================== 向量数据库 ========================
  158. # Qdrant 向量数据库(默认)
  159. qdrant:
  160. image: qdrant/qdrant:latest
  161. restart: always
  162. volumes:
  163. - qdrant_data:/qdrant/storage
  164. environment:
  165. - QDRANT_API_KEY=${QDRANT_API_KEY:-}
  166. ports:
  167. - "${QDRANT_PORT:-6333}:6333"
  168. networks:
  169. - dify-network
  170. ### ======================== 安全与代理 ========================
  171. # Nginx 反向代理
  172. nginx:
  173. image: nginx:alpine
  174. restart: always
  175. ports:
  176. - "${NGINX_PORT:-80}:80"
  177. - "${NGINX_SSL_PORT:-443}:443"
  178. volumes:
  179. - ./nginx/nginx.conf:/etc/nginx/nginx.conf:ro
  180. - ./nginx/ssl:/etc/nginx/ssl:ro
  181. - nginx_logs:/var/log/nginx
  182. depends_on:
  183. - api
  184. - web
  185. networks:
  186. - dify-network
  187. # SSRF 代理(安全防护)
  188. ssrf-proxy:
  189. image: ubuntu/squid:latest
  190. restart: always
  191. volumes:
  192. - ./ssrf-proxy/squid.conf.template:/etc/squid/squid.conf.template:ro
  193. environment:
  194. - HTTP_PROXY_PORT=${SSRF_PROXY_PORT:-3128}
  195. ports:
  196. - "${SSRF_PROXY_PORT:-3128}:3128"
  197. networks:
  198. - dify-network
  199. ### ======================== 可选服务 ========================
  200. # Sandbox 代码执行环境(可选,按需启用)
  201. # sandbox:
  202. # image: langgenius/dify-sandbox:latest
  203. # restart: always
  204. # environment:
  205. # - API_KEY=${SANDBOX_API_KEY}
  206. # - GIN_MODE=release
  207. # - WORKER_TIMEOUT=${SANDBOX_WORKER_TIMEOUT:-15}
  208. # - ENABLE_NETWORK=${SANDBOX_ENABLE_NETWORK:-true}
  209. # volumes:
  210. # - sandbox_data:/data
  211. # networks:
  212. # - dify-network
  213. # Elasticsearch(可选,替代 Qdrant)
  214. # elasticsearch:
  215. # image: elasticsearch:8.11.0
  216. # restart: always
  217. # volumes:
  218. # - es_data:/usr/share/elasticsearch/data
  219. # environment:
  220. # - discovery.type=single-node
  221. # - xpack.security.enabled=false
  222. # - ES_JAVA_OPTS=-Xms512m -Xmx512m
  223. # networks:
  224. # - dify-network
  225. # Weaviate(可选,替代 Qdrant)
  226. # weaviate:
  227. # image: semitechnologies/weaviate:latest
  228. # restart: always
  229. # volumes:
  230. # - weaviate_data:/var/lib/weaviate
  231. # environment:
  232. # - QUERY_DEFAULTS_LIMIT=25
  233. # - AUTHENTICATION_ANONYMOUS_ACCESS_ENABLED=true
  234. # - PERSISTENCE_DATA_PATH=/var/lib/weaviate
  235. # ports:
  236. # - "8080:8080"
  237. # networks:
  238. # - dify-network
  239. volumes:
  240. db_data:
  241. redis_data:
  242. api_storage:
  243. app_data:
  244. qdrant_data:
  245. nginx_logs:
  246. # sandbox_data:
  247. # es_data:
  248. # weaviate_data:
  249. networks:
  250. dify-network:
  251. driver: bridge