x-app-base: &app-base build: context: . dockerfile: docker/Dockerfile env_file: - .env environment: POSTGRES_HOST: postgres RABBIT_HOST: rabbitmq services: postgres: image: postgres:18 container_name: payments-postgres env_file: - .env environment: POSTGRES_DB: ${POSTGRES_DB} POSTGRES_USER: ${POSTGRES_USER} POSTGRES_PASSWORD: ${POSTGRES_PASSWORD} ports: - "127.0.0.1:5432:5432" volumes: - payments_pg_data:/var/lib/postgresql healthcheck: test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER} -d ${POSTGRES_DB}"] interval: 5s timeout: 3s retries: 20 rabbitmq: image: rabbitmq:3-management container_name: payments-rabbitmq env_file: - .env environment: RABBITMQ_DEFAULT_USER: ${RABBIT_USER} RABBITMQ_DEFAULT_PASS: ${RABBIT_PASSWORD} ports: - "127.0.0.1:5672:5672" - "127.0.0.1:15672:15672" healthcheck: test: ["CMD", "rabbitmq-diagnostics", "-q", "ping"] interval: 5s timeout: 5s retries: 20 migrator: <<: *app-base container_name: payments-migrator command: alembic upgrade head volumes: [] depends_on: postgres: condition: service_healthy web: <<: *app-base container_name: payments-web command: python -m payments.main.web environment: APP_HOST: 0.0.0.0 POSTGRES_HOST: postgres RABBIT_HOST: rabbitmq depends_on: migrator: condition: service_completed_successfully ports: - "127.0.0.1:8000:8000" relay: <<: *app-base container_name: payments-relay command: python -m payments.main.relay restart: unless-stopped depends_on: migrator: condition: service_completed_successfully rabbitmq: condition: service_healthy listener: <<: *app-base container_name: payments-listener command: python -m payments.main.listener restart: unless-stopped depends_on: migrator: condition: service_completed_successfully rabbitmq: condition: service_healthy consumer: <<: *app-base container_name: payments-consumer command: python -m consumer.main restart: unless-stopped volumes: - consumer_data:/app/data environment: DATABASE_PATH: /app/data/consumer.db RABBIT_HOST: rabbitmq depends_on: rabbitmq: condition: service_healthy consumer-relay: <<: *app-base container_name: payments-consumer-relay command: python -m consumer.main.relay restart: unless-stopped volumes: - consumer_data:/app/data environment: DATABASE_PATH: /app/data/consumer.db RABBIT_HOST: rabbitmq depends_on: rabbitmq: condition: service_healthy volumes: payments_pg_data: consumer_data: