-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathdocker-compose.yml
More file actions
113 lines (106 loc) · 4.04 KB
/
Copy pathdocker-compose.yml
File metadata and controls
113 lines (106 loc) · 4.04 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
# VaultSim Docker Compose — Phase 4+
#
# Starts all infrastructure services with a single `docker-compose up`:
# zookeeper — Kafka coordination (required by Kafka)
# kafka — Apache Kafka broker (port 9092 on host)
# timescaledb — PostgreSQL + TimescaleDB extension (port 5432 on host)
# kafka-ui — Kafka inspection UI (port 8080 on host)
#
# The simulation and API processes run outside Docker (on the host) and
# connect via localhost ports. This keeps the dev loop fast (no container
# rebuild for Python changes) while keeping infrastructure managed.
#
# Phase 5+ adds the FastAPI service to this file.
version: '3.8'
services:
# ---------------------------------------------------------------------------
# Zookeeper — required by Kafka for broker coordination.
# ---------------------------------------------------------------------------
zookeeper:
image: confluentinc/cp-zookeeper:7.6.0
hostname: zookeeper
container_name: vaultsim-zookeeper
ports:
- "2181:2181"
environment:
ZOOKEEPER_CLIENT_PORT: 2181
ZOOKEEPER_TICK_TIME: 2000
healthcheck:
test: ["CMD", "bash", "-c", "echo srvr | nc localhost 2181 | grep -q Mode"]
interval: 10s
timeout: 5s
retries: 5
# ---------------------------------------------------------------------------
# Kafka — single-broker dev setup.
# PLAINTEXT_HOST listener on localhost:9092 lets Python processes on the host
# produce and consume. PLAINTEXT on kafka:29092 is for internal container use.
# ---------------------------------------------------------------------------
kafka:
image: confluentinc/cp-kafka:7.6.0
hostname: kafka
container_name: vaultsim-kafka
depends_on:
zookeeper:
condition: service_healthy
ports:
- "9092:9092"
environment:
KAFKA_BROKER_ID: 1
KAFKA_ZOOKEEPER_CONNECT: "zookeeper:2181"
KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: PLAINTEXT:PLAINTEXT,PLAINTEXT_HOST:PLAINTEXT
KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://kafka:29092,PLAINTEXT_HOST://localhost:9092
KAFKA_INTER_BROKER_LISTENER_NAME: PLAINTEXT
KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1
KAFKA_GROUP_INITIAL_REBALANCE_DELAY_MS: 0
KAFKA_AUTO_CREATE_TOPICS_ENABLE: "true"
KAFKA_NUM_PARTITIONS: 3
KAFKA_LOG_RETENTION_HOURS: 168
healthcheck:
test: ["CMD", "bash", "-c", "kafka-broker-api-versions --bootstrap-server localhost:9092 > /dev/null 2>&1"]
interval: 15s
timeout: 10s
retries: 10
start_period: 20s
# ---------------------------------------------------------------------------
# TimescaleDB — PostgreSQL 16 with time-series optimisation.
# init.sql runs automatically on first start via initdb.d/.
# ---------------------------------------------------------------------------
timescaledb:
image: timescale/timescaledb:latest-pg16
hostname: timescaledb
container_name: vaultsim-timescaledb
ports:
- "5432:5432"
environment:
POSTGRES_USER: vaultsim
POSTGRES_PASSWORD: vaultsim_dev
POSTGRES_DB: vaultsim
volumes:
- timescale_data:/var/lib/postgresql/data
- ./api/db/init.sql:/docker-entrypoint-initdb.d/init.sql
healthcheck:
test: ["CMD-SHELL", "pg_isready -U vaultsim -d vaultsim"]
interval: 10s
timeout: 5s
retries: 5
start_period: 15s
# ---------------------------------------------------------------------------
# Kafka UI — browser-based Kafka inspection at http://localhost:8080
# Great for verifying messages are flowing during a demo.
# ---------------------------------------------------------------------------
kafka-ui:
image: provectuslabs/kafka-ui:latest
container_name: vaultsim-kafka-ui
depends_on:
kafka:
condition: service_healthy
ports:
- "8080:8080"
environment:
KAFKA_CLUSTERS_0_NAME: vaultsim
KAFKA_CLUSTERS_0_BOOTSTRAPSERVERS: kafka:29092
KAFKA_CLUSTERS_0_ZOOKEEPER: zookeeper:2181
DYNAMIC_CONFIG_ENABLED: "true"
volumes:
timescale_data:
driver: local