# Generated by Shiplet — PHP/laravel project
# Runtime: docker
# PHP: 8.3  Web: nginx
#
# Commands:
#   shiplet up -d                   Start everything
#   shiplet composer install        Install PHP deps
#   shiplet php artisan migrate     Run Artisan commands (Laravel)
#   shiplet php bin/console         Run Symfony console
#   shiplet shell                   Shell into app container
#   shiplet db                      Open database CLI

name: shiplet-laravel

services:
  # ── PHP Application (FPM) ──────────────────────────────────────────────────
  app:
    build:
      context: .
      dockerfile: .shiplet/Dockerfile
      args:
        PHP_VERSION: "8.3"
        TZ: "UTC"
    image: shiplet-laravel/app
    extra_hosts:
      - "host.docker.internal:host-gateway"
    volumes:
      - ".:/var/www/html"
      - "composer_cache:/root/.composer/cache"
    networks:
      - shiplet
    environment:
      APP_ENV:    "${APP_ENV:-local}"
      APP_KEY:    "${APP_KEY}"
      APP_DEBUG:  "${APP_DEBUG:-true}"
      DB_CONNECTION: "${DB_CONNECTION:-mysql}"
      CACHE_DRIVER:  "redis"
      QUEUE_CONNECTION: "redis"
      SESSION_DRIVER: "redis"
    depends_on:
      - mysql
      - redis
      - mailpit
      - minio
    restart: unless-stopped

  # ── Web Server ─────────────────────────────────────────────────────────────
  nginx:
    image: "nginx:alpine"
    ports:
      - "${APP_PORT:-80}:80"
    volumes:
      - ".:/var/www/html:ro"
      - "./.shiplet/nginx/default.conf:/etc/nginx/conf.d/default.conf:ro"
    networks:
      - shiplet
    depends_on:
      - app
    restart: unless-stopped

  mysql:
      image: "mysql:8.0"
      environment:
        MYSQL_ROOT_PASSWORD: "${MYSQL_ROOT_PASSWORD:-secret}"
        MYSQL_DATABASE:      "${MYSQL_DATABASE:-app}"
        MYSQL_USER:          "${MYSQL_USER:-shiplet}"
        MYSQL_PASSWORD:      "${MYSQL_PASSWORD:-secret}"
      ports:
        - "${MYSQL_PORT:-3306}:3306"
      volumes:
        - "mysql_data:/var/lib/mysql"
      networks:
        - shiplet
      healthcheck:
        test: ["CMD", "mysqladmin", "ping", "-h", "localhost", "-u", "root", "-psecret"]
        interval: 5s
        retries: 10

  redis:
      image: "redis:7-alpine"
      ports:
        - "${REDIS_PORT:-6379}:6379"
      networks:
        - shiplet
      healthcheck:
        test: ["CMD", "redis-cli", "ping"]
        interval: 5s
        retries: 10

  mailpit:
      image: "axllent/mailpit"
      ports:
        - "${MAILPIT_SMTP_PORT:-1025}:1025"
        - "${MAILPIT_UI_PORT:-8025}:8025"
      networks:
        - shiplet

  minio:
      image: "minio/minio"
      command: server /data --console-address ":9001"
      environment:
        MINIO_ROOT_USER:     "${MINIO_ROOT_USER:-shiplet}"
        MINIO_ROOT_PASSWORD: "${MINIO_ROOT_PASSWORD:-secretsecret}"
      ports:
        - "${MINIO_PORT:-9000}:9000"
        - "${MINIO_CONSOLE_PORT:-9001}:9001"
      volumes:
        - "minio_data:/data"
      networks:
        - shiplet

volumes:
  mysql_data:
    driver: local
  redis_data:
    driver: local
  minio_data:
    driver: local
  composer_cache:
    driver: local

networks:
  shiplet:
    driver: bridge
