docker-compose.yml 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. # docker-compose.yml — TenderAgent 本地开发环境(精简版)
  2. # 启动:docker-compose --env-file .env.local up -d
  3. version: "3.9"
  4. services:
  5. # ── PostgreSQL 主数据库(对外 5433,本机 5432 已占用)──
  6. postgres:
  7. image: postgres:15-alpine
  8. container_name: edu_agent_postgres
  9. restart: unless-stopped
  10. environment:
  11. POSTGRES_DB: ${DB_NAME:-tenderagent}
  12. POSTGRES_USER: ${DB_USER}
  13. POSTGRES_PASSWORD: ${DB_PASSWORD}
  14. PGTZ: Asia/Shanghai
  15. volumes:
  16. - postgres_data:/var/lib/postgresql/data
  17. # 容器首次启动时自动执行建表脚本(见 3.2 节)
  18. - ./scripts/init_db.sql:/docker-entrypoint-initdb.d/01_init_db.sql:ro
  19. ports:
  20. - "5433:5432"
  21. healthcheck:
  22. test: ["CMD-SHELL", "pg_isready -U ${DB_USER} -d ${DB_NAME:-tenderagent}"]
  23. interval: 10s
  24. timeout: 5s
  25. retries: 5
  26. # ── etcd(Milvus 元数据存储,仅内部使用,不对外暴露端口)──
  27. etcd:
  28. image: quay.io/coreos/etcd:v3.5.14
  29. container_name: edu_agent_etcd
  30. restart: unless-stopped
  31. environment:
  32. ETCD_AUTO_COMPACTION_MODE: revision
  33. ETCD_AUTO_COMPACTION_RETENTION: "1000"
  34. ETCD_QUOTA_BACKEND_BYTES: "4294967296"
  35. command: >
  36. etcd
  37. --advertise-client-urls=http://127.0.0.1:2379
  38. --listen-client-urls=http://0.0.0.0:2379
  39. --data-dir=/etcd
  40. volumes:
  41. - etcd_data:/etcd
  42. # ── MinIO(Milvus 向量文件存储,仅内部使用,不对外暴露端口)──
  43. minio:
  44. image: minio/minio:latest
  45. container_name: edu_agent_minio
  46. restart: unless-stopped
  47. command: server /data
  48. environment:
  49. MINIO_ROOT_USER: ${MINIO_ACCESS_KEY:-minioadmin}
  50. MINIO_ROOT_PASSWORD: ${MINIO_SECRET_KEY:-minioadmin}
  51. volumes:
  52. - minio_data:/data
  53. healthcheck:
  54. test: ["CMD", "curl", "-f", "http://localhost:9000/minio/health/live"]
  55. interval: 15s
  56. timeout: 5s
  57. retries: 5
  58. # ── Milvus 向量数据库(对外 19531,本机 19530 已占用)──
  59. milvus:
  60. image: milvusdb/milvus:v2.4.0
  61. container_name: edu_agent_milvus
  62. restart: unless-stopped
  63. command: ["milvus", "run", "standalone"]
  64. environment:
  65. ETCD_ENDPOINTS: etcd:2379 # 连内部 etcd
  66. MINIO_ADDRESS: minio:9000 # 连内部 MinIO
  67. MINIO_ACCESS_KEY_ID: ${MINIO_ACCESS_KEY:-minioadmin}
  68. MINIO_SECRET_ACCESS_KEY: ${MINIO_SECRET_KEY:-minioadmin}
  69. volumes:
  70. - milvus_data:/var/lib/milvus
  71. ports:
  72. - "19531:19530"
  73. depends_on:
  74. etcd:
  75. condition: service_started
  76. minio:
  77. condition: service_healthy
  78. healthcheck:
  79. test: ["CMD", "curl", "-f", "http://localhost:9091/healthz"]
  80. interval: 15s
  81. timeout: 10s
  82. retries: 10
  83. # ── Attu(Milvus 可视化管理界面,对外 30000)──
  84. attu:
  85. image: zilliz/attu:v2.4.12
  86. container_name: edu_agent_attu
  87. restart: unless-stopped
  88. environment:
  89. # Attu 在 Docker 内部访问 Milvus,必须使用服务名 milvus:19530,不能写 localhost:19531
  90. MILVUS_URL: milvus:19530
  91. SERVER_PORT: "3000"
  92. TZ: Asia/Shanghai
  93. ports:
  94. # 不写 127.0.0.1,默认绑定 0.0.0.0,外部可通过 http://192.168.88.100:30000 访问
  95. - "30000:3000"
  96. depends_on:
  97. milvus:
  98. condition: service_healthy
  99. # ── 数据卷(持久化,重启容器数据不丢失)──
  100. volumes:
  101. postgres_data:
  102. etcd_data:
  103. minio_data:
  104. milvus_data: