name: mbip_datacenter services: # ── PHP 8.4 FPM Application ────────────────────────────────── app: build: context: . dockerfile: Dockerfile container_name: mbip_dc_app restart: unless-stopped env_file: .env environment: DB_HOST: ${DB_HOST:-host.docker.internal} DB_PORT: ${DB_PORT:-3306} DB_DATABASE: ${DB_DATABASE:-mbip_datacenter} DB_USERNAME: ${DB_USERNAME} DB_PASSWORD: ${DB_PASSWORD} volumes: - .:/var/www/html - /var/www/html/vendor # kekal vendor dari image - /var/www/html/bootstrap/cache # elak host cache (dev) overwrite - mbip_dc_storage:/var/www/html/storage/app - mbip_dc_logs:/var/www/html/storage/logs networks: - mbip_dc_internal extra_hosts: - "host.docker.internal:host-gateway" healthcheck: test: ["CMD", "php-fpm", "-t"] interval: 30s timeout: 10s retries: 3 start_period: 40s # ── Nginx Web Server ───────────────────────────────────────── nginx: image: nginx:1.27-alpine container_name: mbip_dc_nginx restart: unless-stopped ports: - "${NGINX_HTTP_PORT:-8010}:80" volumes: - ./public:/var/www/html/public:ro - mbip_dc_storage:/var/www/html/storage/app:ro - ./docker/nginx/nginx.conf:/etc/nginx/nginx.conf:ro - ./docker/nginx/default.conf:/etc/nginx/conf.d/default.conf:ro - mbip_dc_nginx_logs:/var/log/nginx networks: - mbip_dc_internal depends_on: app: condition: service_healthy healthcheck: test: ["CMD", "nginx", "-t"] interval: 30s timeout: 5s retries: 3 start_period: 10s # ── Named Volumes ───────────────────────────────────────────── volumes: mbip_dc_storage: driver: local mbip_dc_logs: driver: local mbip_dc_nginx_logs: driver: local # ── Networks ────────────────────────────────────────────────── networks: mbip_dc_internal: driver: bridge ipam: config: - subnet: 172.29.0.0/16