-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathdocker-compose-prod.yml
More file actions
132 lines (117 loc) · 4.59 KB
/
Copy pathdocker-compose-prod.yml
File metadata and controls
132 lines (117 loc) · 4.59 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
# =============================================================================
# 운영 서버 환경용 Docker Compose 설정 (Profile: prod)
# =============================================================================
# 사용법: docker-compose -f docker-compose-prod.yml --env-file .env.prod up -d
# 고성능 리소스 할당 (Dev의 3배 메모리)
# =============================================================================
services:
devnogi-gateway-app:
image: ${DOCKER_USERNAME}/${DOCKER_REPO}:${DOCKER_IMAGE_TAG:-prod}
pull_policy: always
container_name: devnogi-gateway-app-prod
ports:
- "${SERVER_PORT}:${SERVER_PORT}"
env_file:
- .env.prod # 운영 환경 변수 파일 (JWT, 서비스 URL 등 민감 정보)
labels:
autoheal: "true"
environment:
# === Application Configuration ===
SPRING_PROFILES_ACTIVE: prod
LANG: C.UTF-8
LC_ALL: C.UTF-8
SERVER_PORT: ${SERVER_PORT}
# === JWT Configuration ===
JWT_SECRET_KEY: ${JWT_SECRET_KEY}
JWT_ISSUER: ${JWT_ISSUER}
# === Service Discovery URLs ===
AUTH_SERVER_URL: ${AUTH_SERVER_URL}
OPEN_API_BATCH_SERVER_URL: ${OPEN_API_BATCH_SERVER_URL}
COMMUNITY_SERVER_URL: ${COMMUNITY_SERVER_URL}
TECH_BLOG_SERVER_URL: ${TECH_BLOG_SERVER_URL}
# === CORS Configuration ===
CORS_ALLOWED_ORIGINS: ${CORS_ALLOWED_ORIGINS}
CORS_ALLOWED_HEADERS: ${CORS_ALLOWED_HEADERS:-*}
CORS_ALLOW_CREDENTIALS: ${CORS_ALLOW_CREDENTIALS:-true}
# === Logging Configuration ===
LOG_LEVEL_ROOT: ${LOG_LEVEL_ROOT:-INFO}
LOG_LEVEL_GATEWAY: ${LOG_LEVEL_GATEWAY:-INFO}
LOG_LEVEL_NETTY: ${LOG_LEVEL_NETTY:-INFO}
# === Docker Configuration ===
DOCKER_USERNAME: ${DOCKER_USERNAME}
DOCKER_REPO: ${DOCKER_REPO}
# === JVM Configuration (Prod - 고성능, Dev의 3배) ===
# Heap: 768m~1536m, Non-Heap: ~786m, Total: ~2322m
JAVA_OPTS: >-
-Xms${JAVA_OPTS_XMS:-768m}
-Xmx${JAVA_OPTS_XMX:-1536m}
-XX:MaxMetaspaceSize=${JAVA_OPTS_MAX_METASPACE_SIZE:-450m}
-XX:ReservedCodeCacheSize=${JAVA_OPTS_RESERVED_CODE_CACHE_SIZE:-144m}
-XX:MaxDirectMemorySize=${JAVA_OPTS_MAX_DIRECT_MEMORY_SIZE:-192m}
-Xss${JAVA_OPTS_XSS:-512k}
-XX:+UseG1GC
-XX:MaxGCPauseMillis=${JAVA_OPTS_MAX_GC_PAUSE_MILLIS:-100}
-XX:G1HeapRegionSize=${JAVA_OPTS_G1_HEAP_REGION_SIZE:-4m}
-XX:InitiatingHeapOccupancyPercent=${JAVA_OPTS_INITIATING_HEAP_OCCUPANCY_PERCENT:-35}
-XX:+TieredCompilation
-XX:TieredStopAtLevel=${JAVA_OPTS_TIERED_STOP_AT_LEVEL:-4}
-XX:CICompilerCount=${JAVA_OPTS_CI_COMPILER_COUNT:-4}
-XX:+UseCompressedOops
-XX:+UseCompressedClassPointers
-Djava.security.egd=file:/dev/./urandom
-Dspring.jmx.enabled=false
volumes:
- app-logs:/app/logs
restart: on-failure:5
# === Docker Resource Limits (Prod - 고성능, Dev의 3배) ===
deploy:
resources:
limits:
memory: 2250M
reservations:
memory: 1536M
networks:
- app-network
- devnogi-network # 다른 서비스 컨테이너와 통신
# === Health Check (Prod - 빈번한 체크, 빠른 복구) ===
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:${SERVER_PORT}/actuator/health"]
interval: 15s # 더 자주 체크 (운영 안정성)
timeout: 10s # 더 짧은 타임아웃 (빠른 감지)
retries: 5 # 더 많은 재시도 (일시적 장애 허용)
start_period: 180s # 더 긴 시작 유예 (충분한 워밍업)
# === Logging (Prod - 대용량, 장기 보관) ===
logging:
driver: "json-file"
options:
max-size: "50m"
max-file: "5"
# === Autoheal (Prod - 빈번한 체크, 긴 graceful shutdown) ===
autoheal:
image: willfarrell/autoheal:latest
container_name: devnogi-gateway-autoheal-prod
restart: unless-stopped
environment:
AUTOHEAL_INTERVAL: 15 # 더 자주 체크 (초)
AUTOHEAL_START_PERIOD: 0 # 시작 유예 시간
AUTOHEAL_DEFAULT_STOP_TIMEOUT: 30 # 더 긴 graceful shutdown (초)
DOCKER_SOCK: /var/run/docker.sock
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
networks:
- app-network
deploy:
resources:
limits:
memory: 75M
reservations:
memory: 30M
volumes:
app-logs:
driver: local
networks:
app-network:
driver: bridge
devnogi-network:
external: true
name: infra_devnogi-network # 기존 인프라 네트워크 (다른 서비스들과 통신)