name: ecommerce x-php: &php image: ${COMPOSE_PROJECT_NAME:-ecommerce}-php:local build: context: . dockerfile: deploy/Dockerfile target: app env_file: - ${ECOMMERCE_ENV_FILE:-.env.docker} working_dir: /var/www/html volumes: - app_storage:/var/www/html/storage restart: unless-stopped init: true security_opt: [no-new-privileges:true] depends_on: db: condition: service_healthy migrate: condition: service_completed_successfully services: db: image: mysql:8.4 restart: unless-stopped environment: MYSQL_DATABASE: ${DB_DATABASE:-ecommerce} MYSQL_USER: ${DB_USERNAME:-ecommerce} MYSQL_PASSWORD: ${DB_PASSWORD:?Isi DB_PASSWORD di .env.docker} MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD:?Isi MYSQL_ROOT_PASSWORD di .env.docker} volumes: - mysql_data:/var/lib/mysql healthcheck: test: - CMD-SHELL - 'MYSQL_PWD="$$MYSQL_PASSWORD" mysql --user="$$MYSQL_USER" --database="$$MYSQL_DATABASE" --execute="SELECT 1" > /dev/null' interval: 5s timeout: 5s retries: 24 start_period: 30s migrate: <<: *php command: [sh, deploy/init.sh] restart: "no" depends_on: db: condition: service_healthy app: <<: *php worker: <<: *php command: [php, artisan, "queue:work", "--sleep=3", "--tries=3", "--backoff=60", "--timeout=60", "--max-time=3600"] stop_grace_period: 75s scheduler: <<: *php command: [php, artisan, "schedule:work"] stop_grace_period: 75s web: image: ${COMPOSE_PROJECT_NAME:-ecommerce}-web:local build: context: . dockerfile: deploy/Dockerfile target: web restart: unless-stopped ports: - "${APP_BIND_ADDRESS:-127.0.0.1}:${APP_PORT:-8080}:80" volumes: - app_storage:/var/www/html/storage:ro depends_on: app: condition: service_started security_opt: [no-new-privileges:true] healthcheck: test: [CMD-SHELL, "wget -q -O /dev/null http://127.0.0.1/up"] interval: 10s timeout: 5s retries: 12 start_period: 30s volumes: mysql_data: app_storage: