networks: servicesNetwork: driver: bridge volumes: sqlite_data: prom_data: grafana_data: rabbitmq_data: services: rabbitmq: image: rabbitmq:3.13-management container_name: rabbitmq ports: - "127.0.0.1:5672:5672" - "127.0.0.1:15672:15672" - "127.0.0.1:15692:15692" environment: RABBITMQ_DEFAULT_USER: admin RABBITMQ_DEFAULT_PASS: admin command: > sh -lc "rabbitmq-plugins enable --offline rabbitmq_prometheus && exec docker-entrypoint.sh rabbitmq-server" healthcheck: test: ["CMD", "rabbitmq-diagnostics", "-q", "ping"] interval: 5s timeout: 3s retries: 20 start_period: 10s volumes: - rabbitmq_data:/var/lib/rabbitmq networks: [servicesNetwork] restart: unless-stopped logging: driver: "json-file" options: max-size: "10m" max-file: "3" prometheus: image: prom/prometheus:latest depends_on: [rabbitmq] networks: [servicesNetwork] volumes: - ./monitor/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml:ro - prom_data:/prometheus command: - "--config.file=/etc/prometheus/prometheus.yml" - "--storage.tsdb.path=/prometheus" - "--web.enable-lifecycle" ports: - "9090:9090" restart: unless-stopped logging: driver: "json-file" options: max-size: "10m" max-file: "3" grafana: image: grafana/grafana:latest depends_on: [prometheus] networks: [servicesNetwork] environment: - GF_SECURITY_ADMIN_USER=admin - GF_SECURITY_ADMIN_PASSWORD=admin - GF_USERS_ALLOW_SIGN_UP=false volumes: - grafana_data:/var/lib/grafana - ./monitor/grafana/provisioning/datasources:/etc/grafana/provisioning/datasources:ro ports: - "3000:3000" restart: unless-stopped logging: driver: "json-file" options: max-size: "10m" max-file: "3" mongo-service: build: context: . dockerfile: app/services/mongo/Dockerfile depends_on: rabbitmq: condition: service_healthy env_file: [.env] environment: SERVICE_NAME: "mongo-service" PRODUCE_KEY: "mongo.service.publish" CONSUME_BINDINGS: "database.service.publish,mail.service.publish" RABBITMQ_URL: "amqp://admin:admin@rabbitmq:5672/" EXCHANGE_EVENTS: "app.events" PRODUCE_BURST: "10" PRODUCE_ONCE: "true" EVENT_TYPE: "mongo-event" RETRY_DELAY_MS: "5000" MAX_RETRIES: "3" PREFETCH: "16" IGNORE_SELF_PRODUCED: "true" networks: [servicesNetwork] restart: unless-stopped logging: driver: "json-file" options: { max-size: "10m", max-file: "3" } db-service: build: context: . dockerfile: app/services/database/Dockerfile depends_on: rabbitmq: condition: service_healthy networks: [servicesNetwork] env_file: [.env] environment: SERVICE_NAME: "database-service" PRODUCE_KEY: "database.service.publish" CONSUME_BINDINGS: "mail.service.publish,mongo.service.publish" RABBITMQ_URL: amqp://admin:admin@rabbitmq:5672/ EXCHANGE_EVENTS: "app.events" PRODUCE_ONCE: "true" RETRY_DELAY_MS: "5000" MAX_RETRIES: "3" PREFETCH: "16" IGNORE_SELF_PRODUCED: "true" volumes: - ./app/services/database/venv:/opt/venv - ./app/services/database/.prisma-cache:/root/.cache/prisma-python restart: unless-stopped logging: driver: "json-file" options: max-size: "10m" max-file: "3" mail-service: build: context: . dockerfile: app/services/mail/Dockerfile env_file: [.env] depends_on: rabbitmq: condition: service_healthy environment: SERVICE_NAME: "mail-service" PRODUCE_KEY: "mail.service.publish" CONSUME_BINDINGS: "database.service.publish,mongo.service.publish" RABBITMQ_URL: amqp://admin:admin@rabbitmq:5672/ EXCHANGE_EVENTS: "app.events" PRODUCE_ONCE: "true" RETRY_DELAY_MS: "5000" MAX_RETRIES: "3" PREFETCH: "16" IGNORE_SELF_PRODUCED: "true" networks: [servicesNetwork] restart: unless-stopped logging: driver: "json-file" options: max-size: "10m" max-file: "3" parser-mail-service: build: context: . dockerfile: app/services/parser/mail/Dockerfile env_file: [.env] depends_on: rabbitmq: condition: service_healthy environment: SERVICE_NAME: "parser-mail-service" RABBITMQ_URL: amqp://admin:admin@rabbitmq:5672/ EXCHANGE_EVENTS: "app.events" CONSUME_BINDINGS: "mail.service.publish" PRODUCE_KEY: "parser.mail.publish" RETRY_DELAY_MS: "5000" MAX_RETRIES: "3" PREFETCH: "16" IGNORE_SELF_PRODUCED: "true" networks: [servicesNetwork] restart: unless-stopped logging: driver: "json-file" options: max-size: "10m" max-file: "3" parser-excel-service: build: context: . dockerfile: app/services/parser/excel/Dockerfile env_file: [.env] depends_on: rabbitmq: condition: service_healthy environment: SERVICE_NAME: "parser-excel-service" RABBITMQ_URL: amqp://admin:admin@rabbitmq:5672/ EXCHANGE_EVENTS: "app.events" CONSUME_BINDINGS: "parser.mail.publish" PRODUCE_KEY: "parser.excel.publish" PRODUCE_ONCE: "true" RETRY_DELAY_MS: "5000" MAX_RETRIES: "3" PREFETCH: "16" IGNORE_SELF_PRODUCED: "true" networks: [servicesNetwork] restart: unless-stopped logging: driver: "json-file" options: max-size: "10m" max-file: "3" parser-comment-service: build: context: . dockerfile: app/services/parser/comment/Dockerfile env_file: [.env] depends_on: rabbitmq: condition: service_healthy environment: SERVICE_NAME: "parser-comment-service" RABBITMQ_URL: amqp://admin:admin@rabbitmq:5672/ EXCHANGE_EVENTS: "app.events" CONSUME_BINDINGS: "parser.excel.publish" PRODUCE_KEY: "parser.comment.publish" PRODUCE_ONCE: "true" RETRY_DELAY_MS: "5000" MAX_RETRIES: "3" PREFETCH: "16" IGNORE_SELF_PRODUCED: "true" networks: [servicesNetwork] restart: unless-stopped logging: driver: "json-file" options: max-size: "10m" max-file: "3" parser-payment-service: build: context: . dockerfile: app/services/parser/payment/Dockerfile env_file: [.env] depends_on: rabbitmq: condition: service_healthy environment: SERVICE_NAME: "parser-payment-service" RABBITMQ_URL: amqp://admin:admin@rabbitmq:5672/ EXCHANGE_EVENTS: "app.events" CONSUME_BINDINGS: "parser.comment.publish" PRODUCE_KEY: "parser.payment.publish" PRODUCE_ONCE: "true" RETRY_DELAY_MS: "5000" MAX_RETRIES: "3" PREFETCH: "16" IGNORE_SELF_PRODUCED: "true" networks: [servicesNetwork] restart: unless-stopped logging: driver: "json-file" options: max-size: "10m" max-file: "3"