services:
  pg_v_man:
    build:
      context: .
      dockerfile: Dockerfile
    environment:
      DB_CONNECTION_STRING: postgresql://postgres:postgres@postgres:5432/postgres?replication=database
      DB_PUBLICATION: v_man_1
      RABBITMQ_CONNECTION_STRING: amqp://v_man:ies6ohF8@rabbitmq:5672/
    restart: always
    depends_on:
      - rabbitmq
      - postgres

  postgres:
    image: postgres:17.3
    command:
      - "postgres"
      - "-c"
      - "wal_level=logical"
    ports:
      - target: 5432
        published: 5432
        protocol: tcp
    environment:
      POSTGRES_USER: postgres
      POSTGRES_PASSWORD: postgres
      POSTGRES_DB: postgres
    volumes:
      - type: bind
        source: ./assets/db
        target: /docker-entrypoint-initdb.d
      - type: volume
        source: postgres-data
        target: /var/lib/postgresql/data
    healthcheck:
      test: ["CMD-SHELL", "pg_isready"]
      interval: 10s
      timeout: 5s
      retries: 5

  rabbitmq:
    image: rabbitmq:4-management-alpine
    ports:
      - target: 5672
        published: 5672
        protocol: tcp
      - target: 15672
        published: 15672
        protocol: tcp
    environment:
      RABBITMQ_DEFAULT_USER: v_man
      RABBITMQ_DEFAULT_PASS: ies6ohF8
      RABBITMQ_DEFAULT_VHOST: /
    volumes:
      - type: bind
        source: ./assets/rabbitmq
        target: /etc/rabbitmq
      - type: volume
        source: rabbitmq-data
        target: /var/lib/rabbitmq
    healthcheck:
      test: rabbitmq-diagnostics -q ping
      interval: 30s
      timeout: 25s
      retries: 3

volumes:
  rabbitmq-data:
  postgres-data: