jeffsi-meet-docker/docker-compose.jeffsi.yml

157 lines
6.2 KiB
YAML

# Jeffsi Meet - Docker Compose for Traefik + Cloudflare Tunnel
services:
web:
image: jeffsi-meet-web:latest
restart: ${RESTART_POLICY:-unless-stopped}
volumes:
- ${CONFIG}/web:/config:Z
- ${CONFIG}/web/crontabs:/var/spool/cron/crontabs:Z
- ${CONFIG}/transcripts:/usr/share/jitsi-meet/transcripts:Z
- ./branding/images:/usr/share/jitsi-meet/images/custom:ro
- ./branding/interface_config.js:/defaults/interface_config.js:ro
- ./branding/title.html:/usr/share/jitsi-meet/title.html:ro
- ./branding/head.html:/usr/share/jitsi-meet/head.html:ro
- ./branding/body.html:/usr/share/jitsi-meet/body.html:ro
- ./branding/css:/usr/share/jitsi-meet/css/custom:ro
- ./branding/welcome:/usr/share/jitsi-meet/welcome:ro
- ./nginx-custom:/config/nginx-custom:ro
labels:
- "traefik.enable=true"
- "traefik.http.routers.jeffsi-meet.rule=Host(`meet.jeffemmett.com`)"
- "traefik.http.routers.jeffsi-meet.entrypoints=web"
- "traefik.http.services.jeffsi-meet.loadbalancer.server.port=80"
- "traefik.http.middlewares.jeffsi-headers.headers.customrequestheaders.X-Forwarded-Proto=https"
- "traefik.http.middlewares.jeffsi-nocache.headers.customresponseheaders.Cache-Control=no-store, must-revalidate"
- "traefik.http.middlewares.jeffsi-frame.headers.customFrameOptionsValue=ALLOWALL"
- "traefik.http.middlewares.jeffsi-permissions.headers.customresponseheaders.Permissions-Policy=camera=*, microphone=*, display-capture=*, fullscreen=*, autoplay=*"
- "traefik.http.middlewares.jeffsi-csp.headers.customresponseheaders.Content-Security-Policy=frame-ancestors *"
- "traefik.http.routers.jeffsi-meet.middlewares=jeffsi-headers,jeffsi-nocache,jeffsi-frame,jeffsi-permissions,jeffsi-csp"
environment:
- PUBLIC_URL=https://meet.jeffemmett.com
- TZ=${TZ:-UTC}
- ENABLE_COLIBRI_WEBSOCKET=1
- ENABLE_XMPP_WEBSOCKET=1
- ENABLE_PREJOIN_PAGE=true
- START_WITH_AUDIO_MUTED=false
- START_WITH_VIDEO_MUTED=false
- ENABLE_WELCOME_PAGE=true
- ENABLE_CLOSE_PAGE=true
- ENABLE_P2P=true
- ENABLE_SIMULCAST=true
- ENABLE_BREAKOUT_ROOMS=true
- DISABLE_HTTPS=1
- ENABLE_AUTH
- ENABLE_GUESTS
- XMPP_DOMAIN=meet.jitsi
- XMPP_AUTH_DOMAIN=auth.meet.jitsi
- XMPP_BOSH_URL_BASE=http://prosody:5280
- XMPP_GUEST_DOMAIN=guest.meet.jitsi
- XMPP_MUC_DOMAIN=muc.meet.jitsi
- XMPP_RECORDER_DOMAIN=recorder.meet.jitsi
- ENABLE_RECORDING
networks:
- meet.jitsi
- traefik-public
depends_on:
- prosody
- jvb
prosody:
image: jitsi/prosody:${JITSI_IMAGE_VERSION:-stable}
restart: ${RESTART_POLICY:-unless-stopped}
expose:
- "5222"
- "5269"
- "5347"
- "5280"
volumes:
- ${CONFIG}/prosody/config:/config:Z
- ${CONFIG}/prosody/prosody-plugins-custom:/prosody-plugins-custom:Z
environment:
- PUBLIC_URL=https://meet.jeffemmett.com
- TZ=${TZ:-UTC}
- AUTH_TYPE=${AUTH_TYPE:-internal}
- ENABLE_AUTH=${ENABLE_AUTH:-0}
- ENABLE_GUESTS=${ENABLE_GUESTS:-1}
- ENABLE_BREAKOUT_ROOMS=1
- ENABLE_LOBBY=1
- ENABLE_AV_MODERATION=1
- ENABLE_XMPP_WEBSOCKET=1
- JICOFO_AUTH_PASSWORD
- JVB_AUTH_USER
- JVB_AUTH_PASSWORD
- JIBRI_XMPP_USER
- JIBRI_XMPP_PASSWORD
- JIBRI_RECORDER_USER
- JIBRI_RECORDER_PASSWORD
- JWT_APP_ID
- JWT_APP_SECRET
- JWT_ACCEPTED_ISSUERS
- JWT_ACCEPTED_AUDIENCES
- XMPP_DOMAIN=meet.jitsi
- XMPP_AUTH_DOMAIN=auth.meet.jitsi
- XMPP_GUEST_DOMAIN=guest.meet.jitsi
- XMPP_MUC_DOMAIN=muc.meet.jitsi
- XMPP_INTERNAL_MUC_DOMAIN=internal-muc.meet.jitsi
- XMPP_RECORDER_DOMAIN=recorder.meet.jitsi
networks:
meet.jitsi:
aliases:
- xmpp.meet.jitsi
jicofo:
image: jitsi/jicofo:${JITSI_IMAGE_VERSION:-stable}
restart: ${RESTART_POLICY:-unless-stopped}
volumes:
- ${CONFIG}/jicofo:/config:Z
environment:
- TZ=${TZ:-UTC}
- AUTH_TYPE=${AUTH_TYPE:-internal}
- ENABLE_AUTH=${ENABLE_AUTH:-0}
- ENABLE_RECORDING
- ENABLE_SCTP=1
- JICOFO_AUTH_PASSWORD
- XMPP_DOMAIN=meet.jitsi
- XMPP_AUTH_DOMAIN=auth.meet.jitsi
- XMPP_INTERNAL_MUC_DOMAIN=internal-muc.meet.jitsi
- XMPP_MUC_DOMAIN=muc.meet.jitsi
- XMPP_SERVER=prosody
networks:
- meet.jitsi
depends_on:
- prosody
jvb:
image: jitsi/jvb:${JITSI_IMAGE_VERSION:-stable}
restart: ${RESTART_POLICY:-unless-stopped}
ports:
- "10200:10200/udp"
volumes:
- ${CONFIG}/jvb:/config:Z
environment:
- TZ=${TZ:-UTC}
- PUBLIC_URL=https://meet.jeffemmett.com
- JVB_AUTH_USER
- JVB_AUTH_PASSWORD
- JVB_BREWERY_MUC=jvbbrewery
- JVB_ADVERTISE_IPS=${JVB_ADVERTISE_IPS}
- JVB_PORT=10200
- JVB_STUN_SERVERS=meet-jit-si-turnrelay.jitsi.net:443
- ENABLE_COLIBRI_WEBSOCKET=1
- JVB_WS_DOMAIN=meet.jeffemmett.com
- JVB_WS_SERVER_ID=default-id
- XMPP_AUTH_DOMAIN=auth.meet.jitsi
- XMPP_INTERNAL_MUC_DOMAIN=internal-muc.meet.jitsi
- XMPP_SERVER=prosody
- VIDEOBRIDGE_MAX_MEMORY=${VIDEOBRIDGE_MAX_MEMORY:-3072m}
networks:
- meet.jitsi
depends_on:
- prosody
networks:
meet.jitsi:
driver: bridge
traefik-public:
external: true