volumes:
  db-store:
  psysh-store:

configs:
  db-config:
    file: ./docker/mysql/my.cnf

services:
  php:
    build:
      context: .
      dockerfile: ./docker/php/Dockerfile
      target: ${APP_BUILD_TARGET:-development}
    container_name: oc_php
    volumes:
      - type: bind
        source: ./
        target: /workspace
      - type: volume
        source: psysh-store
        target: /root/.config/psysh
        volume:
          nocopy: true
    depends_on:
      database:
        condition: service_healthy
    extra_hosts:
      - "host.docker.internal:host-gateway"

  nginx:
    build:
      context: .
      dockerfile: ./docker/nginx/Dockerfile
    container_name: ${APP_NAME}_nginx  
    ports:
      - target: 80
        published: ${WEB_PUBLISHED_PORT:-80}
        protocol: tcp
        mode: host
    volumes:
      - type: bind
        source: ./
        target: /workspace
    depends_on:
      - php
      - database    

  database:
    build:
      context: .
      dockerfile: ./docker/mysql/Dockerfile
    command: --max_allowed_packet=32505856      # Set max_allowed_packet to 256M (or any other value)  
    ports:
      - target: 3306
        published: ${DB_PUBLISHED_PORT:-3306}
        protocol: tcp
        mode: host
    configs:
      - source: db-config
        target: /etc/my.cnf
    volumes:
      - type: volume
        source: db-store
        target: /var/lib/mysql
        volume:
          nocopy: true
    environment:
      - MYSQL_DATABASE=${DB_DATABASE:-laravel}
      - MYSQL_USER=${DB_USERNAME:-phper}
      - MYSQL_PASSWORD=${DB_PASSWORD:-secret}
      - MYSQL_ROOT_PASSWORD=${DB_PASSWORD:-secret}
    healthcheck:
        test: ["CMD", "mysqladmin" ,"ping", "-h", "localhost"]
        timeout: 5s
        retries: 10

  phpmyadmin:
    image: phpmyadmin/phpmyadmin:latest
    ports:
      - "8081:80"
    depends_on:
      - database
    environment:
      PMA_USER: oc
      PMA_PASSWORD: oc
      PMA_HOSTS: database,localhost