version: '3'

services:
    # Frontend
    web:
        image: jitsi/web
        ports:
            - '8000:80'
            - '8443:443'
        volumes:
            - ${CONFIG}/meet:/config
        environment:
            - JICOFO_AUTH_USER
            - XMPP_DOMAIN
            - XMPP_AUTH_DOMAIN
            - XMPP_BOSH_URL_BASE
            - XMPP_MUC_DOMAIN
            - TZ
        networks:
            meet.jitsi:

    # XMPP server
    prosody:
        image: jitsi/prosody
        expose:
            - '5222'
            - '5347'
            - '5280'
        volumes:
            - ${CONFIG}/prosody:/config
        environment:
            - XMPP_DOMAIN
            - XMPP_AUTH_DOMAIN
            - XMPP_MUC_DOMAIN
            - JICOFO_COMPONENT_SECRET
            - JVB_COMPONENT_SECRET
            - JICOFO_AUTH_USER
            - JICOFO_AUTH_PASSWORD
            - TZ
        networks:
            meet.jitsi:
                aliases:
                    - xmpp.meet.jitsi

    # Focus component
    jicofo:
        image: jitsi/jicofo
        volumes:
            - ${CONFIG}/jicofo:/config
        environment:
            - XMPP_DOMAIN
            - XMPP_AUTH_DOMAIN
            - XMPP_SERVER=xmpp.meet.jitsi
            - JICOFO_COMPONENT_SECRET
            - JICOFO_AUTH_USER
            - JICOFO_AUTH_PASSWORD
            - TZ
        networks:
            meet.jitsi:

    # Video bridge
    jvb:
        image: jitsi/jvb
        ports:
            - "10000:10000/udp"
        volumes:
            - ${CONFIG}/jvb:/config
        environment:
            - DOCKER_HOST_ADDRESS
            - XMPP_DOMAIN
            - XMPP_AUTH_DOMAIN
            - XMPP_SERVER=xmpp.meet.jitsi
            - JVB_COMPONENT_SECRET
            - JVB_STUN_SERVERS
            - JICOFO_AUTH_USER
            - TZ
        networks:
            meet.jitsi:

# Custom network so all services can communicate using a FQDN
networks:
    meet.jitsi: