1+ version : ' 3.8'
2+
3+ services :
4+ mysql_1 :
5+ image : mysql:8.0
6+ container_name : mysql_1
7+ restart : unless-stopped
8+ environment :
9+ MYSQL_ROOT_PASSWORD : 1234
10+ TZ : Asia/Seoul
11+ volumes :
12+ - mysql_data:/var/lib/mysql
13+ - mysql_config:/etc/mysql/conf.d
14+ networks :
15+ - common
16+ ports :
17+ - " 3306:3306"
18+ healthcheck :
19+ test : ["CMD", "mysqladmin", "ping", "-h", "localhost", "-uroot", "-p1234"]
20+ interval : 10s
21+ timeout : 10s
22+ retries : 50
23+ start_period : 80s # ✅ 충분한 초기 대기 시간
24+ command : --default-authentication-plugin=mysql_native_password
25+
26+ mysql_init :
27+ image : mysql:latest
28+ container_name : mysql_init
29+ depends_on :
30+ mysql_1 :
31+ condition : service_healthy
32+ networks :
33+ - common
34+ environment :
35+ MYSQL_PWD : 1234
36+ command : >
37+ bash -c "
38+ echo 'MySQL 초기화 시작...'
39+ mysql -h mysql_1 -uroot -p1234 -e \"
40+ CREATE USER IF NOT EXISTS 'lldjlocal'@'127.0.0.1' IDENTIFIED WITH caching_sha2_password BY '1234';
41+ CREATE USER IF NOT EXISTS 'lldjlocal'@'172.18.%.%' IDENTIFIED WITH caching_sha2_password BY '1234';
42+ CREATE USER IF NOT EXISTS 'lldj'@'%' IDENTIFIED WITH caching_sha2_password BY '1234';
43+ GRANT ALL PRIVILEGES ON *.* TO 'lldjlocal'@'127.0.0.1';
44+ GRANT ALL PRIVILEGES ON *.* TO 'lldjlocal'@'172.18.%.%';
45+ GRANT ALL PRIVILEGES ON *.* TO 'lldj'@'%';
46+ CREATE DATABASE IF NOT EXISTS bid_market;
47+ FLUSH PRIVILEGES;
48+ \"
49+ echo 'MySQL 초기화 완료!'
50+ "
51+
52+ redis_1 :
53+ image : redis:latest
54+ container_name : redis_1
55+ restart : unless-stopped
56+ command : redis-server --requirepass 1234
57+ environment :
58+ TZ : Asia/Seoul
59+ volumes :
60+ - redis_data:/data
61+ networks :
62+ - common
63+ ports :
64+ - " 6379:6379"
65+ healthcheck :
66+ test : ["CMD", "redis-cli", "-a", "1234", "ping"]
67+ interval : 5s
68+ timeout : 3s
69+ retries : 10
70+
71+ elasticsearch_1 :
72+ build :
73+ context : .
74+ dockerfile : elasticsearch.Dockerfile
75+ container_name : elasticsearch_1
76+ restart : unless-stopped
77+ environment :
78+ - discovery.type=single-node
79+ - xpack.security.enabled=true
80+ - xpack.security.transport.ssl.enabled=false
81+ - xpack.security.http.ssl.enabled=false
82+ - ELASTIC_PASSWORD=1234
83+ - ES_JAVA_OPTS=-Xms512m -Xmx512m
84+ - TZ=Asia/Seoul
85+ volumes :
86+ - elasticsearch_data:/usr/share/elasticsearch/data
87+ networks :
88+ - common
89+ ports :
90+ - " 9200:9200"
91+ healthcheck :
92+ test : ["CMD-SHELL", "curl -s -u elastic:1234 http://localhost:9200/_cluster/health || exit 1"]
93+ interval : 10s
94+ timeout : 5s
95+ retries : 30
96+
97+ app_1 :
98+ build :
99+ context : .
100+ dockerfile : Dockerfile
101+ container_name : app_1
102+ restart : unless-stopped
103+ depends_on :
104+ mysql_init :
105+ condition : service_completed_successfully
106+ redis_1 :
107+ condition : service_healthy
108+ elasticsearch_1 :
109+ condition : service_healthy
110+ environment :
111+ # Spring Boot 설정
112+ - SPRING_PROFILES_ACTIVE=prod
113+ - TZ=Asia/Seoul
114+
115+ # 데이터베이스 설정
116+ - SPRING__DATASOURCE__URL___DB_NAME=bid_market
117+
118+ # Redis 설정
119+ - SPRING__DATA__REDIS__PASSWORD=1234
120+
121+ # JWT 설정
122+ - JWT_SECRET=a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6
123+ - JWT_ACCESS_TOKEN_EXPIRATION=30
124+ - JWT_REFRESH_TOKEN_EXPIRATION=7
125+
126+ # PG 설정 (필요시)
127+ - PG_TOSS_CLIENT_KEY=${PG_TOSS_CLIENT_KEY:-test_client_key}
128+ - PG_TOSS_SECRET_KEY=${PG_TOSS_SECRET_KEY:-test_secret_key}
129+ networks :
130+ - common
131+ ports :
132+ - " 8080:8080"
133+ volumes :
134+ - app_data:/data
135+
136+ networks :
137+ common :
138+ driver : bridge
139+
140+ volumes :
141+ mysql_data :
142+ mysql_config :
143+ redis_data :
144+ elasticsearch_data :
145+ elasticsearch_config :
146+ app_data:
0 commit comments