@@ -2,7 +2,6 @@ services:
22 # ==================== PostgreSQL ====================
33 postgres :
44 image : postgres:16-alpine
5- # container_name: tt_postgres # 운영에서는 제거 권장 (blue/green, preview 배포 시 충돌 방지)
65 restart : always
76 environment :
87 POSTGRES_USER : ${POSTGRES_USER}
@@ -22,11 +21,7 @@ services:
2221 retries : 5
2322
2423 # ==================== Redis Cluster ====================
25- # Redis Cluster Node 1 (Master)
26- # container_name 제거 권장: 운영 환경에서는 동일 서버의 여러 인스턴스나 blue/green 배포 시 충돌 방지
27- # 단, 로컬 개발에서는 편의를 위해 유지 가능
2824 redis-node-1 :
29- # container_name: redis-node-1 # 운영에서는 제거 권장
3025 image : redis:7-alpine
3126 command :
3227 - redis-server
@@ -69,9 +64,7 @@ services:
6964 timeout : 5s
7065 retries : 5
7166
72- # Redis Cluster Node 2 (Master)
7367 redis-node-2 :
74- # container_name: redis-node-2 # 운영에서는 제거 권장
7568 image : redis:7-alpine
7669 command :
7770 - redis-server
@@ -114,9 +107,7 @@ services:
114107 timeout : 5s
115108 retries : 5
116109
117- # Redis Cluster Node 3 (Master)
118110 redis-node-3 :
119- # container_name: redis-node-3 # 운영에서는 제거 권장
120111 image : redis:7-alpine
121112 command :
122113 - redis-server
@@ -159,9 +150,7 @@ services:
159150 timeout : 5s
160151 retries : 5
161152
162- # Redis Cluster Node 4 (Slave)
163153 redis-node-4 :
164- # container_name: redis-node-4 # 운영에서는 제거 권장
165154 image : redis:7-alpine
166155 command :
167156 - redis-server
@@ -204,9 +193,7 @@ services:
204193 timeout : 5s
205194 retries : 5
206195
207- # Redis Cluster Node 5 (Slave)
208196 redis-node-5 :
209- # container_name: redis-node-5 # 운영에서는 제거 권장
210197 image : redis:7-alpine
211198 command :
212199 - redis-server
@@ -249,9 +236,7 @@ services:
249236 timeout : 5s
250237 retries : 5
251238
252- # Redis Cluster Node 6 (Slave)
253239 redis-node-6 :
254- # container_name: redis-node-6 # 운영에서는 제거 권장
255240 image : redis:7-alpine
256241 command :
257242 - redis-server
@@ -295,8 +280,6 @@ services:
295280 retries : 5
296281
297282 # ==================== Redis Cluster 초기화 ====================
298- # Redis Cluster를 자동으로 초기화합니다 (이미 초기화되어 있으면 스킵)
299- # container_name 제거: 임시 컨테이너이므로 blue/green 배포 등에서 충돌 방지
300283 redis-cluster-init :
301284 image : redis:7-alpine
302285 depends_on :
@@ -319,66 +302,42 @@ services:
319302 command : sh /init-cluster.sh
320303 networks :
321304 - common
322- restart : " no" # 한 번만 실행 (종료 후 재시작 안 함)
305+ restart : " no"
323306
324307 # ==================== Spring Boot Application ====================
325308 app :
326309 image : ghcr.io/chehyeon-kim23/tt_backend:latest
327- # container_name: tt_app # 운영에서는 제거 권장 (blue/green, preview 배포 시 충돌 방지)
328310 restart : always
329311 depends_on :
330312 postgres :
331313 condition : service_healthy
332314 redis-cluster-init :
333- condition : service_completed_successfully # 초기화 완료 대기
315+ condition : service_completed_successfully
334316 ports :
335317 - " 8080:8080"
318+ networks :
319+ - common
320+
321+ # (A) Doppler env를 컨테이너에 "통째로" 주입
322+ env_file :
323+ - ./doppler.env
324+
325+ # (B) Doppler에 안 넣었거나, compose에서 강제하고 싶은 값만 여기서 오버라이드
336326 environment :
337327 - SPRING_PROFILES_ACTIVE=prod
338- - JAVA_TOOL_OPTIONS=-Duser.timezone=Asia/Seoul
339- - APP_FRONTEND_MY_PAGE_URL=${APP_FRONTEND_MY_PAGE_URL:-https://doncrytt.vercel.app/my-page}
340- - AWS_S3_BUCKET=${AWS_S3_BUCKET}
341- - AWS_REGION=${AWS_REGION:-ap-northeast-2}
342- - POSTGRES_USER=${POSTGRES_USER}
343- - POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
344- - POSTGRES_DB=${POSTGRES_DB}
345328 - POSTGRES_HOST=postgres
346329 - POSTGRES_PORT=${POSTGRES_PORT:-5432}
347- # Redis Cluster 설정 (로컬호스트 대신 컨테이너 이름 사용 가능)
348- - REDIS_PASSWORD=${REDIS_PASSWORD}
349330 - REDIS_MODE=cluster
350331 - REDIS_CLUSTER_NODES=redis-node-1:7000,redis-node-2:7001,redis-node-3:7002,redis-node-4:7003,redis-node-5:7004,redis-node-6:7005
351- # 또는 호스트 머신에서 접근하는 경우:
352- # - REDIS_CLUSTER_NODES=${REDIS_CLUSTER_NODES:-localhost:7000,localhost:7001,localhost:7002,localhost:7003,localhost:7004,localhost:7005}
353- - MAIL_HOST=${MAIL_HOST}
354- - MAIL_PORT=${MAIL_PORT}
355- - MAIL_USERNAME=${MAIL_USERNAME}
356- - MAIL_PASSWORD=${MAIL_PASSWORD}
357- - MAIL_FROM_ADDRESS=${MAIL_FROM_ADDRESS}
358- - MAIL_FROM_NAME=${MAIL_FROM_NAME}
359- - JWT_SECRET=${JWT_SECRET}
360- - JWT_ACCESS_EXPIRATION=${JWT_ACCESS_EXPIRATION}
361- - JWT_REFRESH_EXPIRATION=${JWT_REFRESH_EXPIRATION}
362- - KAKAO_CLIENT_ID=${KAKAO_CLIENT_ID}
363- - KAKAO_CLIENT_SECRET=${KAKAO_CLIENT_SECRET}
364- - KAKAO_REDIRECT_URI=${KAKAO_REDIRECT_URI}
365- - KAKAO_TOKEN_URI=${KAKAO_TOKEN_URI}
366- - KAKAO_USER_INFO_URI=${KAKAO_USER_INFO_URI}
367- - KAKAO_ISSUER=${KAKAO_ISSUER}
368- - DDL_AUTO=${DDL_AUTO}
369- - SLACK_WEBHOOK_URL=${SLACK_WEBHOOK_URL}
370- command : java -jar app.jar
371- networks :
372- - common
332+
373333 healthcheck :
374334 test : [ "CMD-SHELL", "wget --quiet --tries=1 --spider http://localhost:8080/actuator/health || exit 1" ]
375335 interval : 30s
376336 timeout : 10s
377337 retries : 3
378338 start_period : 60s
379- # ==================== Monitoring Stack ====================
380339
381- # Prometheus - 메트릭 수집
340+ # ==================== Monitoring Stack ====================
382341 prometheus :
383342 image : prom/prometheus:v3.8.1
384343 restart : unless-stopped
@@ -403,7 +362,7 @@ services:
403362 interval : 30s
404363 timeout : 10s
405364 retries : 3
406- # Grafana - 대시보드 시각화
365+
407366 grafana :
408367 image : grafana/grafana:12.3.0
409368 restart : unless-stopped
@@ -427,7 +386,7 @@ services:
427386 interval : 30s
428387 timeout : 10s
429388 retries : 3
430- # Alertmanager - 알림 관리
389+
431390 alertmanager :
432391 image : prom/alertmanager:v0.30.0
433392 restart : unless-stopped
@@ -450,7 +409,7 @@ services:
450409 interval : 30s
451410 timeout : 10s
452411 retries : 3
453- # Redis Exporter - Redis 메트릭 수집
412+
454413 redis-exporter :
455414 image : oliver006/redis_exporter:v1.80.1
456415 restart : unless-stopped
@@ -469,7 +428,7 @@ services:
469428 interval : 30s
470429 timeout : 10s
471430 retries : 3
472- # Postgres Exporter - PostgreSQL 메트릭 수집
431+
473432 postgres-exporter :
474433 image : prometheuscommunity/postgres-exporter:v0.15.0
475434 restart : unless-stopped
@@ -487,6 +446,7 @@ services:
487446 interval : 30s
488447 timeout : 10s
489448 retries : 3
449+
490450networks :
491451 common :
492452 driver : bridge
0 commit comments