This repository was archived by the owner on Feb 26, 2026. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathdocker-compose.yml
More file actions
151 lines (141 loc) · 4.36 KB
/
Copy pathdocker-compose.yml
File metadata and controls
151 lines (141 loc) · 4.36 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
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
networks:
# Rede isolada para comunicação entre microserviços e stack de monitorização
microservices-net:
driver: bridge
volumes:
# Volumes para persistência de dados após reinicialização dos contentores
tempo-data:
loki-data:
prometheus-data:
grafana-data:
promtail-positions:
services:
# --- Serviço de Utilizadores ---
users-service:
build:
context: .
dockerfile: app/users/Dockerfile.users
image: users-service:${TYPE:-latest}
container_name: users-service
environment:
# Endpoint para onde o código Python envia os spans (traces)
OTEL_EXPORTER_OTLP_ENDPOINT: http://otel-collector:4317
OTEL_SERVICE_NAME: users-service
ENVIRONMENT: docker
ports:
- "5000:5000"
networks:
- microservices-net
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:5000/health"]
interval: 10s
timeout: 5s
retries: 3
# --- Serviço de Produtos ---
products-service:
build:
context: .
dockerfile: app/products/Dockerfile.products
image: products-service:${TYPE:-latest}
container_name: products-service
environment:
OTEL_EXPORTER_OTLP_ENDPOINT: http://otel-collector:4317
OTEL_SERVICE_NAME: products-service
USERS_SERVICE_URL: http://users-service:5000
ENVIRONMENT: docker
ports:
- "5001:5001"
networks:
- microservices-net
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:5001/health"]
interval: 10s
timeout: 5s
retries: 3
# --- Coletor OpenTelemetry (Ponte de Tracing) ---
otel-collector:
image: otel/opentelemetry-collector-contrib:0.90.1
container_name: otel-collector
user: "0:0"
command: ["--config=/etc/otel-collector-config.yml"]
volumes:
# Mapeamento do ficheiro de configuração (extensão .yml preservada)
- ./config/otel-collector-config.yml:/etc/otel-collector-config.yml:ro
ports:
- "4317:4317" # gRPC para Traces/Metrics
- "4318:4318" # HTTP para Traces/Metrics
- "8889:8889" # Mudança estratégica: 8889 (Host) mapeia para 8888 (Container)
networks:
- microservices-net
# --- Grafana Tempo (Armazenamento de Traces) ---
tempo:
image: grafana/tempo:2.2.3
container_name: grafana-tempo
user: "0:0"
command: ["-config.file=/etc/tempo.yml"]
volumes:
- ./config/tempo-config.yml:/etc/tempo.yml:ro
- tempo-data:/tmp/tempo
ports:
- "3200:3200"
networks:
- microservices-net
# --- Grafana Loki (Armazenamento de Logs) ---
loki:
image: grafana/loki:2.9.2
container_name: grafana-loki
user: "0:0"
ports:
- "3100:3100"
volumes:
- loki-data:/loki #
command: -config.file=/etc/loki/local-config.yaml
networks:
- microservices-net
# --- Prometheus (Métricas) ---
prometheus:
image: prom/prometheus:v2.48.0
container_name: prometheus
user: "0:0"
volumes:
- ./config/prometheus.yml:/etc/prometheus/prometheus.yml:ro
- prometheus-data:/prometheus
ports:
- "9090:9090"
networks:
- microservices-net
# --- Grafana (Visualização e Dashboards) ---
grafana:
image: grafana/grafana:10.2.2
container_name: grafana
user: "0:0"
environment:
# Se não houver export, o Docker usará 'admin' como fallback
- GF_SECURITY_ADMIN_USER=${GRAFANA_USER}
- GF_SECURITY_ADMIN_PASSWORD=${GRAFANA_PASS}
- GF_AUTH_ANONYMOUS_ENABLED=false
volumes:
# Provisionamento automático de Data Sources e Dashboards (.yml)
- ./config/grafana/provisioning:/etc/grafana/provisioning:ro
- ./config/grafana/dashboards:/var/lib/grafana/dashboards:ro
- grafana-data:/var/lib/grafana
ports:
- "3000:3000"
networks:
- microservices-net
restart: unless-stopped
# --- Promtail (Agente de Logs) ---
promtail:
image: grafana/promtail:latest
container_name: promtail
user: "0:0"
# Permissões elevadas para ler os logs dos contentores no host
privileged: true
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
- /var/lib/docker/containers:/var/lib/docker/containers:ro
- ./config/promtail-config.yml:/etc/promtail/config.yml:ro
- promtail-positions:/tmp
command: -config.file=/etc/promtail/config.yml -config.expand-env=true
networks:
- microservices-net