version: '3.8'
services:
  # An ephermerally-stored postgres database for single-use test runs
  db_test: &db_test
    image: postgres:14.4-alpine
    environment:
      - POSTGRES_USER=pg
      - POSTGRES_PASSWORD=password
    ports:
      - '5433:5432'
    # Healthcheck ensures db is queryable when `docker-compose up --wait` completes
    healthcheck:
      test: 'pg_isready -U pg'
      interval: 500ms
      timeout: 10s
      retries: 20
  # A persistently-stored postgres database
  db:
    <<: *db_test
    ports:
      - '5432:5432'
    healthcheck:
      disable: true
    volumes:
      - atp_db:/var/lib/postgresql/data
  # An ephermerally-stored redis cache for single-use test runs
  redis_test: &redis_test
    image: redis:7.0-alpine
    ports:
      - '6380:6379'
    # Healthcheck ensures redis is queryable when `docker-compose up --wait` completes
    healthcheck:
      test: ['CMD-SHELL', '[ "$$(redis-cli ping)" = "PONG" ]']
      interval: 500ms
      timeout: 10s
      retries: 20
  # A persistently-stored redis cache
  redis:
    <<: *redis_test
    command: redis-server --save 60 1 --loglevel warning
    ports:
      - '6379:6379'
    healthcheck:
      disable: true
    volumes:
      - atp_redis:/data
volumes:
  atp_db:
  atp_redis: