-
Notifications
You must be signed in to change notification settings - Fork 2
/
docker-compose.yml
188 lines (173 loc) · 4.1 KB
/
docker-compose.yml
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
# version of docker-compose
version: '3'
# list of serices and their configuration
services:
# redis master node
redis:
image: 'bitnami/redis:latest'
container_name: d_redis
environment:
- REDIS_REPLICATION_MODE=master # declare as master
- ALLOW_EMPTY_PASSWORD=yes # not recomended on production
networks:
- socket_network
ports:
- '6379'
# redis slave 1
redis-slave-1:
image: 'bitnami/redis:latest'
container_name: d_redis-slave-1
environment:
- REDIS_REPLICATION_MODE=slave # declare as slave
- REDIS_MASTER_HOST=redis
- ALLOW_EMPTY_PASSWORD=yes
ports:
- '6379'
depends_on:
- redis
networks:
- socket_network
# redis slave 2
redis-slave-2:
image: 'bitnami/redis:latest'
container_name: d_redis-slave-2
environment:
- REDIS_REPLICATION_MODE=slave # declare as slave
- REDIS_MASTER_HOST=redis
- ALLOW_EMPTY_PASSWORD=yes
ports:
- '6379'
depends_on:
- redis
networks:
- socket_network
# 3 redis sentinel
redis-sentinel:
image: 'bitnami/redis-sentinel:latest'
environment:
- REDIS_MASTER_HOST=redis
- REDIS_MASTER_SET=mymaster # redis instances identification
depends_on:
- redis
- redis-slave-1
- redis-slave-2
ports:
- '26379-26381:26379' # 3 port will be occupied when we scale 3 sentinel process
networks:
- socket_network
# socket server 1
socket_1:
restart: on-failure
build: ./socket/socket_1
container_name: d_socket_1
ports:
- '5001:5001'
environment:
- redis_host=redis-sentinel
depends_on:
- redis-sentinel
networks:
- socket_network
# socket server 2
socket_2:
restart: on-failure
build: ./socket/socket_2
ports:
- '5002:5002'
environment:
- redis_host=redis-sentinel
depends_on:
- redis-sentinel
networks:
- socket_network
# client server
socket_client:
restart: on-failure
build: ./socket_client
ports:
- '3000:8080'
# service registry 1
service_registry_1:
restart: on-failure
build: ./service_registry/service_registry_1
container_name: d_service_registry_1
environment:
- redis_host=redis-sentinel
depends_on:
- redis-sentinel
networks:
- socket_network
# service registry 2
service_registry_2:
restart: on-failure
build: ./service_registry/service_registry_2
container_name: d_service_registry_2
environment:
- redis_host=redis-sentinel
depends_on:
- redis-sentinel
networks:
- socket_network
# nginx for multiple service registry
registry_nginx:
build: ./registry_nginx
container_name: d_registry_nginx
ports:
- '80:80'
depends_on:
- service_registry_1
- service_registry_2
networks:
- socket_network
# health_checker service
health_checker:
restart: on-failure
build: ./health_checker
container_name: d_health_checker
environment:
- redis_host=redis-sentinel
- interval=50 # in every 1 minute, it will check all socket servers
depends_on:
- redis-sentinel
ports:
- 8000:8000
networks:
- socket_network
# mysql db
user_service_mysql:
image: mysql:5.7
container_name: d_user_service_mysql
environment:
MYSQL_ROOT_PASSWORD: password
MYSQL_DATABASE: chat_users
volumes:
- ./user_service/data:/var/lib/mysql
networks:
- socket_network
# user service 1
user_service_1:
restart: on-failure
build: ./user_service/user_service_1
container_name: d_user_service_1
environment:
- dbName=chat_users
- username=root
- password=password
- host=user_service_mysql
depends_on:
- user_service_mysql
networks:
- socket_network
# nginx for multiple service user service
user_nginx:
build: ./user_nginx
container_name: d_user_nginx
ports:
- '81:80'
depends_on:
- user_service_1
networks:
- socket_network
networks:
socket_network:
driver: bridge