version: '3.4'

services:
  php:
    build:
      context: .
      target: sylius_php
      cache_from:
        - quay.io/sylius/php:latest
        - quay.io/sylius/nodejs:latest
        - quay.io/sylius/nginx:latest
    image: quay.io/sylius/php:latest
    depends_on:
      - mysql
    environment:
      - APP_ENV=dev
      - APP_DEBUG=1
      - APP_SECRET=EDITME
      - DATABASE_URL=mysql://sylius:nopassword@mysql/sylius
      - MAILER_URL=smtp://mailhog:1025
      - PHP_DATE_TIMEZONE=${PHP_DATE_TIMEZONE:-UTC}
    volumes:
      - .:/srv/sylius:rw,cached
      # if you develop on Linux, you may use a bind-mounted host directory instead
      # - ./var:/srv/sylius/var:rw
      - ./public:/srv/sylius/public:rw,delegated
      # if you develop on Linux, you may use a bind-mounted host directory instead
      # - ./public/media:/srv/sylius/public/media:rw
      - public-media:/srv/sylius/public/media:rw

  mysql:
    image: percona:5.7
    environment:
      - MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD:-nopassword}
      - MYSQL_DATABASE=sylius
      - MYSQL_USER=sylius
      - MYSQL_PASSWORD=${MYSQL_PASSWORD:-nopassword}
    volumes:
      - mysql-data:/var/lib/mysql:rw
      # you may use a bind-mounted host directory instead, so that it is harder to accidentally remove the volume and lose all your data!
      # - ./docker/mysql/data:/var/lib/mysql:rw,delegated
    ports:
      - "3306:3306"

  nodejs:
    build:
      context: .
      target: sylius_nodejs
      cache_from:
        - quay.io/sylius/php:latest
        - quay.io/sylius/nodejs:latest
        - quay.io/sylius/nginx:latest
    image: quay.io/sylius/nodejs:latest
    depends_on:
      - php
    environment:
      - GULP_ENV=dev
      - PHP_HOST=php
      - PHP_PORT=9000
    volumes:
      - .:/srv/sylius:rw,cached
      - ./public:/srv/sylius/public:rw,delegated
    ports:
      - "35729:35729"

  nginx:
    build:
      context: .
      target: sylius_nginx
      cache_from:
        - quay.io/sylius/php:latest
        - quay.io/sylius/nodejs:latest
        - quay.io/sylius/nginx:latest
    image: quay.io/sylius/nginx:latest
    depends_on:
      - php
      - nodejs # to ensure correct build order
    volumes:
      - ./public:/srv/sylius/public:ro
      # if you develop on Linux, you may use a bind-mounted host directory instead
      # - ./public/media:/srv/sylius/public/media:ro
      - public-media:/srv/sylius/public/media:ro,nocopy
    ports:
      - "80:80"

  mailhog:
    # do not use in production!
    image: mailhog/mailhog:latest
    environment:
      - MH_STORAGE=maildir
    # volumes:
    #   - ./docker/mailhog/maildir:/maildir:rw,delegated
    ports:
      - "8025:8025"

volumes:
  mysql-data:
  public-media:
