-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathdocker-compose.yml
236 lines (218 loc) · 5.23 KB
/
docker-compose.yml
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
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
version: '3.3'
services:
prometheus:
image: prom/prometheus
container_name: prometheus
restart: unless-stopped
ports:
- 9090:9090
volumes:
- ./prometheus.yml:/etc/prometheus/prometheus.yml
# - ./prometheus:/prometheus
command:
- --config.file=/etc/prometheus/prometheus.yml
- --storage.tsdb.path=/prometheus
- --storage.tsdb.retention.time=90d # 90일보다 오래된 metrics는 삭제
- --storage.tsdb.retention.size=10GB # 10GB를 넘을 시 오래된 metrics 삭제
- --web.console.libraries=/usr/share/prometheus/console_libraries
- --web.console.templates=/usr/share/proemtheus/consoles
- --web.enable-admin-api
networks:
- app-tier
grafana:
image: grafana/grafana
container_name: grafana
restart: unless-stopped
ports:
- 3000:3000
volumes:
- grafana-data:/var/lib/grafana
environment:
- GF_SECURITY_ADMIN_USER=admin # grafana 사용자 이름
- GF_SECURITY_ADMIN_PASSWORD=admin # grafana 사용자 비밀번호
- GF_USERS_ALLOW_SIGN_UP=false
networks:
- app-tier
cadvisor:
image: gcr.io/cadvisor/cadvisor
container_name: cadvisor
restart: unless-stopped
ports:
- "8081:8080"
volumes:
- "/:/rootfs:ro"
- "/var/run:/var/run:rw"
- "/sys:/sys:ro"
- "/var/lib/docker/:/var/lib/docker:ro"
networks:
- app-tier
# alertmanager:
# image: prom/alertmanager
# container_name: alertmanager
# restart: unless-stopped
# ports:
# - "9093:9093"
# volumes:
# - ./alertmanager.yml:/etc/alertmanager/alertmanager.yml
# command:
# - '--config.file=/etc/alertmanager/alertmanager.yml'
# - '--storage.path=/alertmanager'
# networks:
# - app-tier
nginx:
build:
context: ./nginx
ports:
- "80:80" # NGINX가 80 포트에서 호스트의 80 포트로 연결
volumes:
- ./backend/static:/static
- ./nginx/nginx.conf:/etc/nginx/nginx.conf:ro # 사용자 정의 NGINX 설정 파일을 마운트
- ./html:/usr/share/nginx/html:ro # 필요한 경우 정적 파일들을 마운트
depends_on:
- react
- django
networks:
- app-tier
rabbitmq:
image: "rabbitmq:3-management"
container_name: rabbitmq
env_file:
- .env
ports:
- "5672:5672"
- "15672:15672"
volumes:
- rabbitmq_data:/var/lib/rabbitmq
networks:
- app-tier
redis:
image: "redis:alpine"
container_name: redis
ports:
- "6379:6379"
volumes:
- redis_data:/data
networks:
- app-tier
celery:
build: ./backend
container_name: celery_worker
command: celery -A myproject worker --loglevel=info --pool=prefork
env_file:
- .env
depends_on:
- rabbitmq
- redis
- mysqldb
volumes:
- ./backend:/backend
networks:
- app-tier
react:
build:
context: ./frontend
container_name: react
stdin_open: true
command: sh -c "yarn dev --host"
ports:
- 5173:5173
volumes:
- ./frontend:/app/frontend
networks:
- app-tier
mysqldb:
image: mysql:latest
container_name: mysqldb
restart: always
env_file:
- .env
ports:
- '3306:3306'
volumes:
- sql-db:/var/lib/mysql
healthcheck:
test:
['CMD', 'mysqladmin', 'ping', '-h', 'localhost', '-uadmin', '-proot']
interval: 10s
timeout: 5s
retries: 3
networks:
- app-tier
phpmyadmin:
image: phpmyadmin
restart: always
links:
- mysqldb
ports:
- 8080:80
environment:
PMA_ARBITRARY: 1
PMA_HOST: mysqldb
PMA_PORT: 3306
networks:
- app-tier
mongodb:
image: mongo:latest
container_name: mongodb
restart: always
env_file:
- .env
volumes:
- mongo-db:/data/db
networks:
- app-tier
ports:
- '27017:27017'
mongo-express:
image: mongo-express
container_name: mongo-express
restart: always
ports:
- '8082:8081'
environment:
ME_CONFIG_MONGODB_ADMINUSERNAME: ${MONGO_INITDB_ROOT_USERNAME}
ME_CONFIG_MONGODB_ADMINPASSWORD: ${MONGO_INITDB_ROOT_PASSWORD}
ME_CONFIG_MONGODB_SERVER: mongodb
ME_CONFIG_MONGODB_PORT: 27017
ME_CONFIG_MONGODB_ENABLE_ADMIN: 'true'
ME_CONFIG_MONGODB_AUTH_DATABASE: admin
ME_CONFIG_BASICAUTH_USERNAME: ${ME_CONFIG_BASICAUTH_USERNAME}
ME_CONFIG_BASICAUTH_PASSWORD: ${ME_CONFIG_BASICAUTH_PASSWORD}
depends_on:
- mongodb
networks:
- app-tier
django:
build:
context: ./backend
container_name: django
command: >
sh -c "python manage.py migrate &&
python manage.py collectstatic --noinput &&
gunicorn myproject.wsgi:application --bind 0.0.0.0:8001 --timeout 150"
stdin_open: true
ports:
- 8001:8001
volumes:
- ./backend/:/backend/
- sql-db:/var/lib/mysql
- ./backend/static/:/backend/static/
depends_on:
- mysqldb
- mongodb
networks:
- app-tier
restart: always
env_file:
- .env
expose:
- 8001
volumes:
rabbitmq_data:
sql-db:
mongo-db:
grafana-data:
redis_data:
networks:
app-tier:
driver: bridge