version: '3.8' services: # 1. Nginx Gateway Reverse Proxy gateway: image: nginx:alpine container_name: gis_gateway ports: - "80:80" volumes: - ./docker/nginx/default.conf:/etc/nginx/conf.d/default.conf:ro depends_on: - php-app - next-app networks: - gis-network # 2. PHP + Apache Web App (for Root Portal, SPBU, Parsil, and Chloropleth) php-app: build: ./docker/php container_name: gis_php_app volumes: - .:/var/www/html environment: - DB_HOST=db - DB_DATABASE=spbu_db - DB_USERNAME=root - DB_PASSWORD=rootpassword depends_on: - db networks: - gis-network # 3. Next.js App Service next-app: build: ./docker/nextjs container_name: gis_next_app working_dir: /app volumes: - ./sistem-km-next:/app - /app/node_modules # Anonymous volume to isolate node_modules from host machine - /app/.next # Anonymous volume for nextjs build artifacts environment: - NEXT_PUBLIC_SUPABASE_URL=https://gzpvygrsfdtzykyqbnes.supabase.co - NEXT_PUBLIC_SUPABASE_ANON_KEY=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZSIsInJlZiI6Imd6cHZ5Z3JzZmR0enlreXFibmVzIiwicm9sZSI6ImFub24iLCJpYXQiOjE3NzkxNTUxNTIsImV4cCI6MjA5NDczMTE1Mn0.bP4qLY6PVT9UplSxB276tZ5HWClIkiuZ_-Yx3IlL8Dw - SUPABASE_SERVICE_ROLE_KEY=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZSIsInJlZiI6Imd6cHZ5Z3JzZmR0enlreXFibmVzIiwicm9sZSI6InNlcnZpY2Vfcm9sZSIsImlhdCI6MTc3OTE1NTE1MiwiZXhwIjoyMDk0NzMxMTUyfQ.H8rDKBGeagZnF22lFZwlsqPbDP6_kDurNpt8ZRvAigc - PORT=3000 - HOSTNAME=0.0.0.0 networks: - gis-network # 4. MySQL Database Service db: image: mysql:8.0 container_name: gis_db command: --default-authentication-plugin=mysql_native_password ports: - "3307:3306" # Mapped to 3307 on host to avoid conflicts with Laragon/XAMPP environment: - MYSQL_ROOT_PASSWORD=rootpassword - MYSQL_DATABASE=spbu_db volumes: - db-data:/var/lib/mysql - ./docker/db/init.sql:/docker-entrypoint-initdb.d/init.sql:ro networks: - gis-network # 5. phpMyAdmin (Database Management Web UI) phpmyadmin: image: phpmyadmin:latest container_name: gis_phpmyadmin ports: - "8080:80" environment: - PMA_HOST=db - PMA_USER=root - PMA_PASSWORD=rootpassword depends_on: - db networks: - gis-network volumes: db-data: networks: gis-network: driver: bridge