1- # Lab 05 — Advanced Integration: jitsi with full IT-Stack ecosystem
2- ---
1+ # docker-compose.integration.yml -- Lab 05: Advanced Integration
2+ # Jitsi + Traefik reverse proxy + Keycloak JWT auth + Coturn TURN server
3+ # Lab 05 tests: Traefik routing, JWT via Keycloak JWKS, TURN connectivity
4+ #
5+ # Ports:
6+ # 8150 -- Jitsi Web (direct)
7+ # 8180 -- Traefik HTTP entrypoint
8+ # 8107 -- Keycloak admin console
9+ # 8109 -- Traefik dashboard
10+ # 10001/udp -- JVB media
11+ # 3478 -- Coturn STUN/TURN
12+ #
13+ # Credentials:
14+ # Keycloak: admin / Lab05Admin!
15+ # OIDC: jitsi / JitsiSSO05!
16+ # Jicofo: JicofoComp05! / JicofoAuth05!
17+ # JVB: JvbAuth05!
18+ # Coturn: TurnSecret05!
19+
320services :
4- jitsi :
5- image : jitsi/web:stable
6- container_name : it-stack-jitsi
7- restart : unless-stopped
21+ jitsi-int-traefik :
22+ image : traefik:v3.0
23+ container_name : jitsi-int-traefik
24+ command :
25+ - " --api.insecure=true"
26+ - " --providers.docker=true"
27+ - " --providers.docker.exposedbydefault=false"
28+ - " --entrypoints.web.address=:80"
29+ - " --log.level=INFO"
30+ ports :
31+ - " 8180:80"
32+ - " 8109:8080"
33+ volumes :
34+ - /var/run/docker.sock:/var/run/docker.sock:ro
35+ networks :
36+ - jitsi-int-net
37+ healthcheck :
38+ test : ["CMD", "traefik", "healthcheck"]
39+ interval : 15s
40+ timeout : 5s
41+ retries : 5
42+
43+ jitsi-int-keycloak :
44+ image : quay.io/keycloak/keycloak:24.0
45+ container_name : jitsi-int-keycloak
46+ command : start-dev
47+ environment :
48+ KC_HEALTH_ENABLED : " true"
49+ KEYCLOAK_ADMIN : admin
50+ KEYCLOAK_ADMIN_PASSWORD : Lab05Admin!
851 ports :
9- - " 443:$firstPort"
52+ - " 8107:8080"
53+ networks :
54+ - jitsi-int-net
55+ healthcheck :
56+ test : ["CMD-SHELL", "curl -sf http://localhost:8080/health/ready | grep -q UP || exit 1"]
57+ interval : 20s
58+ timeout : 10s
59+ retries : 10
60+ start_period : 60s
61+
62+ jitsi-int-coturn :
63+ image : coturn/coturn:latest
64+ container_name : jitsi-int-coturn
65+ command : >
66+ --lt-cred-mech
67+ --fingerprint
68+ --no-multicast-peers
69+ --static-auth-secret=TurnSecret05!
70+ --realm=jitsi-lab
71+ --no-tlsv1
72+ --no-tlsv1_1
73+ --min-port=49152
74+ --max-port=65535
75+ ports :
76+ - " 3478:3478"
77+ - " 3478:3478/udp"
78+ networks :
79+ - jitsi-int-net
80+ - jitsi-int-turn-net
81+
82+ jitsi-int-prosody :
83+ image : jitsi/prosody:stable
84+ container_name : jitsi-int-prosody
85+ depends_on :
86+ jitsi-int-keycloak :
87+ condition : service_healthy
1088 environment :
11- - IT_STACK_ENV=lab-05-integration
12- - KEYCLOAK_URL=
13- - DB_HOST=
14- - REDIS_HOST=
15- - SMTP_HOST=
16- - GRAYLOG_HOST=
17- extra_hosts :
18- - " lab-id1:10.0.50.11"
19- - " lab-db1:10.0.50.12"
20- - " lab-proxy1:10.0.50.15"
89+ AUTH_TYPE : jwt
90+ JWT_APP_ID : jitsi
91+ JWT_APP_SECRET : JitsiSSO05!
92+ JWT_ASAP_KEYSERVER : http://jitsi-int-keycloak:8080/realms/it-stack/protocol/openid-connect/certs
93+ JWT_ACCEPTED_ISSUERS : keycloak,localhost
94+ JWT_ACCEPTED_AUDIENCES : jitsi
95+ XMPP_DOMAIN : meet.jitsi
96+ XMPP_AUTH_DOMAIN : auth.meet.jitsi
97+ XMPP_MUC_DOMAIN : muc.meet.jitsi
98+ XMPP_INTERNAL_MUC_DOMAIN : internal-muc.meet.jitsi
99+ XMPP_GUEST_DOMAIN : guest.meet.jitsi
100+ JICOFO_COMPONENT_SECRET : JicofoComp05!
101+ JICOFO_AUTH_PASSWORD : JicofoAuth05!
102+ JVB_AUTH_PASSWORD : JvbAuth05!
103+ ENABLE_GUESTS : " 1"
104+ TZ : UTC
105+ networks :
106+ - jitsi-int-net
107+
108+ jitsi-int-jicofo :
109+ image : jitsi/jicofo:stable
110+ container_name : jitsi-int-jicofo
111+ depends_on :
112+ - jitsi-int-prosody
113+ environment :
114+ XMPP_DOMAIN : meet.jitsi
115+ XMPP_SERVER : jitsi-int-prosody
116+ XMPP_AUTH_DOMAIN : auth.meet.jitsi
117+ XMPP_INTERNAL_MUC_DOMAIN : internal-muc.meet.jitsi
118+ JICOFO_COMPONENT_SECRET : JicofoComp05!
119+ JICOFO_AUTH_PASSWORD : JicofoAuth05!
120+ AUTH_TYPE : jwt
121+ JWT_APP_ID : jitsi
122+ TZ : UTC
123+ networks :
124+ - jitsi-int-net
125+
126+ jitsi-int-jvb :
127+ image : jitsi/jvb:stable
128+ container_name : jitsi-int-jvb
129+ depends_on :
130+ - jitsi-int-prosody
131+ environment :
132+ XMPP_SERVER : jitsi-int-prosody
133+ XMPP_DOMAIN : meet.jitsi
134+ XMPP_AUTH_DOMAIN : auth.meet.jitsi
135+ XMPP_INTERNAL_MUC_DOMAIN : internal-muc.meet.jitsi
136+ JVB_AUTH_PASSWORD : JvbAuth05!
137+ DOCKER_HOST_ADDRESS : 127.0.0.1
138+ TZ : UTC
139+ ports :
140+ - " 10001:10000/udp"
141+ networks :
142+ - jitsi-int-net
143+
144+ jitsi-int-web :
145+ image : jitsi/web:stable
146+ container_name : jitsi-int-web
147+ depends_on :
148+ jitsi-int-keycloak :
149+ condition : service_healthy
150+ jitsi-int-traefik :
151+ condition : service_healthy
152+ environment :
153+ ENABLE_AUTH : " 1"
154+ AUTH_TYPE : jwt
155+ JWT_APP_ID : jitsi
156+ JWT_APP_SECRET : JitsiSSO05!
157+ JWT_ASAP_KEYSERVER : http://jitsi-int-keycloak:8080/realms/it-stack/protocol/openid-connect/certs
158+ JWT_ACCEPTED_ISSUERS : keycloak,localhost
159+ JWT_ACCEPTED_AUDIENCES : jitsi
160+ TOKEN_AUTH_URL : http://jitsi-int-keycloak:8080/realms/it-stack/protocol/openid-connect/auth?client_id=jitsi&response_type=code
161+ ENABLE_GUESTS : " 1"
162+ PUBLIC_URL : http://localhost:8180
163+ XMPP_DOMAIN : meet.jitsi
164+ XMPP_BOSH_URL_BASE : http://jitsi-int-prosody:5280
165+ XMPP_MUC_DOMAIN : muc.meet.jitsi
166+ TURN_CREDENTIALS : TurnSecret05!
167+ TURN_HOST : jitsi-int-coturn
168+ TURN_PORT : " 3478"
169+ TZ : UTC
170+ labels :
171+ - " traefik.enable=true"
172+ - " traefik.http.routers.jitsi-int.rule=Host(`meet.localhost`)"
173+ - " traefik.http.routers.jitsi-int.entrypoints=web"
174+ - " traefik.http.services.jitsi-int.loadbalancer.server.port=80"
175+ ports :
176+ - " 8150:80"
21177 networks :
22- - it-stack-net
178+ - jitsi-int-net
179+ healthcheck :
180+ test : ["CMD", "curl", "-f", "http://localhost/"]
181+ interval : 20s
182+ timeout : 10s
183+ retries : 10
184+ start_period : 30s
23185
24186networks :
25- it-stack -net :
26- driver : bridge
187+ jitsi-int -net :
188+ jitsi-int-turn-net:
0 commit comments