docker-compose.yml 3.61 KiB
version: "3.9"
services:
  db:
    image: timescale/timescaledb-ha:pg17.2-ts2.17.2-all
    container_name: timescaledb
    environment:
      POSTGRES_USER: postgres
      POSTGRES_PASSWORD: secret
      POSTGRES_DB: products_db
    ports:
      - "5435:5432"
    volumes:
      - db-data:/var/lib/postgresql/data
      - ../migrations/init.sql:/docker-entrypoint-initdb.d/init.sql:ro
  vectorizer-worker:
    image: timescale/pgai-vectorizer-worker:0.2.0
    environment:
      PGAI_VECTORIZER_WORKER_DB_URL: postgres://postgres:secret@timescaledb:5432/products_db
      PGAI_VECTORIZER_OLLAMA_MAX_CHUNKS_PER_BATCH: 4096
      OLLAMA_HOST: http://ollama:11434
    command: [ "--poll-interval", "5s" ]
    depends_on:
      - db
      - ollama
    restart: always
  zookeeper:
    image: bitnami/zookeeper:latest
    container_name: zookeeper
    environment:
      ALLOW_ANONYMOUS_LOGIN: "yes"
    ports:
      - "2181:2181"
    volumes:
      - zookeeper-data:/bitnami/zookeeper
  kafka:
    image: bitnami/kafka:latest
    container_name: kafka
    environment:
      KAFKA_BROKER_ID: 1
      KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
      KAFKA_LISTENERS: PLAINTEXT://0.0.0.0:9092
      KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://localhost:9092
      KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1
      ALLOW_PLAINTEXT_LISTENER: "yes"
    ports:
      - "9092:9092"
    depends_on:
      - zookeeper
  otel-collector:
    image: otel/opentelemetry-collector-contrib:latest
    container_name: otel-collector
    command: ["--config=/etc/otel-collector-config.yaml"]
    volumes:
      - ./config/otel-collector-config.yaml:/etc/otel-collector-config.yaml:ro
    ports:
      - "4317:4317"  # gRPC receiver для OTLP
      - "4318:4318"  # HTTP receiver для OTLP
  jaeger:
    container_name: jaeger
    image: jaegertracing/all-in-one:1.49
    ports:
      - "16686:16686"
      - "4317"
7172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
kafka-ui: container_name: kafka-ui image: provectuslabs/kafka-ui:v0.7.2 ports: - "8071:8080" environment: KAFKA_CLUSTERS_0_NAME: "local" KAFKA_CLUSTERS_0_BOOTSTRAPSERVERS: "kafka:9092" depends_on: - kafka ollama: image: ollama/ollama:latest container_name: ollama ports: - "11434:11434" volumes: - ollama-models:/models - ./ollama-entrypoint.sh:/entrypoint.sh:ro entrypoint: [ "/entrypoint.sh" ] app: image: registry.miem.hse.ru/edadil/ms/model container_name: app environment: - SERVER_AppName=ProductAssistant - SERVER_Port=8080 - SERVER_Secret=secret - DATABASE_HOSTNAME=timescaledb - DATABASE_PORT=5432 - DATABASE_USER=postgres - DATABASE_PASSWORD=secret - DATABASE_DBNAME=products_db - LLM_Embedder=bge-m3 - LLM_MODEL_NAME=mistral-large-latest - LLM_API_KEY=ZdDk5S3QxaEytpf9DWXM2nEb6GVHuF9y - LLM_ENDPOINT=http://ollama:11434 - KAFKA_BOOTSTRAP_SERVERS=kafka:9092 - KAFKA_PRODUCER_TOPIC=price_changes - KAFKA_CONSUMER_TOPIC=price_changes - KAFKA_CONSUMER_GROUP_ID=notifications_group - OTEL_OTLP_ENDPOINT=http://otel-collector:4317 - OTEL_OTLP_INSECURE=true - OTEL_OTLP_TIMEOUT=10s - OTEL_OTLP_HTTP=false - OTEL_RETRY_ENABLED=true - OTEL_RETRY_INITIAL_INTERVAL=5s - OTEL_RETRY_MAX_INTERVAL=30s - OTEL_RETRY_MAX_ELAPSED_TIME=1m - TELEGRAM_BOT_TOKEN=7462491902:AAFzBoYhmy8OeRB_1iu2YapOL03vGWXmo8I - TELEGRAM_JWT_SECRET=secret ports: - "8080:8080" depends_on: - db - kafka - ollama - otel-collector profiles: - full volumes: db-data:
141142143
zookeeper-data: kafka-data: ollama-models: