version: '3.8' # WING-GIS Development Environment # 해양경찰청 통합 GIS 위치정보시스템 services: # ============================================================ # PostgreSQL + PostGIS # ============================================================ postgres: image: postgis/postgis:16-3.4 container_name: wing-gis-db restart: unless-stopped environment: POSTGRES_DB: wing_gis POSTGRES_USER: wingis POSTGRES_PASSWORD: wingis_dev_2026 PGDATA: /var/lib/postgresql/data/pgdata ports: - "5432:5432" volumes: - pgdata:/var/lib/postgresql/data - ./sql/001_init_schema.sql:/docker-entrypoint-initdb.d/001_init_schema.sql healthcheck: test: ["CMD-SHELL", "pg_isready -U wingis -d wing_gis"] interval: 10s timeout: 5s retries: 5 # ============================================================ # Redis (물표 캐시 + 세션) # ============================================================ redis: image: redis:7-alpine container_name: wing-gis-redis restart: unless-stopped ports: - "6379:6379" command: redis-server --maxmemory 512mb --maxmemory-policy allkeys-lru # ============================================================ # Kafka (물표 스트리밍) # ============================================================ kafka: image: bitnami/kafka:3.7 container_name: wing-gis-kafka restart: unless-stopped environment: KAFKA_CFG_NODE_ID: 0 KAFKA_CFG_PROCESS_ROLES: controller,broker KAFKA_CFG_CONTROLLER_QUORUM_VOTERS: 0@kafka:9093 KAFKA_CFG_LISTENERS: PLAINTEXT://:9092,CONTROLLER://:9093,EXTERNAL://:9094 KAFKA_CFG_ADVERTISED_LISTENERS: PLAINTEXT://kafka:9092,EXTERNAL://localhost:9094 KAFKA_CFG_LISTENER_SECURITY_PROTOCOL_MAP: CONTROLLER:PLAINTEXT,EXTERNAL:PLAINTEXT,PLAINTEXT:PLAINTEXT KAFKA_CFG_CONTROLLER_LISTENER_NAMES: CONTROLLER KAFKA_CFG_AUTO_CREATE_TOPICS_ENABLE: "true" ports: - "9094:9094" # ============================================================ # MinIO (파일 스토리지 - SHP/GeoJSON 업로드) # ============================================================ minio: image: minio/minio:latest container_name: wing-gis-minio restart: unless-stopped environment: MINIO_ROOT_USER: wingis MINIO_ROOT_PASSWORD: wingis_minio_2026 command: server /data --console-address ":9001" ports: - "9000:9000" - "9001:9001" volumes: - minio_data:/data # ============================================================ # pg_tileserv (벡터 타일 서빙) # ============================================================ tileserv: image: pramsey/pg_tileserv:latest container_name: wing-gis-tileserv restart: unless-stopped environment: DATABASE_URL: postgres://wingis:wingis_dev_2026@postgres:5432/wing_gis ports: - "7800:7800" depends_on: postgres: condition: service_healthy # ============================================================ # Keycloak (SSO/GPKI 인증 - INR-04) # ============================================================ keycloak: image: quay.io/keycloak/keycloak:24.0 container_name: wing-gis-keycloak restart: unless-stopped environment: KEYCLOAK_ADMIN: admin KEYCLOAK_ADMIN_PASSWORD: admin_2026 KC_DB: postgres KC_DB_URL: jdbc:postgresql://postgres:5432/wing_gis KC_DB_USERNAME: wingis KC_DB_PASSWORD: wingis_dev_2026 command: start-dev ports: - "8180:8080" depends_on: postgres: condition: service_healthy volumes: pgdata: minio_data: