services:
  <<ETCD_SERVICE>>:
    container_name: <<ETCD_DOCKER>>
    image: <<ETCD_IMAGE>>
    environment:
      - ALLOW_NONE_AUTHENTICATION=yes
      - ETCD_AUTO_COMPACTION_MODE=revision
      - ETCD_AUTO_COMPACTION_RETENTION=1000
      - ETCD_QUOTA_BACKEND_BYTES=4294967296
      - ETCD_SNAPSHOT_COUNT=50000
      - ETCD_LISTEN_CLIENT_URLS=http://0.0.0.0:<<ETCD_HOST_PORT>>
      - ETCD_ADVERTISE_CLIENT_URLS=http://<<ETCD_SERVICE>>:<<ETCD_HOST_PORT>>
    volumes:
      - <<ETCD_VOLUME>>:/bitnami/etcd
    networks:
      - <<JIUWEN_NETWORK_NAME>>
    restart: unless-stopped
    healthcheck:
      test:
        [
          "CMD",
          "etcdctl",
          "--endpoints=http://localhost:<<ETCD_HOST_PORT>>",
          "endpoint",
          "health",
        ]
      interval: 30s
      timeout: 20s
      retries: 3
      start_period: 20s

  <<MINIO_SERVICE>>:
    container_name: <<MINIO_DOCKER>>
    image: <<MINIO_IMAGE>>
    environment:
      MINIO_ACCESS_KEY: <<MINIO_ACCESS_KEY>>
      MINIO_SECRET_KEY: <<MINIO_SECRET_KEY>>
    ports:
      - "<<MINIO_SERVICE_HOST_PORT>>:<<MINIO_PORT>>"
      - "<<MINIO_CONSOLE_HOST_PORT>>:9001"
    volumes:
      - <<MINIO_VOLUME>>:/minio_data
    networks:
      - <<JIUWEN_NETWORK_NAME>>
    command: minio server /minio_data --address ":<<MINIO_PORT>>" --console-address ":9001"
    restart: unless-stopped
    healthcheck:
      test:
        [
          "CMD",
          "curl",
          "-f",
          "http://localhost:<<MINIO_PORT>>/minio/health/live",
        ]
      interval: 30s
      timeout: 20s
      retries: 3

  <<MILVUS_SERVICE>>:
    container_name: <<MILVUS_DOCKER>>
    image: <<MILVUS_IMAGE>>
    command: ["milvus", "run", "standalone"]
    security_opt:
      - seccomp:unconfined
    environment:
      ETCD_ENDPOINTS: <<ETCD_SERVICE>>:<<ETCD_HOST_PORT>>
      MINIO_ADDRESS: <<MINIO_SERVICE>>:<<MINIO_PORT>>
      MQ_TYPE: woodpecker
    volumes:
      - <<MILVUS_VOLUME>>:/var/lib/milvus
    networks:
      - <<JIUWEN_NETWORK_NAME>>
    restart: unless-stopped
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:9091/healthz"]
      interval: 30s
      start_period: 90s
      timeout: 20s
      retries: 3
    ports:
      - "<<MILVUS_HOST_PORT>>:19530"
      - "<<MILVUS_HTTP_HOST_PORT>>:9091"
    depends_on:
      - "<<ETCD_SERVICE>>"
      - "<<MINIO_SERVICE>>"
    logging:
      driver: "json-file"
      options: # milvus logs often grow to large so taming them
        max-file: "3"
        max-size: "10m"

volumes:
  <<ETCD_VOLUME>>:
  <<MINIO_VOLUME>>:
  <<MILVUS_VOLUME>>:

networks:
  <<JIUWEN_NETWORK_NAME>>:
    driver: bridge