forked from S-V-23-BootCamp-Team-F/CropDoctor
-
Notifications
You must be signed in to change notification settings - Fork 0
/
docker-compose.yml
239 lines (223 loc) · 6.35 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
237
238
239
version: "3.7"
# port : 호스트 OS와 컨테이너의 포트를 바인딩 시켜준다.
# expose : 호스트 OS에 포트를 공개하지 않고, 컨테이너만 공개
# - 호스트 OS에 직접 연결되지 않고 링크등으로 연결된 컨테이너-컨테이너간의 통신만 필요한 경우 사용
# depends_on : 서비스간의 종속성 순서대로 서비스를 시작
# container_name : 컨테이너 이름을 지정
# volumes : docker 컨테이너의 생명 주기와 관계없이 데이터를 영속적으로 저장
services:
backend:
container_name: backend
# env_file: ./.env
build: ./backend/.
image: backend
volumes:
- ./backend/:/backend/
- static_volume:/backend/static # <-- bind the static volume
stdin_open: true
tty: true
ports:
- 8000:8000
command: sh -c "python manage.py migrate && gunicorn --bind :8000 backend.wsgi:application"
networks:
- backend_network
environment:
- CHOKIDAR_USEPOLLING=true
- DJANGO_SETTINGS_MODULE=backend.settings
expose:
- 8000
frontend:
container_name: frontend
build: ./frontend
volumes:
- ./frontend/:/frontend
- build_folder:/frontend/dist
- ./frontend/node_modules/:/frontend/node_modules
tty: true
backend-server:
container_name: nginx-back
build:
context: ./nginx/.
dockerfile: Dockerfile
volumes:
- static_volume:/backend/static # <-- bind the static volume
- build_folder:/var/www/frontend
- ./nginx/log:/var/log/nginx # nginx log path (require same option on nginx container)
ports:
- "80:80"
- "443:443"
depends_on:
- backend
expose:
- 80
- 443
networks:
- backend_network
prometheus:
image: prom/prometheus:latest
restart: unless-stopped
ports:
- 9090:9090
volumes:
- ./prometheus:/etc/prometheus
- prometheus_data:/prometheus
command:
- "--config.file=/etc/prometheus/prometheus.yml"
- "--storage.tsdb.path=/prometheus"
- "--web.console.libraries=/etc/prometheus/console_libraries"
- "--web.console.templates=/etc/prometheus/consoles"
- "--storage.tsdb.retention.time=200h"
- "--web.enable-lifecycle"
depends_on:
- backend
networks:
- backend_network
expose:
- 9090
grafana:
image: grafana/grafana:latest
ports:
- 3333:3000
restart: unless-stopped
environment:
- GF_SECURITY_ADMIN_USER=admin
- GF_SECURITY_ADMIN_PASSWORD=grafana
- GF_USERS_ALLOW_SIGN_UP=false
depends_on:
- backend
- prometheus
volumes:
- grafana_data:/var/lib/grafana
- ./grafana/provisioning:/etc/grafana/provisioning
networks:
- backend_network
node-exporter:
image: prom/node-exporter:latest
container_name: node-exporter # 컨테이너를 stop시키기 전까지 항상 재시작
restart: unless-stopped
ports:
- 9100:9100
networks:
- backend_network
alertmanager:
image: prom/alertmanager:latest
ports:
- 9093:9093
restart: always
volumes:
- ./alertmanager/:/etc/alertmanager/
networks:
- backend_network
command:
- "--config.file=/etc/alertmanager/config.yml"
- "--storage.path=/alertmanager"
rabbitmq:
image: rabbitmq:3.7-management
container_name: "rabbitmq"
ports:
# Expose the port for the worker to add/get tasks
- 5672:5672
# OPTIONAL: Expose the GUI port
- 15672:15672
expose:
- 5672
environment:
- CELERY_BROKER_URL=amqp://guest:guest@rabbitmq:5672//
depends_on:
- backend
networks:
- backend_network
tty: true
celery:
container_name: celery_service
image: backend
volumes:
- ./backend:/backend
environment:
- CELERY_BROKER_URL=amqp://guest:guest@rabbitmq:5672//
command: >
bash -c "celery -A backend worker --loglevel=info --pool=solo"
networks:
- backend_network
depends_on:
- rabbitmq
- backend
tty: true
elasticsearch:
build:
context: ./elk/elasticsearch
args:
ELASTIC_VERSION: 8.5.2
volumes:
- ./elk/elasticsearch/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml:ro,Z
- elasticsearch:/usr/share/elasticsearch/data:Z
ports:
- 9200:9200
- 9300:9300
environment:
node.name: elasticsearch
ES_JAVA_OPTS: -Xms512m -Xmx512m
# Bootstrap password.
# Used to initialize the keystore during the initial startup of
# Elasticsearch. Ignored on subsequent runs.
ELASTIC_PASSWORD: changeme
# Use single node discovery in order to disable production mode and avoid bootstrap checks.
# see: https://www.elastic.co/guide/en/elasticsearch/reference/current/bootstrap-checks.html
discovery.type: single-node
restart: unless-stopped
logstash:
build:
context: ./elk/logstash
args:
ELASTIC_VERSION: 8.5.2
volumes:
- ./elk/logstash/config/logstash.yml:/usr/share/logstash/config/logstash.yml:ro,Z
- ./elk/logstash/pipeline:/usr/share/logstash/pipeline:ro,Z
ports:
- 5044:5044
- 50000:50000/tcp
- 50000:50000/udp
- 9600:9600
environment:
LS_JAVA_OPTS: -Xms256m -Xmx256m
LOGSTASH_INTERNAL_PASSWORD: changeme
depends_on:
- elasticsearch
restart: unless-stopped
kibana:
build:
context: ./elk/kibana
args:
ELASTIC_VERSION: 8.5.2
volumes:
- ./elk/kibana/config/kibana.yml:/usr/share/kibana/config/kibana.yml:ro,Z
ports:
- 5601:5601
environment:
KIBANA_SYSTEM_PASSWORD: changeme
depends_on:
- elasticsearch
restart: unless-stopped
filebeat:
build:
context: ./elk/filebeat
args:
ELASTIC_VERSION: 8.5.2
entrypoint: "filebeat -e -strict.perms=false"
volumes:
- ./elk/filebeat/config/filebeat.yml:/usr/share/filebeat/filebeat.yml
- ./nginx/log:/var/log/nginx # nginx log path (require same option on nginx container)
depends_on:
- logstash
- elasticsearch
- kibana
networks:
backend_network:
driver: bridge
volumes:
build_folder: null
static_volume:
# 인스턴스에 대해 데이터를 영구적으로 유지하기 위해 2개의 볼륨 사용
prometheus_data: {}
grafana_data: {}
elasticsearch: