124 lines
5.4 KiB
YAML
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
|