-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathdocker-compose.yml
More file actions
104 lines (97 loc) · 2.98 KB
/
Copy pathdocker-compose.yml
File metadata and controls
104 lines (97 loc) · 2.98 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
services:
app:
build: .
ports:
- "8080:8080"
environment:
TZ: Asia/Seoul
SPRING_PROFILES_ACTIVE: ${SPRING_PROFILES_ACTIVE}
POSTGRES_DB: ${POSTGRES_DB}
POSTGRES_USER: ${POSTGRES_USER}
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
GEMINI_ENABLED: ${GEMINI_ENABLED}
GEMINI_API_KEY: ${GEMINI_API_KEY}
GEMINI_MODEL: ${GEMINI_MODEL}
GEMINI_TIMEOUT: ${GEMINI_TIMEOUT}
depends_on:
db:
condition: service_healthy
db:
image: postgres:18
ports:
- "${DB_BIND_ADDR:-127.0.0.1}:5432:5432"
environment:
TZ: Asia/Seoul
POSTGRES_DB: ${POSTGRES_DB}
POSTGRES_USER: ${POSTGRES_USER}
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
# 볼륨이 이미 UTC로 initdb된 상태라 TZ 환경변수만으로는 postgresql.conf의 timezone이 안 바뀐다.
# 실행 옵션으로 서버 timezone을 KST로 못 박는다.
command: ["postgres", "-c", "timezone=Asia/Seoul", "-c", "log_timezone=Asia/Seoul"]
volumes:
- db-data:/var/lib/postgresql
healthcheck:
test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER}"]
interval: 5s
timeout: 5s
retries: 5
# 아래 모니터링 서비스는 COMPOSE_PROFILES=monitoring 일 때만 뜬다(운영 인스턴스에서만 활성화).
prometheus:
image: prom/prometheus:latest
profiles: [monitoring]
volumes:
- ./monitoring/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml:ro
- prometheus-data:/prometheus
command:
- --config.file=/etc/prometheus/prometheus.yml
- --storage.tsdb.retention.time=15d
restart: unless-stopped
grafana:
image: grafana/grafana:latest
profiles: [monitoring]
ports:
# 외부 노출 없이 호스트 로컬에만 바인딩. 접근은 SSH 터널로.
- "127.0.0.1:3000:3000"
environment:
GF_SECURITY_ADMIN_PASSWORD: ${GF_SECURITY_ADMIN_PASSWORD:-admin}
GF_USERS_ALLOW_SIGN_UP: "false"
volumes:
- ./monitoring/grafana/provisioning:/etc/grafana/provisioning:ro
- grafana-data:/var/lib/grafana
depends_on:
- prometheus
restart: unless-stopped
node-exporter:
image: prom/node-exporter:latest
profiles: [monitoring]
command:
- --path.rootfs=/host
pid: host
volumes:
- /:/host:ro,rslave
restart: unless-stopped
cadvisor:
image: gcr.io/cadvisor/cadvisor:latest
profiles: [monitoring]
privileged: true
devices:
- /dev/kmsg
volumes:
- /:/rootfs:ro
- /var/run:/var/run:ro
- /sys:/sys:ro
- /var/lib/docker/:/var/lib/docker:ro
restart: unless-stopped
postgres-exporter:
image: prometheuscommunity/postgres-exporter:latest
profiles: [monitoring]
environment:
DATA_SOURCE_NAME: "postgresql://${POSTGRES_USER}:${POSTGRES_PASSWORD}@db:5432/${POSTGRES_DB}?sslmode=disable"
depends_on:
db:
condition: service_healthy
restart: unless-stopped
volumes:
db-data:
prometheus-data:
grafana-data: