services:
  app:
    container_name: ${CONTAINER_NAME}-app
    build:
      context: ./
      dockerfile: ./docker/app/Dockerfile
      target: app
      args:
        COMPOSER_AUTH: "{}"
        APP_BASE_DIR: ${APP_BASE_DIR-.}
    depends_on:
      db:
        condition: service_healthy
    restart: unless-stopped
    extra_hosts:
      - "host.docker.internal:host-gateway"

  web:
    container_name: ${CONTAINER_NAME}-web
    build:
      context: ./
      dockerfile: ./docker/web/Dockerfile
      target: web
      args:
        APP_BASE_DIR: ${APP_BASE_DIR-.}
    restart: unless-stopped
    ports:
      - ${HTTP_PORT}:8080
    environment:
      PHP_FPM_HOST: app
    depends_on:
      app:
        condition: service_healthy

  db:
    container_name: ${CONTAINER_NAME}-db
    image: postgres:16-alpine3.18
    environment:
      USER_ID: ${USER_ID}
      GROUP_ID: ${GROUP_ID}
      PGDATA: /data/postgres
      PGUSER: ${DB_ROOT_USERNAME}
      POSTGRES_DB: ${DB_DATABASE}
      POSTGRES_USER: ${DB_USERNAME}
      POSTGRES_PASSWORD: ${DB_PASSWORD}
    volumes:
      - sqldata:/data/postgres
    restart: unless-stopped
    healthcheck:
      test: [ "CMD-SHELL", "pg_isready", "-d" ]
      timeout: 5s
      retries: 3

volumes:
  sqldata:
