Files
goldenChart/docker-compose.yml
2026-06-17 15:19:41 +09:00

124 lines
5.4 KiB
YAML

# ─────────────────────────────────────────────────────────────────────────────
# GoldenChart — Docker Compose
# 실행: docker compose up --build
# 중지: docker compose down
# 데이터 완전 삭제: docker compose down -v
# ─────────────────────────────────────────────────────────────────────────────
networks:
goldenchart-net:
driver: bridge
volumes:
mysql-data:
driver: local
verification-images:
driver: local
services:
# ── MySQL 8.0 ────────────────────────────────────────────────────────────
mysql:
image: mysql:8.0
container_name: gc-mysql
restart: unless-stopped
environment:
MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD:-rootpassword}
MYSQL_DATABASE: ${MYSQL_DATABASE:-stockAnalyzer}
MYSQL_USER: ${MYSQL_USER:-stock}
MYSQL_PASSWORD: ${MYSQL_PASSWORD:-analyzer}
ports:
- "${MYSQL_PORT:-3306}:3306"
volumes:
- mysql-data:/var/lib/mysql
- ./docker/mysql/init:/docker-entrypoint-initdb.d:ro
command: >
--character-set-server=utf8mb4
--collation-server=utf8mb4_unicode_ci
--default-time-zone=+09:00
--innodb-buffer-pool-size=256M
--max-connections=200
--binlog-expire-logs-seconds=86400
healthcheck:
test: ["CMD", "mysqladmin", "ping", "-h", "localhost",
"-u", "${MYSQL_USER:-stock}", "-p${MYSQL_PASSWORD:-analyzer}"]
interval: 10s
timeout: 5s
retries: 10
start_period: 40s
networks:
- goldenchart-net
# ── Spring Boot Backend ──────────────────────────────────────────────────
backend:
build:
context: .
dockerfile: backend/Dockerfile
container_name: gc-backend
restart: unless-stopped
depends_on:
mysql:
condition: service_healthy
environment:
SPRING_PROFILES_ACTIVE: docker
DB_URL: "jdbc:mysql://mysql:3306/${MYSQL_DATABASE:-stockAnalyzer}?useSSL=false&serverTimezone=Asia/Seoul&characterEncoding=UTF-8&allowPublicKeyRetrieval=true&createDatabaseIfNotExist=true"
DB_USERNAME: ${MYSQL_USER:-stock}
DB_PASSWORD: ${MYSQL_PASSWORD:-analyzer}
GC_SECRETS_ENCRYPTION_KEY: ${GC_SECRETS_ENCRYPTION_KEY:-goldenchart-local-dev-key-change-me}
GC_VERIFICATION_UPLOAD_DIR: /app/data/verification-images
GC_MOBILE_APP_RELEASE_DIR: /app/data/mobile-releases
GC_MOBILE_APP_VERSION: ${GC_MOBILE_APP_VERSION:-}
GC_MOBILE_APP_PUBLIC_BASE_URL: ${GC_MOBILE_APP_PUBLIC_BASE_URL:-https://stock.exdev.co.kr}
GC_MOBILE_APP_IOS_TESTFLIGHT_URL: ${GC_MOBILE_APP_IOS_TESTFLIGHT_URL:-}
GC_DESKTOP_APP_RELEASE_DIR: /app/data/desktop-releases
GC_DESKTOP_APP_PUBLIC_BASE_URL: ${GC_DESKTOP_APP_PUBLIC_BASE_URL:-https://stock.exdev.co.kr}
GC_DESKTOP_JENKINS_ENABLED: ${GC_DESKTOP_JENKINS_ENABLED:-true}
GC_DESKTOP_JENKINS_URL: ${GC_DESKTOP_JENKINS_URL:-http://host.docker.internal:8090}
GC_DESKTOP_JENKINS_JOB: ${GC_DESKTOP_JENKINS_JOB:-goldenChart-Desktop-Pipeline}
GC_DESKTOP_JENKINS_USER: ${GC_DESKTOP_JENKINS_USER:-}
GC_DESKTOP_JENKINS_TOKEN: ${GC_DESKTOP_JENKINS_TOKEN:-}
GC_DESKTOP_JENKINS_TRIGGER_TOKEN: ${GC_DESKTOP_JENKINS_TRIGGER_TOKEN:-goldenchart-desktop-build}
FIREBASE_ENABLED: ${FIREBASE_ENABLED:-false}
FIREBASE_SERVICE_ACCOUNT: ${FIREBASE_SERVICE_ACCOUNT:-firebase-service-account.json}
ports:
- "${BACKEND_PORT:-8080}:8080"
volumes:
- verification-images:/app/data/verification-images
- ./data/mobile-releases:/app/data/mobile-releases:ro
- ./data/desktop-releases:/app/data/desktop-releases:ro
- ./frontend/public/desktop/updates:/app/data/desktop-updates:ro
# FCM: .env 에 FIREBASE_SERVICE_ACCOUNT_PATH=/path/to/firebase-service-account.json 설정 시 주석 해제
# - ${FIREBASE_SERVICE_ACCOUNT_PATH}:/app/firebase-service-account.json:ro
healthcheck:
test: ["CMD-SHELL", "wget -qO- http://localhost:8080/api/indicators/list || exit 1"]
interval: 15s
timeout: 5s
retries: 5
start_period: 60s
networks:
- goldenchart-net
extra_hosts:
- "host.docker.internal:host-gateway"
# ── React Frontend (Nginx) ───────────────────────────────────────────────
frontend:
build:
context: ./frontend
dockerfile: Dockerfile
args:
VITE_API_BASE_URL: /api
container_name: gc-frontend
restart: unless-stopped
depends_on:
backend:
condition: service_healthy
ports:
- "${FRONTEND_PORT:-80}:80"
volumes:
# Desktop updater latest.json·설치 파일 — Jenkins publish + nginx reload
- ./frontend/public/desktop/updates:/usr/share/nginx/html/desktop/updates:ro
# nginx 타임아웃 등 프록시 설정 — 재빌드 없이 reload 로 반영 가능
- ./frontend/nginx-locations.inc:/etc/nginx/gc-locations.inc:ro
networks:
- goldenchart-net