name: e-ticket services: php: build: context: ./docker/php/prod dockerfile: Dockerfile deploy: replicas: 2 restart: unless-stopped volumes: - .:/app ports: - "9000-9001:9000" depends_on: pgbouncer: condition: service_started redis: condition: service_healthy db-master: image: postgres:16-alpine restart: unless-stopped environment: POSTGRES_USER: e-ticket POSTGRES_PASSWORD: e-ticket POSTGRES_DB: e-ticket command: - postgres - -c - wal_level=replica - -c - max_wal_senders=3 - -c - wal_keep_size=64MB - -c - hot_standby=on volumes: - db-master-data:/var/lib/postgresql/data - ./docker/pgsql/init-master.sql:/docker-entrypoint-initdb.d/init-master.sql healthcheck: test: ["CMD-SHELL", "pg_isready -U e-ticket -d e-ticket"] interval: 5s timeout: 5s retries: 5 db-slave: image: postgres:16-alpine restart: unless-stopped environment: POSTGRES_USER: e-ticket POSTGRES_PASSWORD: e-ticket POSTGRES_DB: e-ticket PGDATA: /var/lib/postgresql/data volumes: - db-slave-data:/var/lib/postgresql/data - ./docker/pgsql/init-slave.sh:/init-slave.sh entrypoint: ["/bin/bash", "/init-slave.sh"] command: ["postgres"] depends_on: db-master: condition: service_healthy healthcheck: test: ["CMD-SHELL", "pg_isready -U e-ticket -d e-ticket"] interval: 5s timeout: 5s retries: 5 pgbouncer: image: edoburu/pgbouncer restart: unless-stopped volumes: - ./docker/pgsql/pgbouncer.ini:/etc/pgbouncer/pgbouncer.ini - ./docker/pgsql/userlist.txt:/etc/pgbouncer/userlist.txt ports: - "6432:6432" depends_on: db-master: condition: service_healthy db-slave: condition: service_healthy messenger: build: context: ./docker/php/prod dockerfile: Dockerfile command: php bin/console messenger:consume async --time-limit=3600 --memory-limit=256M --limit=500 -vv deploy: replicas: 2 restart: unless-stopped volumes: - .:/app depends_on: pgbouncer: condition: service_started redis: condition: service_healthy redis: image: redis:7-alpine restart: unless-stopped command: redis-server --requirepass e-ticket volumes: - redis-data:/data healthcheck: test: ["CMD", "redis-cli", "-a", "e-ticket", "ping"] interval: 5s timeout: 5s retries: 5 volumes: db-master-data: db-slave-data: redis-data: