-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathdocker-compose.yml
More file actions
134 lines (126 loc) · 3.95 KB
/
Copy pathdocker-compose.yml
File metadata and controls
134 lines (126 loc) · 3.95 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
# docker-compose.yml
# ----------------------------------------------------------------------------
# Full stack: PostgreSQL, MongoDB, monitoring (Pushgateway/Prometheus/Grafana),
# and the app image itself — all on one shared network so `app` can reach every
# service by hostname (postgres, mongodb, pushgateway, prometheus, grafana).
#
# Usage:
# docker compose up -d # bring up everything (no profiles)
# docker compose up -d postgres mongodb # databases only
# docker compose up -d pushgateway prometheus grafana # monitoring only
# docker compose --profile jobs run --rm app etl # run ETL
# docker compose --profile jobs run --rm app pipeline # full pipeline
# docker compose --profile jobs run --rm app dq-loops # data quality
# docker compose --profile jobs run --rm app dq-gx # Great Expectations
#
# Environment variables (set in .env):
# POSTGRES_DATABASE, POSTGRES_USERNAME, POSTGRES_PASSWORD (defaults: bike_store / postgres / postgres)
# MONGO_DB, MONGO_URI (defaults: bike_store / mongodb://mongodb:27017)
# GRAFANA_ADMIN_PASSWORD (default: admin)
# ----------------------------------------------------------------------------
services:
postgres:
image: postgres:16-alpine
environment:
POSTGRES_DB: ${POSTGRES_DATABASE:-bike_store}
POSTGRES_USER: ${POSTGRES_USERNAME:-postgres}
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-postgres}
volumes:
- postgres_data:/var/lib/postgresql/data
ports:
- "5432:5432"
networks:
- monitoring
healthcheck:
test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USERNAME:-postgres}"]
interval: 10s
timeout: 5s
retries: 5
mongodb:
image: mongo:7
environment:
MONGO_INITDB_DATABASE: ${MONGO_DB:-bike_store}
volumes:
- mongodb_data:/data/db
ports:
- "27017:27017"
networks:
- monitoring
healthcheck:
test: ["CMD", "mongosh", "--eval", "db.adminCommand({ ping: 1 })", "--quiet"]
interval: 10s
timeout: 5s
retries: 5
app:
build:
context: .
dockerfile: docker/Dockerfile
profiles: ["jobs"]
environment:
POSTGRES_HOST: postgres
POSTGRES_PORT: 5432
POSTGRES_DATABASE: ${POSTGRES_DATABASE:-bike_store}
POSTGRES_USERNAME: ${POSTGRES_USERNAME:-postgres}
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-postgres}
MONGO_URI: ${MONGO_URI:-mongodb://mongodb:27017}
MONGO_DB: ${MONGO_DB:-bike_store}
PUSHGATEWAY_URL: pushgateway:9091
depends_on:
postgres:
condition: service_healthy
mongodb:
condition: service_healthy
pushgateway:
condition: service_started
networks:
- monitoring
command: ["--help"]
pushgateway:
image: prom/pushgateway:v1.11.3
command:
- "--persistence.file=/data/pushgateway.data"
- "--persistence.interval=5m"
volumes:
- pushgateway_data:/data
ports:
- "9091:9091"
networks:
- monitoring
restart: unless-stopped
prometheus:
image: prom/prometheus:v3.13.2
volumes:
- ./docker/prometheus.yml:/etc/prometheus/prometheus.yml:ro
- prometheus_data:/prometheus
ports:
- "9090:9090"
depends_on:
- pushgateway
networks:
- monitoring
restart: unless-stopped
grafana:
image: grafana/grafana:13.1.0
environment:
GF_SECURITY_ADMIN_USER: ${GRAFANA_ADMIN_USER:-admin}
GF_SECURITY_ADMIN_PASSWORD: ${GRAFANA_ADMIN_PASSWORD:-admin}
GF_USERS_ALLOW_SIGN_UP: "false"
volumes:
- ./docker/grafana/provisioning:/etc/grafana/provisioning:ro
- grafana_data:/var/lib/grafana
ports:
- "3000:3000"
depends_on:
- prometheus
networks:
- monitoring
restart: unless-stopped
networks:
monitoring:
driver: bridge
volumes:
postgres_data:
mongodb_data:
pushgateway_data:
prometheus_data:
grafana_data: