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
# mikcar development and testing stack
# Run: docker compose up -d
# Stop: docker compose down
#
# Services:
# - minio:9000 S3-compatible storage (console: 9001)
# - redis:6379 Key-value store + queue backend
# - postgres:5432 SQL database
# - rabbitmq:5672 Message queue (management: 15672)
# - localstack:4566 AWS services emulator (SQS, SES)
# - mailpit:1025 Fake SMTP server (UI: 8025)
# - jaeger:16686 Distributed tracing UI (OTLP: 4317)
services:
# ===========================================
# Storage Backend
# ===========================================
minio:
image: minio/minio:latest
container_name: mikcar-minio
command: server /data --console-address ":9001"
environment:
MINIO_ROOT_USER: minioadmin
MINIO_ROOT_PASSWORD: minioadmin
ports:
- "9000:9000" # API
- "9001:9001" # Console
volumes:
- minio-data:/data
healthcheck:
test:
interval: 5s
timeout: 5s
retries: 5
# ===========================================
# Key-Value Store
# ===========================================
redis:
image: redis:7-alpine
container_name: mikcar-redis
ports:
- "6379:6379"
volumes:
- redis-data:/data
healthcheck:
test:
interval: 5s
timeout: 5s
retries: 5
# ===========================================
# SQL Database
# ===========================================
postgres:
image: postgres:16-alpine
container_name: mikcar-postgres
environment:
POSTGRES_USER: mikcar
POSTGRES_PASSWORD: mikcar
POSTGRES_DB: mikcar
ports:
- "5432:5432"
volumes:
- postgres-data:/var/lib/postgresql/data
healthcheck:
test:
interval: 5s
timeout: 5s
retries: 5
# ===========================================
# Message Queue
# ===========================================
rabbitmq:
image: rabbitmq:3-management-alpine
container_name: mikcar-rabbitmq
ports:
- "5672:5672" # AMQP
- "15672:15672" # Management UI
environment:
RABBITMQ_DEFAULT_USER: guest
RABBITMQ_DEFAULT_PASS: guest
volumes:
- rabbitmq-data:/var/lib/rabbitmq
healthcheck:
test:
interval: 5s
timeout: 5s
retries: 5
# ===========================================
# AWS Emulation (SQS, SES)
# ===========================================
localstack:
image: localstack/localstack:latest
container_name: mikcar-localstack
ports:
- "4566:4566" # LocalStack Gateway
environment:
SERVICES: sqs,ses
DEBUG: 0
EAGER_SERVICE_LOADING: 1
volumes:
- localstack-data:/var/lib/localstack
healthcheck:
test:
interval: 5s
timeout: 5s
retries: 5
# ===========================================
# Email Testing
# ===========================================
mailpit:
image: axllent/mailpit:latest
container_name: mikcar-mailpit
ports:
- "8025:8025" # Web UI
- "1025:1025" # SMTP
environment:
MP_SMTP_AUTH_ACCEPT_ANY: 1
MP_SMTP_AUTH_ALLOW_INSECURE: 1
# ===========================================
# Distributed Tracing
# ===========================================
jaeger:
image: jaegertracing/all-in-one:latest
container_name: mikcar-jaeger
environment:
COLLECTOR_OTLP_ENABLED: "true"
ports:
- "16686:16686" # Jaeger UI
- "4317:4317" # OTLP gRPC
- "4318:4318" # OTLP HTTP
healthcheck:
test:
interval: 5s
timeout: 5s
retries: 5
volumes:
minio-data:
redis-data:
postgres-data:
rabbitmq-data:
localstack-data:
networks:
default:
name: mikcar-network