---
sso:
bond: 1
enabled: "{{ 'web-app-keycloak' in group_names }}"
shared: "{{ 'web-app-keycloak' in group_names }}"
flavor: oauth2
oauth2:
origin:
host: web
port: 80
ldap:
bond: 1
enabled: "{{ 'svc-db-openldap' in group_names }}"
shared: "{{ 'svc-db-openldap' in group_names }}"
logout:
bond: 1
enabled: "{{ 'web-svc-logout' in group_names }}"
shared: "{{ 'web-svc-logout' in group_names }}"
dashboard:
bond: 1
enabled: "{{ 'web-app-dashboard' in group_names }}"
shared: "{{ 'web-app-dashboard' in group_names }}"
matomo:
bond: 1
enabled: "{{ 'web-app-matomo' in group_names }}"
shared: "{{ 'web-app-matomo' in group_names }}"
prometheus:
bond: 1
enabled: "{{ 'web-app-prometheus' in group_names }}"
shared: "{{ 'web-app-prometheus' in group_names }}"
# nocheck: playwright-service-flag - email not used by Jitsi room flow
email:
bond: 1
enabled: "{{ MAIL_PROVIDER in group_names }}"
shared: "{{ MAIL_PROVIDER in group_names }}"
# nocheck: playwright-service-flag - css consumer, no Playwright surface (provider: web-svc-css)
css:
bond: 1
enabled: "{{ 'web-svc-css' in group_names }}"
shared: "{{ 'web-svc-css' in group_names }}"
# nocheck: dynamic-flag - gated on services.sso.enabled, not on group_names
# nocheck: playwright-service-flag - runtime DOM patch, no probe-able surface flag
javascript:
bond: 1
enabled: "{{ lookup('config', 'web-app-jitsi', 'services.sso.enabled') | bool }}"
shared: "{{ lookup('config', 'web-app-jitsi', 'services.sso.enabled') | bool }}"
# nocheck: playwright-service-flag: shared provider entity; the app itself is covered by this role's own Playwright spec
jitsi:
healthcheck:
flavor: tcp
modes:
compose:
enabled: true
swarm:
enabled: true
bond: 1
enabled: true
shared: true
image: jitsi/web
version: "stable-11031"
min_storage: 315MB
# nocheck: default-placement-manager meta/volumes.yml uses type:bind config dirs staged on the stack host; a worker-scheduled task lacks the source paths (unpinning requires migrating them to nfs-backed named volumes)
placement: manager
ports:
local:
http: 8084
sso: 16505
public:
media: 10000
internal:
http: 80
proxy:
service_key: web
run_after:
- web-app-keycloak
lifecycle: beta
cpus: "2.0"
mem_reservation: 1g
mem_limit: 3g
pids_limit: 2048
web:
name: jitsi-web
cpus: "0.5"
mem_reservation: 128m
mem_limit: 512m
pids_limit: 512
# nocheck: playwright-service-flag - internal sub-component (XMPP server, not a user-facing surface)
prosody:
healthcheck:
flavor: tcp
port_key: http
name: jitsi-prosody
image: jitsi/prosody
version: "stable-11031"
ports:
internal:
xmpp: 5222
component: 5347
http: 5280
cpus: "1.0"
mem_reservation: 512m
mem_limit: 1g
pids_limit: 1024
# nocheck: playwright-service-flag - internal sub-component (conference focus)
# nocheck: image-healthcheck XMPP component, no internal port declared
jicofo:
name: jitsi-jicofo
image: jitsi/jicofo
version: "stable-11031"
cpus: "1.0"
mem_reservation: 512m
mem_limit: 1g
pids_limit: 1024
# nocheck: playwright-service-flag - internal sub-component (video bridge, media plane)
# nocheck: image-healthcheck media bridge on UDP, no internal port declared
jvb:
name: jitsi-jvb
image: jitsi/jvb
version: "stable-11031"
cpus: "2.0"
mem_reservation: 1g
mem_limit: 2g
pids_limit: 2048
# nocheck: playwright-service-flag
tor:
enabled: false # nocheck: dynamic-flag
shared: false # nocheck: dynamic-flag