1- # Lab 06 — Production: jitsi HA-ready with monitoring and external volumes
2- ---
1+ x-logging : &default-logging
2+ driver : json-file
3+ options :
4+ max-size : " 10m"
5+ max-file : " 5"
6+
7+ x-jitsi-prod-jwt : &jitsi-prod-jwt
8+ JWT_AUTH_TYPE : token
9+ JWT_TOKEN_AUTH_MODULE : token
10+ JWT_APP_ID : jitsi-meet
11+ JWT_APP_SECRET : JitsiProd06!
12+ JWT_ACCEPTED_ISSUERS : jitsi-meet
13+ JWT_ACCEPTED_AUDIENCES : jitsi-meet
14+
315services :
4- jitsi :
5- image : jitsi/web:stable
6- container_name : it-stack-jitsi
16+ jitsi-prod-traefik :
17+ image : traefik:v3.0
18+ container_name : jitsi-prod-traefik
719 restart : always
20+ command :
21+ - --api.insecure=true
22+ - --providers.docker=true
23+ - --providers.docker.exposedByDefault=false
24+ - --entrypoints.web.address=:80
825 ports :
9- - " 443:$firstPort"
10- environment :
11- - IT_STACK_ENV=production
12- - KEYCLOAK_URL=
13- - DB_HOST=
14- - REDIS_HOST=
15- - GRAYLOG_HOST=
26+ - " 8280:80"
27+ - " 8209:8080"
1628 volumes :
17- - jitsi_data:/var/lib/jitsi
18- - /etc/ssl/certs:/etc/ssl/certs:ro
29+ - /var/run/docker.sock:/var/run/docker.sock:ro
30+ networks :
31+ - jitsi-prod-net
1932 deploy :
20- replicas : 1
2133 resources :
2234 limits :
23- cpus : " 4.0"
24- memory : G
25- reservations :
35+ memory : 256m
36+ cpus : " 0.5"
37+ logging : *default-logging
38+ healthcheck :
39+ test : ["CMD", "traefik", "healthcheck"]
40+ interval : 10s
41+ timeout : 5s
42+ retries : 5
43+
44+ jitsi-prod-keycloak :
45+ image : quay.io/keycloak/keycloak:24.0
46+ container_name : jitsi-prod-keycloak
47+ restart : always
48+ command : start-dev
49+ environment :
50+ KC_HEALTH_ENABLED : " true"
51+ KC_METRICS_ENABLED : " true"
52+ KEYCLOAK_ADMIN : admin
53+ KEYCLOAK_ADMIN_PASSWORD : Prod06Admin!
54+ ports :
55+ - " 8207:8080"
56+ networks :
57+ - jitsi-prod-net
58+ deploy :
59+ resources :
60+ limits :
61+ memory : 1g
2662 cpus : " 1.0"
27- memory : 1G
28- restart_policy :
29- condition : any
30- delay : 5s
31- logging :
32- driver : gelf
33- options :
34- gelf-address : " udp://${GRAYLOG_HOST}:12201"
35- tag : " it-stack-jitsi"
63+ logging : *default-logging
3664 healthcheck :
37- test : ["CMD-SHELL", "curl -sf http://localhost/health || exit 1"]
38- interval : 30s
65+ test : ["CMD-SHELL", "curl -sf http://localhost:8080 /health/ready | grep -q UP || exit 1"]
66+ interval : 20s
3967 timeout : 10s
40- retries : 3
41- start_period : 120s
68+ retries : 10
69+ start_period : 60s
70+
71+ jitsi-prod-coturn :
72+ image : coturn/coturn:latest
73+ container_name : jitsi-prod-coturn
74+ restart : always
75+ command : >
76+ --user=jitsi:JitsiProd06!
77+ --realm=lab.local
78+ --fingerprint
79+ --no-multicast-peers
80+ --no-cli
81+ ports :
82+ - " 3479:3478/udp"
83+ - " 3479:3478/tcp"
4284 networks :
43- - it-stack-net
85+ - jitsi-prod-net
86+ deploy :
87+ resources :
88+ limits :
89+ memory : 256m
90+ cpus : " 0.5"
91+ logging : *default-logging
4492
45- networks :
46- it-stack-net :
47- external : true
48- name : it-stack-production
93+ jitsi-prod-prosody :
94+ image : jitsi/prosody:stable-9286
95+ container_name : jitsi-prod-prosody
96+ restart : always
97+ environment :
98+ << : *jitsi-prod-jwt
99+ XMPP_DOMAIN : meet.lab.local
100+ XMPP_AUTH_DOMAIN : auth.meet.lab.local
101+ XMPP_MUC_DOMAIN : muc.meet.lab.local
102+ XMPP_INTERNAL_MUC_DOMAIN : internal-muc.meet.lab.local
103+ JICOFO_AUTH_PASSWORD : JitsiProd06!
104+ JVB_AUTH_PASSWORD : JitsiProd06!
105+ JIGASI_XMPP_PASSWORD : JitsiProd06!
106+ JIBRI_RECORDER_PASSWORD : JitsiProd06!
107+ JIBRI_XMPP_PASSWORD : JitsiProd06!
108+ TZ : UTC
109+ volumes :
110+ - jitsi-prod-prosody:/config
111+ networks :
112+ - jitsi-prod-net
113+ deploy :
114+ resources :
115+ limits :
116+ memory : 512m
117+ cpus : " 0.5"
118+ logging : *default-logging
119+ healthcheck :
120+ test : ["CMD", "prosodyctl", "status"]
121+ interval : 15s
122+ timeout : 10s
123+ retries : 5
124+ start_period : 30s
125+
126+ jitsi-prod-jicofo :
127+ image : jitsi/jicofo:stable-9286
128+ container_name : jitsi-prod-jicofo
129+ restart : always
130+ depends_on :
131+ jitsi-prod-prosody :
132+ condition : service_healthy
133+ environment :
134+ XMPP_DOMAIN : meet.lab.local
135+ XMPP_AUTH_DOMAIN : auth.meet.lab.local
136+ XMPP_INTERNAL_MUC_DOMAIN : internal-muc.meet.lab.local
137+ XMPP_SERVER : jitsi-prod-prosody
138+ JICOFO_AUTH_USER : focus
139+ JICOFO_AUTH_PASSWORD : JitsiProd06!
140+ JICOFO_ENABLE_HEALTH_CHECKS : " true"
141+ TZ : UTC
142+ volumes :
143+ - jitsi-prod-jicofo:/config
144+ networks :
145+ - jitsi-prod-net
146+ deploy :
147+ resources :
148+ limits :
149+ memory : 512m
150+ cpus : " 0.5"
151+ logging : *default-logging
152+
153+ jitsi-prod-jvb :
154+ image : jitsi/jvb:stable-9286
155+ container_name : jitsi-prod-jvb
156+ restart : always
157+ depends_on :
158+ jitsi-prod-prosody :
159+ condition : service_healthy
160+ environment :
161+ XMPP_DOMAIN : meet.lab.local
162+ XMPP_AUTH_DOMAIN : auth.meet.lab.local
163+ XMPP_INTERNAL_MUC_DOMAIN : internal-muc.meet.lab.local
164+ XMPP_SERVER : jitsi-prod-prosody
165+ JVB_AUTH_USER : jvb
166+ JVB_AUTH_PASSWORD : JitsiProd06!
167+ JVB_BREWERY_MUC : jvbbrewery
168+ JVB_PORT : " 10000"
169+ JVB_TCP_HARVESTER_DISABLED : " true"
170+ DOCKER_HOST_ADDRESS : 127.0.0.1
171+ TZ : UTC
172+ ports :
173+ - " 10002:10000/udp"
174+ volumes :
175+ - jitsi-prod-jvb:/config
176+ networks :
177+ - jitsi-prod-net
178+ deploy :
179+ resources :
180+ limits :
181+ memory : 1g
182+ cpus : " 1.0"
183+ logging : *default-logging
184+
185+ jitsi-prod-web :
186+ image : jitsi/web:stable-9286
187+ container_name : jitsi-prod-web
188+ restart : always
189+ depends_on :
190+ jitsi-prod-prosody :
191+ condition : service_healthy
192+ jitsi-prod-jicofo :
193+ condition : service_started
194+ jitsi-prod-jvb :
195+ condition : service_started
196+ environment :
197+ << : *jitsi-prod-jwt
198+ XMPP_DOMAIN : meet.lab.local
199+ XMPP_AUTH_DOMAIN : auth.meet.lab.local
200+ XMPP_MUC_DOMAIN : muc.meet.lab.local
201+ XMPP_INTERNAL_MUC_DOMAIN : internal-muc.meet.lab.local
202+ XMPP_BOSH_URL_BASE : http://jitsi-prod-prosody:5280
203+ JVB_TCP_HARVESTER_DISABLED : " true"
204+ ENABLE_REQUIRE_DISPLAY_NAME : " true"
205+ ENABLE_GUESTS : " false"
206+ TZ : UTC
207+ ports :
208+ - " 8250:80"
209+ volumes :
210+ - jitsi-prod-web:/config
211+ - jitsi-prod-transcripts:/usr/share/jitsi-meet/transcripts
212+ networks :
213+ - jitsi-prod-net
214+ labels :
215+ - traefik.enable=true
216+ - traefik.http.routers.jitsi-prod.rule=Host(`meet.lab.local`)
217+ - traefik.http.routers.jitsi-prod.entrypoints=web
218+ - traefik.http.services.jitsi-prod.loadbalancer.server.port=80
219+ deploy :
220+ resources :
221+ limits :
222+ memory : 2g
223+ cpus : " 2.0"
224+ reservations :
225+ memory : 512m
226+ logging : *default-logging
227+ healthcheck :
228+ test : ["CMD", "curl", "-f", "http://localhost:80/"]
229+ interval : 20s
230+ timeout : 10s
231+ retries : 10
232+ start_period : 60s
49233
50234volumes :
51- jitsi_data :
52- external : true
53- name : it-stack-jitsi-data
235+ jitsi-prod-prosody :
236+ jitsi-prod-jicofo :
237+ jitsi-prod-jvb :
238+ jitsi-prod-web :
239+ jitsi-prod-transcripts :
240+
241+ networks :
242+ jitsi-prod-net:
0 commit comments