version: '3' services: # Frontend web: container_name: jitsi environment: ENABLE_HTTP_REDIRECT: 0 ENABLE_XMPP_WEBSOCKET: 0 DISABLE_HTTPS: 1 PUBLIC_URL: "https://{{ jitsi_url }}:443" TZ: "UTC" ENABLE_IPV6: 0 ETHERPAD_PUBLIC_URL: "https://{{ jitsi_pad_url }}" ETHERPAD_URL_BASE: "{{ jitsi_pad_internal_url }}" JICOFO_AUTH_USER: "focus" XMPP_AUTH_DOMAIN: "auth.meet.jitsi" XMPP_BOSH_URL_BASE: "http://xmpp.meet.jitsi:5280" XMPP_DOMAIN: "meet.jitsi" XMPP_GUEST_DOMAIN: "guest.meet.jitsi" XMPP_MUC_DOMAIN: "muc.meet.jitsi" XMPP_RECORDER_DOMAIN: "recorder.meet.jitsi" image: jitsi/web:stable labels: traefik.enable: "true" traefik.http.routers.jitsi.rule: "Host(`{{ jitsi_url }}`)" traefik.http.routers.jitsi.service: "jitsi" traefik.http.services.jitsi.loadbalancer.server.port: "80" networks: meet.jitsi: aliases: - meet.jitsi inverseproxy_shared: restart: unless-stopped volumes: - jitsi_config:/config:Z - jitsi_transcripts:/usr/share/jitsi-meet/transcripts:Z # XMPP server prosody: container_name: jitsi_xmpp environment: ENABLE_XMPP_WEBSOCKET: 0 XMPP_AUTH_DOMAIN: "auth.meet.jitsi" XMPP_DOMAIN: "meet.jitsi" XMPP_GUEST_DOMAIN: "guest.meet.jitsi" XMPP_INTERNAL_MUC_DOMAIN: "internal-muc.meet.jitsi" XMPP_MUC_DOMAIN: "muc.meet.jitsi" XMPP_RECORDER_DOMAIN: "recorder.meet.jitsi" XMPP_SERVER: "xmpp.meet.jitsi" JICOFO_COMPONENT_SECRET: "{{ jibri_jicofo_comp_secret }}" JICOFO_AUTH_USER: "focus" JICOFO_AUTH_PASSWORD: "{{ jibri_jicofo_auth_pass }}" JVB_AUTH_USER: "jvb" JVB_AUTH_PASSWORD: "{{ jitsi_jvb_auth_pass }}" PUBLIC_URL: "https://{{ jitsi_url }}:443" TZ: "UTC" expose: - "5222" - "5347" - "5280" image: jitsi/prosody:stable networks: meet.jitsi: aliases: - xmpp.meet.jitsi restart: unless-stopped volumes: - jitsi_prosody_config:/config:Z - jitsi_prosody_plugins:/prosody-plugins-custom:Z # Focus component jicofo: container_name: jitsi_focus depends_on: - prosody environment: JICOFO_COMPONENT_SECRET: "{{ jibri_jicofo_comp_secret }}" JICOFO_AUTH_USER: "focus" JICOFO_AUTH_PASSWORD: "{{ jibri_jicofo_auth_pass }}" JVB_BREWERY_MUC: "jvbbrewery" TZ: "UTC" XMPP_AUTH_DOMAIN: "auth.meet.jitsi" XMPP_DOMAIN: "meet.jitsi" XMPP_INTERNAL_MUC_DOMAIN: "internal-muc.meet.jitsi" XMPP_MUC_DOMAIN: "muc.meet.jitsi" XMPP_SERVER: "xmpp.meet.jitsi" image: jitsi/jicofo:stable networks: meet.jitsi: restart: unless-stopped volumes: - jitsi_jicofo:/config:Z # Video bridge jvb: container_name: jitsi_videobridge depends_on: - prosody environment: DOCKER_HOST_ADDRESS: "{{ ansible_host }}" XMPP_AUTH_DOMAIN: "auth.meet.jitsi" XMPP_INTERNAL_MUC_DOMAIN: "internal-muc.meet.jitsi" XMPP_SERVER: "xmpp.meet.jitsi" JVB_AUTH_USER: "jvb" JVB_AUTH_PASSWORD: "{{ jitsi_jvb_auth_pass }}" JVB_BREWERY_MUC: "jvbbrewery" JVB_PORT: 10000 JVB_TCP_HARVESTER_DISABLED: "true" JVB_TCP_PORT: 4443 JVB_TCP_MAPPED_PORT: 4443 JVB_STUN_SERVERS: "meet-jit-si-turnrelay.jitsi.net:443" PUBLIC_URL: "https://{{ jitsi_url }}:443" TZ: "UTC" image: jitsi/jvb:stable labels: traefik.udp.routers.jvb.entrypoints: video traefik.udp.routers.jvb.service: jvb traefik.udp.services.jvb.loadbalancer.server.port: 10000 networks: meet.jitsi: aliases: - jvb.meet.jitsi ports: - '10000:10000/udp' - '4443:4443' restart: unless-stopped volumes: - jitsi_jvb:/config:Z # Custom network so all services can communicate using a FQDN networks: meet.jitsi: driver_opts: encrypted: 1 inverseproxy_shared: external: true volumes: jitsi_config: jitsi_transcripts: jitsi_prosody_config: jitsi_prosody_plugins: jitsi_jicofo: jitsi_jvb: