############################################################################### # eCert MBIP — Docker Compose Production Overrides (Ubuntu Server) # # Penggunaan: # docker compose -f docker-compose.yml -f docker-compose.prod.yml up -d --build # # Perbezaan dari dev: # • APP_ENV=production, APP_DEBUG=false # • DB port TIDAK didedahkan ke host # • Storage sijil/template disimpan dalam named volume (kekal semasa deploy) # • Opcache validate_timestamps=0 (prestasi) # • php-dev.ini tidak dimuat ############################################################################### name: ecert services: # ── PHP-FPM Application (production) ────────────────────────────────────── app: container_name: ecert_app restart: always volumes: # Kod dari server (git pull) - .:/var/www # php.ini sahaja (tanpa php-dev.ini) - ./docker/php/php.ini:/usr/local/etc/php/conf.d/99-ecert.ini:ro # Storage kekal semasa redeploy - storage_data:/var/www/storage environment: APP_ENV: production APP_DEBUG: "false" # ── Nginx (production) ───────────────────────────────────────────────────── nginx: container_name: ecert_nginx restart: always volumes: - .:/var/www:ro - ./docker/nginx/default.conf:/etc/nginx/conf.d/default.conf:ro # Mount storage supaya nginx boleh serve fail statik jika perlu - storage_data:/var/www/storage:ro # ── MySQL (production) ───────────────────────────────────────────────────── db: container_name: ecert_db restart: always ports: [] # Jangan dedahkan DB port ke luar dalam production volumes: - dbdata:/var/lib/mysql # ── Queue Worker (production) ────────────────────────────────────────────── queue: container_name: ecert_queue restart: always volumes: - .:/var/www - ./docker/php/php.ini:/usr/local/etc/php/conf.d/99-ecert.ini:ro - storage_data:/var/www/storage environment: APP_ENV: production ############################################################################### volumes: storage_data: driver: local