wing-gis/infra/docker-compose.yml
htlee b9d924e81e chore: 팀 워크플로우 기반 초기 프로젝트 구성
WING-GIS 해양경찰 통합 GIS 위치정보시스템.
모노레포: frontend(React 19 + MapLibre + deck.gl) + services(Spring Boot + Gradle).

- npm + Nexus 프록시 레지스트리 설정
- 팀 워크플로우 v1.6.1 부트스트랩 파일 배치
- .githooks (commit-msg, post-checkout)
- custom_pre_commit: true (모노레포 pre-commit 별도 관리)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-31 12:36:38 +09:00

117 lines
3.6 KiB
YAML

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: