-
Notifications
You must be signed in to change notification settings - Fork 2
/
docker-compose.prod.yml
128 lines (119 loc) · 4 KB
/
docker-compose.prod.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
# 배포용 docker compose 파일
# 실행 방법: sudo docker compose -f docker-compose.prod.yml up -d --build
version: "3"
services:
frontend:
container_name: frontend
build:
context: ./frontend
dockerfile: Dockerfile.prod
stdin_open: true
volumes:
# :을 기준으로 왼쪽은 빌드 이전의 로컬 폴더 오른쪽은 컨테이너 내부의 폴더
- ./frontend/:/frontend # 로컬의 ./frontend 폴더를 frontend 컨테이너의 /frontend로 한다.
# 하단 volumes에서 build_folder를 정의헀으므로 build_folder는 마치 변수와도 같이 취급된다.
# build_folder:/frontend/build가 실행될 때, frontend 컨테이너의 /frontend/build의 내용이 하단에서 null으로 정의했던 build_folder로 동기화된다.
# 즉, frontend 컨테이너의 /frontend/build의 내용이 build_folder로, 오른쪽에서 왼쪽으로 전달되는 것으로 이해하면 된다.
- build_folder:/frontend/dist # 하단 volume에서 정의한 build_folder을 frontend 컨테이너의 /frontend/build/로 한다.
- ./frontend/node_modules/:/frontend/node_modules
tty: true
environment:
# - NODE_ENV=development
- CHOKIDAR_USEPOLLING=true
web:
build:
context: ./backend
dockerfile: Dockerfile
volumes:
- static_volume:/app/backend/staticfiles
- media_volume:/app/backend/mediafiles
- ./backend:/app/backend
ports:
- "8000:8000"
container_name: backend
nginx:
container_name: nginx
restart: unless-stopped
build:
context: ./nginx
ports:
- "80:80"
volumes:
- static_volume:/app/backend/staticfiles
- media_volume:/app/backend/mediafiles
- build_folder:/var/www/frontend # 하단 volumes에서 정의한 build_folder를 nginx 컨테이너의 /var/www/frontend/로 한다.
- ./nginx/nginx.conf:/etc/nginx/conf.d/nginx.conf
- ./nginx/log:/var/log/nginx
depends_on:
- frontend
prometheus:
image: prom/prometheus:latest
restart: always
ports:
- "9090:9090"
links:
- cadvisor
- alertmanager
volumes:
- ./monitoring/prometheus/:/etc/prometheus/
user: root
depends_on:
- cadvisor
command:
- "--config.file=/etc/prometheus/prometheus.yml"
- "--storage.tsdb.path=/prometheus"
- "--web.console.libraries=/usr/share/prometheus/console_libraries"
- "--web.console.templates=/usr/share/prometheus/consoles"
grafana:
build:
context: ./monitoring/grafana
container_name: grafana
ports:
- "3001:3000"
depends_on:
- prometheus
node-exporter:
container_name: node-exporter
image: prom/node-exporter
volumes:
- /proc:/host/proc:ro
- /sys:/host/sys:ro
- /:/rootfs:ro
command:
- "--path.procfs=/host/proc"
- "--path.sysfs=/host/sys"
- --collector.filesystem.ignored-mount-points
- "^/(sys|proc|dev|host|etc|rootfs/var/lib/docker/containers|rootfs/var/lib/docker/overlay2|rootfs/run/docker/netns|rootfs/var/lib/docker/aufs)($$|/)"
ports:
- "9100:9100"
restart: always
alertmanager:
container_name: alertmanager
image: prom/alertmanager
ports:
- "9093:9093"
volumes:
- ./monitoring/alertmanager/:/etc/alertmanager/
restart: always
command:
- "--config.file=/etc/alertmanager/config.yml"
- "--storage.path=/alertmanager"
cadvisor:
container_name: cadvisor
image: gcr.io/cadvisor/cadvisor:v0.46.0
volumes:
- /:/rootfs:ro
- /var/run:/var/run:rw
- /sys:/sys:ro
- /var/lib/docker/:/var/lib/docker:ro
- /dev/kmsg:/dev/kmsg:ro
ports:
- "8080:8080"
privileged: true
restart: always
volumes:
static_volume:
media_volume:
grafana-storage:
prometheus-storage:
build_folder: null # frontend 컨테이너가 실행되기 전에는 빈 값이나, frontend 컨테이너가 실행된 이후에는 build_folder의 내용이 빌드된 리액트 정적 파일들이 있게 된다.