-
Notifications
You must be signed in to change notification settings - Fork 44
Expand file tree
/
Copy pathdocker-compose.yaml
More file actions
254 lines (236 loc) · 7.47 KB
/
docker-compose.yaml
File metadata and controls
254 lines (236 loc) · 7.47 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
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
# Conduktor: http://localhost:8080
# EMQX dashboard: http://localhost:18083 (user: admin / pwd: emqx)
# MQTTX: http://localhost:8084
# PGAdmin: http://localhost:8082 (database password: Si1v3rbacK)
services:
# Apache Kafka (confluent)
kafka-1:
container_name: silverback-kafka-1
image: apache/kafka-native:3.9.0
hostname: kafka-1
ports:
- "19092:19092"
environment:
KAFKA_NODE_ID: 1
KAFKA_PROCESS_ROLES: 'broker,controller'
KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: 'CONTROLLER:PLAINTEXT,PLAINTEXT:PLAINTEXT,PLAINTEXT_HOST:PLAINTEXT'
KAFKA_CONTROLLER_QUORUM_VOTERS: '1@kafka-1:9093,2@kafka-2:9093'
KAFKA_LISTENERS: 'PLAINTEXT://:9092,CONTROLLER://:9093,PLAINTEXT_HOST://:19092'
KAFKA_INTER_BROKER_LISTENER_NAME: 'PLAINTEXT'
KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://kafka-1:9092,PLAINTEXT_HOST://localhost:19092
KAFKA_CONTROLLER_LISTENER_NAMES: 'CONTROLLER'
CLUSTER_ID: 'e5c01dc4-72a6-499c-ba33-397e57cf48de'
KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1
KAFKA_GROUP_INITIAL_REBALANCE_DELAY_MS: 0
KAFKA_TRANSACTION_STATE_LOG_MIN_ISR: 1
KAFKA_TRANSACTION_STATE_LOG_REPLICATION_FACTOR: 1
KAFKA_LOG_DIRS: '/tmp/kraft-combined-logs'
kafka-2:
container_name: silverback-kafka-2
image: apache/kafka-native:3.9.0
hostname: kafka-2
ports:
- "29092:29092"
environment:
KAFKA_NODE_ID: 2
KAFKA_PROCESS_ROLES: 'broker,controller'
KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: 'CONTROLLER:PLAINTEXT,PLAINTEXT:PLAINTEXT,PLAINTEXT_HOST:PLAINTEXT'
KAFKA_CONTROLLER_QUORUM_VOTERS: '1@kafka-1:9093,2@kafka-2:9093'
KAFKA_LISTENERS: 'PLAINTEXT://:9092,CONTROLLER://:9093,PLAINTEXT_HOST://:29092'
KAFKA_INTER_BROKER_LISTENER_NAME: 'PLAINTEXT'
KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://kafka-2:9092,PLAINTEXT_HOST://localhost:29092
KAFKA_CONTROLLER_LISTENER_NAMES: 'CONTROLLER'
CLUSTER_ID: 'e5c01dc4-72a6-499c-ba33-397e57cf48de'
KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1
KAFKA_GROUP_INITIAL_REBALANCE_DELAY_MS: 0
KAFKA_TRANSACTION_STATE_LOG_MIN_ISR: 1
KAFKA_TRANSACTION_STATE_LOG_REPLICATION_FACTOR: 1
KAFKA_LOG_DIRS: '/tmp/kraft-combined-logs'
schema-registry:
container_name: silverback-schema-registry
depends_on:
- kafka-1
- kafka-2
image: confluentinc/cp-schema-registry:latest
hostname: schema-registry
ports:
- "8081:8081"
environment:
SCHEMA_REGISTRY_HOST_NAME: "schema-registry"
SCHEMA_REGISTRY_KAFKASTORE_BOOTSTRAP_SERVERS: "kafka-1:9092,kafka-2:9092"
SCHEMA_REGISTRY_LISTENERS: "http://0.0.0.0:8081"
conduktor:
container_name: silverback-conduktor
image: conduktor/conduktor-console:1.26.0
ports:
- "8080:8080"
environment:
CDK_DATABASE_URL: "postgresql://dbadmin:Si1v3rbacK@postgresql:5432/silverback"
CDK_CLUSTERS_0_ID: "default"
CDK_CLUSTERS_0_NAME: "Silverback Kafka Cluster"
CDK_CLUSTERS_0_COLOR: "#5388f4"
CDK_CLUSTERS_0_BOOTSTRAPSERVERS: "PLAINTEXT://kafka-1:19092,PLAINTEXT://kafka-2:29092"
CDK_CLUSTERS_0_SCHEMAREGISTRY_URL: "http://schema-registry:8081"
CDK_ADMIN_EMAIL: "admin@silverback-messaging.net"
CDK_ADMIN_PASSWORD: "admin"
depends_on:
- kafka-1
- kafka-2
- postgresql
# MQTT (emqx)
emqx1:
image: emqx:latest
container_name: silverback-emqx1
environment:
- "EMQX_NODE_NAME=emqx@node1.emqx.io"
- "EMQX_CLUSTER__DISCOVERY_STRATEGY=static"
- "EMQX_CLUSTER__STATIC__SEEDS=[emqx@node1.emqx.io,emqx@node2.emqx.io]"
- "EMQX_DASHBOARD__DEFAULT_USERNAME=admin"
- "EMQX_DASHBOARD__DEFAULT_PASSWORD=emqx"
healthcheck:
test: [ "CMD", "/opt/emqx/bin/emqx", "ctl", "status" ]
interval: 5s
timeout: 25s
retries: 5
networks:
default:
aliases:
- node1.emqx.io
emqx2:
image: emqx:latest
container_name: silverback-emqx2
environment:
- "EMQX_NODE_NAME=emqx@node2.emqx.io"
- "EMQX_CLUSTER__DISCOVERY_STRATEGY=static"
- "EMQX_CLUSTER__STATIC__SEEDS=[emqx@node1.emqx.io,emqx@node2.emqx.io]"
- "EMQX_DASHBOARD__DEFAULT_USERNAME=admin"
- "EMQX_DASHBOARD__DEFAULT_PASSWORD=emqx"
healthcheck:
test: [ "CMD", "/opt/emqx/bin/emqx", "ctl", "status" ]
interval: 5s
timeout: 25s
retries: 5
networks:
default:
aliases:
- node2.emqx.io
mqttx-web:
container_name: silverback-mqttx-web
image: emqx/mqttx-web:latest
ports:
- "8084:80"
depends_on:
- emqx1
- emqx2
links:
- emqx1
- emqx2
# HAProxy
haproxy:
image: haproxy:latest
container_name: silverback-haproxy
ports:
- "1883:1883" # MQTT
- "8083:8083" # MQTT WebSocket/HTTP
- "18083:18083" # MQTT Dashboard
- "9092:9092" # Kafka
configs:
- source: haproxy.cfg
target: /usr/local/etc/haproxy/haproxy.cfg
depends_on:
- emqx1
- emqx2
# PostgreSQL
postgresql:
image: postgres:17.0
container_name: silverback-postgresql
ports:
- "5432:5432"
environment:
POSTGRES_USER: "dbadmin"
POSTGRES_DB: "silverback"
POSTGRES_PASSWORD: "Si1v3rbacK"
pgadmin:
container_name: silverback-pgadmin
image: dpage/pgadmin4:6.21
ports:
- "8082:80"
depends_on:
- postgresql
links:
- postgresql
configs:
- source: servers.json
target: /pgadmin4/servers.json
environment:
PGADMIN_DEFAULT_EMAIL: "admin@silverback-messaging.net"
PGADMIN_DEFAULT_PASSWORD: "admin"
PGADMIN_CONFIG_SERVER_MODE: "False"
PGADMIN_LISTEN_PORT: 80
PGADMIN_CONFIG_MASTER_PASSWORD_REQUIRED: "False"
configs:
servers.json:
content: |
{
"Servers": {
"1": {
"Name": "postgresql",
"Group": "Servers",
"Host": "postgresql",
"Port": 5432,
"MaintenanceDB": "silverback",
"Username": "dbadmin"
}
}
}
haproxy.cfg:
content: |
global
log stdout format raw local0
defaults
log global
mode tcp
timeout connect 5000ms
timeout client 50000ms
timeout server 50000ms
frontend mqtt-in
bind *:1883
default_backend emqx-mqtt
backend emqx-mqtt
balance roundrobin
server emqx1 emqx1:1883 check
server emqx2 emqx2:1883 check
frontend emqx-dashboard-in
bind *:18083
default_backend emqx-dashboard
backend emqx-dashboard
balance roundrobin
server emqx1 emqx1:18083 check
server emqx2 emqx2:18083 check
frontend emqx-websocket-in
bind *:8083
default_backend emqx-websocket
backend emqx-websocket
balance roundrobin
server emqx1 emqx1:8083 check
frontend kafka-in
bind *:19092
default_backend kafka-backend
backend kafka-backend
balance roundrobin
server kafka-1 localhost:19092 check
server kafka-2 localhost:29092 check
frontend kafka-in-internal
bind *:9092
default_backend kafka-backend-internal
backend kafka-backend-internal
balance roundrobin
server kafka-1 kafka-1:9092 check
server kafka-2 kafka-2:9092 check
networks:
default:
driver: bridge
ipam:
driver: default
config:
- subnet: 10.200.1.0/24