-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathdocker-compose.prod.yml
More file actions
156 lines (151 loc) · 5.06 KB
/
docker-compose.prod.yml
File metadata and controls
156 lines (151 loc) · 5.06 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
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
services:
# MySQL Database - PRODUCTION
mysql-prod:
image: mysql:8.0
container_name: wilo-mysql-prod
restart: unless-stopped
environment:
MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
MYSQL_DATABASE: wilo_db_prod
TZ: Asia/Seoul
ports:
- "3308:3306" # 외부 포트 3309로 노출
volumes:
- mysql_prod_data:/var/lib/mysql
command:
- --character-set-server=utf8mb4
- --collation-server=utf8mb4_unicode_ci
- --default-time-zone=+09:00
networks:
- wilo-network
healthcheck:
test: ["CMD", "mysqladmin", "ping", "-h", "localhost", "-u", "root", "-p${MYSQL_ROOT_PASSWORD}"]
interval: 10s
timeout: 5s
retries: 5
# Redis Cache - PRODUCTION
redis-prod:
image: redis:7.2-alpine
container_name: wilo-redis-prod
restart: unless-stopped
ports:
- "6391:6379"
volumes:
- redis_prod_data:/data
networks:
- wilo-network
healthcheck:
test: ["CMD", "redis-cli", "ping"]
interval: 10s
timeout: 5s
retries: 5
command: redis-server --appendonly yes --maxmemory 512mb --maxmemory-policy allkeys-lru
# Spring Boot Application - PRODUCTION (Blue)
app-prod-blue:
image: ${DOCKER_USERNAME}/wilo:prod-latest
container_name: wilo-app-prod-blue
restart: unless-stopped
ports:
- "8090:8080" # Blue 포트 (외부 8090 -> 컨테이너 내부 8080)
environment:
TZ: Asia/Seoul
SPRING_PROFILES_ACTIVE: prod
SPRING_DATASOURCE_URL: jdbc:mysql://mysql-prod:3306/wilo_db_prod?serverTimezone=Asia/Seoul&characterEncoding=UTF-8
SPRING_DATASOURCE_USERNAME: root
SPRING_DATASOURCE_PASSWORD: ${MYSQL_ROOT_PASSWORD}
SPRING_DATA_REDIS_HOST: redis-prod
SPRING_DATA_REDIS_PORT: 6379
AI_BASE_URL: ${AI_BASE_URL}
SPRING_CRYPTO_SECRET_KEY: ${SPRING_CRYPTO_SECRET_KEY}
JWT_SECRET: ${JWT_SECRET}
JWT_ACCESS_EXP: ${JWT_ACCESS_EXP}
JWT_REFRESH_EXP: ${JWT_REFRESH_EXP}
CLOUD_AWS_S3_BUCKET: ${CLOUD_AWS_S3_BUCKET}
CLOUD_AWS_CREDENTIALS_ACCESS_KEY: ${CLOUD_AWS_CREDENTIALS_ACCESS_KEY}
CLOUD_AWS_CREDENTIALS_SECRET_KEY: ${CLOUD_AWS_CREDENTIALS_SECRET_KEY}
NCP_ACCESS_KEY: ${NCP_ACCESS_KEY}
NCP_SECRET_KEY: ${NCP_SECRET_KEY}
NCP_SENDER_PHONE: ${NCP_SENDER_PHONE}
NCP_SERVICE_ID: ${NCP_SERVICE_ID}
APPLE_CLIENT_ID: ${APPLE_CLIENT_ID:-}
APPLE_TEAM_ID: ${APPLE_TEAM_ID:-}
APPLE_KEY_ID: ${APPLE_KEY_ID:-}
APPLE_PRIVATE_KEY: ${APPLE_PRIVATE_KEY:-}
SENTRY_DSN: ${SENTRY_DSN}
SENTRY_AUTH_TOKEN: ${SENTRY_AUTH_TOKEN}
volumes:
- app_prod_logs:/app/logs
depends_on:
mysql-prod:
condition: service_healthy
redis-prod:
condition: service_healthy
networks:
- wilo-network
healthcheck:
test: ["CMD-SHELL", "wget --quiet --tries=1 --spider http://localhost:8080/actuator/health || exit 1"]
interval: 10s
timeout: 10s
retries: 3
start_period: 30s
# Spring Boot Application - PRODUCTION (Green)
app-prod-green:
image: ${DOCKER_USERNAME}/wilo:prod-latest
container_name: wilo-app-prod-green
restart: unless-stopped
ports:
- "8091:8080" # Green 포트 (외부 8091 -> 컨테이너 내부 8080)
environment:
TZ: Asia/Seoul
SPRING_PROFILES_ACTIVE: prod
SPRING_DATASOURCE_URL: jdbc:mysql://mysql-prod:3306/wilo_db_prod?serverTimezone=Asia/Seoul&characterEncoding=UTF-8
SPRING_DATASOURCE_USERNAME: root
SPRING_DATASOURCE_PASSWORD: ${MYSQL_ROOT_PASSWORD}
SPRING_DATA_REDIS_HOST: redis-prod
SPRING_DATA_REDIS_PORT: 6379
# 환경 변수
AI_BASE_URL: ${AI_BASE_URL}
SPRING_CRYPTO_SECRET_KEY: ${SPRING_CRYPTO_SECRET_KEY}
JWT_SECRET: ${JWT_SECRET}
JWT_ACCESS_EXP: ${JWT_ACCESS_EXP}
JWT_REFRESH_EXP: ${JWT_REFRESH_EXP}
APPLE_CLIENT_ID: ${APPLE_CLIENT_ID:-}
APPLE_TEAM_ID: ${APPLE_TEAM_ID:-}
APPLE_KEY_ID: ${APPLE_KEY_ID:-}
APPLE_PRIVATE_KEY: ${APPLE_PRIVATE_KEY:-}
CLOUD_AWS_S3_BUCKET: ${CLOUD_AWS_S3_BUCKET}
CLOUD_AWS_CREDENTIALS_ACCESS_KEY: ${CLOUD_AWS_CREDENTIALS_ACCESS_KEY}
CLOUD_AWS_CREDENTIALS_SECRET_KEY: ${CLOUD_AWS_CREDENTIALS_SECRET_KEY}
NCP_ACCESS_KEY: ${NCP_ACCESS_KEY}
NCP_SECRET_KEY: ${NCP_SECRET_KEY}
NCP_SENDER_PHONE: ${NCP_SENDER_PHONE}
NCP_SERVICE_ID: ${NCP_SERVICE_ID}
SENTRY_DSN: ${SENTRY_DSN}
SENTRY_AUTH_TOKEN: ${SENTRY_AUTH_TOKEN}
volumes:
- app_prod_logs:/app/logs
depends_on:
mysql-prod:
condition: service_healthy
redis-prod:
condition: service_healthy
networks:
- wilo-network
healthcheck:
test: ["CMD-SHELL", "wget --quiet --tries=1 --spider http://localhost:8080/actuator/health || exit 1"]
interval: 10s
timeout: 10s
retries: 3
start_period: 30s
profiles:
- green # 기본적으로는 비활성화, 배포 시에만 활성화
networks:
wilo-network:
driver: bridge
volumes:
mysql_prod_data:
driver: local
redis_prod_data:
driver: local
app_prod_logs:
driver: local