Add deployment scaffolding (Dockerfile, docker-compose, nginx)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
parent
c805f6d3ce
commit
98119f58cc
|
|
@ -1,19 +1,34 @@
|
||||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 200 60" width="200" height="60">
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 280 80" width="280" height="80">
|
||||||
<defs>
|
<defs>
|
||||||
<linearGradient id="jeffsiGrad" x1="0%" y1="0%" x2="100%" y2="100%">
|
<linearGradient id="jeffsiGrad" x1="0%" y1="0%" x2="100%" y2="100%">
|
||||||
<stop offset="0%" style="stop-color:#6366f1;stop-opacity:1" />
|
<stop offset="0%" style="stop-color:#6366f1;stop-opacity:1" />
|
||||||
<stop offset="100%" style="stop-color:#8b5cf6;stop-opacity:1" />
|
<stop offset="50%" style="stop-color:#8b5cf6;stop-opacity:1" />
|
||||||
|
<stop offset="100%" style="stop-color:#a855f7;stop-opacity:1" />
|
||||||
</linearGradient>
|
</linearGradient>
|
||||||
|
<filter id="glow" x="-50%" y="-50%" width="200%" height="200%">
|
||||||
|
<feGaussianBlur stdDeviation="3" result="coloredBlur"/>
|
||||||
|
<feMerge>
|
||||||
|
<feMergeNode in="coloredBlur"/>
|
||||||
|
<feMergeNode in="SourceGraphic"/>
|
||||||
|
</feMerge>
|
||||||
|
</filter>
|
||||||
</defs>
|
</defs>
|
||||||
|
|
||||||
<!-- Video camera icon -->
|
<!-- Video camera icon -->
|
||||||
<g transform="translate(10, 10)">
|
<g transform="translate(15, 15)" filter="url(#glow)">
|
||||||
<rect x="0" y="8" width="28" height="24" rx="4" fill="url(#jeffsiGrad)"/>
|
<rect x="0" y="10" width="36" height="30" rx="6" fill="url(#jeffsiGrad)"/>
|
||||||
<path d="M28 14 L40 8 L40 32 L28 26 Z" fill="url(#jeffsiGrad)"/>
|
<path d="M36 17 L52 8 L52 42 L36 33 Z" fill="url(#jeffsiGrad)"/>
|
||||||
|
<!-- Record dot -->
|
||||||
|
<circle cx="12" cy="25" r="5" fill="#ef4444"/>
|
||||||
</g>
|
</g>
|
||||||
|
|
||||||
<!-- Text: Jeffsi Meet -->
|
<!-- Text: Jeffsi Meet -->
|
||||||
<text x="60" y="38" font-family="system-ui, -apple-system, sans-serif" font-size="24" font-weight="600" fill="#ffffff">
|
<text x="75" y="48" font-family="Fredoka, system-ui, -apple-system, sans-serif" font-size="32" font-weight="600" fill="#ffffff" letter-spacing="-0.02em">
|
||||||
Jeffsi Meet
|
Jeffsi<tspan fill="url(#jeffsiGrad)"> Meet</tspan>
|
||||||
|
</text>
|
||||||
|
|
||||||
|
<!-- Tagline -->
|
||||||
|
<text x="77" y="68" font-family="Fredoka, system-ui, sans-serif" font-size="12" font-weight="400" fill="rgba(255,255,255,0.6)">
|
||||||
|
Free Video Conferencing
|
||||||
</text>
|
</text>
|
||||||
</svg>
|
</svg>
|
||||||
|
|
|
||||||
|
Before Width: | Height: | Size: 745 B After Width: | Height: | Size: 1.4 KiB |
|
|
@ -1,68 +1,33 @@
|
||||||
/* eslint-disable no-unused-vars, no-var, max-len */
|
/* eslint-disable no-unused-vars, no-var, max-len */
|
||||||
/* Jeffsi Meet - Branded interface configuration */
|
|
||||||
|
|
||||||
var interfaceConfig = {
|
var interfaceConfig = {
|
||||||
APP_NAME: 'Jeffsi Meet',
|
APP_NAME: "Jeffsi Meet",
|
||||||
AUDIO_LEVEL_PRIMARY_COLOR: 'rgba(255,255,255,0.4)',
|
PROVIDER_NAME: "Jeff Emmett",
|
||||||
AUDIO_LEVEL_SECONDARY_COLOR: 'rgba(255,255,255,0.2)',
|
|
||||||
AUTO_PIN_LATEST_SCREEN_SHARE: 'remote-only',
|
|
||||||
|
|
||||||
// Branding - Remove all Jitsi references
|
|
||||||
BRAND_WATERMARK_LINK: 'https://jeffemmett.com',
|
|
||||||
JITSI_WATERMARK_LINK: 'https://jeffemmett.com',
|
|
||||||
SHOW_JITSI_WATERMARK: false,
|
SHOW_JITSI_WATERMARK: false,
|
||||||
SHOW_BRAND_WATERMARK: false,
|
SHOW_BRAND_WATERMARK: false,
|
||||||
SHOW_POWERED_BY: false,
|
SHOW_POWERED_BY: false,
|
||||||
SHOW_PROMOTIONAL_CLOSE_PAGE: false,
|
SHOW_PROMOTIONAL_CLOSE_PAGE: false,
|
||||||
SHOW_CHROME_EXTENSION_BANNER: false,
|
SHOW_CHROME_EXTENSION_BANNER: false,
|
||||||
|
|
||||||
// Provider info
|
|
||||||
PROVIDER_NAME: 'Jeff Emmett',
|
|
||||||
SUPPORT_URL: 'https://jeffemmett.com',
|
|
||||||
|
|
||||||
// Welcome page (disabled for canvas embed use)
|
|
||||||
DISPLAY_WELCOME_FOOTER: false,
|
DISPLAY_WELCOME_FOOTER: false,
|
||||||
DISPLAY_WELCOME_PAGE_ADDITIONAL_CARD: false,
|
DISPLAY_WELCOME_PAGE_ADDITIONAL_CARD: false,
|
||||||
DISPLAY_WELCOME_PAGE_CONTENT: false,
|
DISPLAY_WELCOME_PAGE_CONTENT: false,
|
||||||
DISPLAY_WELCOME_PAGE_TOOLBAR_ADDITIONAL_CONTENT: false,
|
GENERATE_ROOMNAMES_ON_WELCOME_PAGE: true,
|
||||||
GENERATE_ROOMNAMES_ON_WELCOME_PAGE: false,
|
|
||||||
|
|
||||||
// Default appearance
|
DEFAULT_BACKGROUND: "#0f0a1a",
|
||||||
DEFAULT_BACKGROUND: '#1a1a2e',
|
DEFAULT_LOGO_URL: "images/custom/jeffsi-logo.svg",
|
||||||
DEFAULT_WELCOME_PAGE_LOGO_URL: 'images/custom/jeffsi-logo.svg',
|
DEFAULT_WELCOME_PAGE_LOGO_URL: "images/custom/jeffsi-logo.svg",
|
||||||
|
|
||||||
// UI preferences for embedded use
|
|
||||||
CLOSE_PAGE_GUEST_HINT: false,
|
|
||||||
DISABLE_DOMINANT_SPEAKER_INDICATOR: false,
|
|
||||||
DISABLE_JOIN_LEAVE_NOTIFICATIONS: false,
|
|
||||||
DISABLE_PRESENCE_STATUS: false,
|
|
||||||
DISABLE_TRANSCRIPTION_SUBTITLES: false,
|
|
||||||
DISABLE_VIDEO_BACKGROUND: false,
|
|
||||||
|
|
||||||
// Features
|
|
||||||
ENABLE_DIAL_OUT: false,
|
|
||||||
HIDE_INVITE_MORE_HEADER: true,
|
HIDE_INVITE_MORE_HEADER: true,
|
||||||
LANG_DETECTION: true,
|
|
||||||
LOCAL_THUMBNAIL_RATIO: 16 / 9,
|
|
||||||
MAXIMUM_ZOOMING_COEFFICIENT: 1.3,
|
|
||||||
MOBILE_APP_PROMO: false,
|
MOBILE_APP_PROMO: false,
|
||||||
|
|
||||||
// Browsers
|
|
||||||
OPTIMAL_BROWSERS: ['chrome', 'chromium', 'firefox', 'electron', 'safari', 'webkit'],
|
|
||||||
UNSUPPORTED_BROWSERS: [],
|
|
||||||
|
|
||||||
// UI layout
|
|
||||||
POLICY_LOGO: null,
|
|
||||||
RECENT_LIST_ENABLED: false,
|
RECENT_LIST_ENABLED: false,
|
||||||
REMOTE_THUMBNAIL_RATIO: 1,
|
|
||||||
SETTINGS_SECTIONS: ['devices', 'language', 'moderator', 'profile', 'sounds', 'more'],
|
|
||||||
VERTICAL_FILMSTRIP: true,
|
|
||||||
VIDEO_LAYOUT_FIT: 'both',
|
|
||||||
VIDEO_QUALITY_LABEL_DISABLED: false,
|
|
||||||
FILM_STRIP_MAX_HEIGHT: 120,
|
|
||||||
|
|
||||||
// Allow trailing comma
|
TOOLBAR_BUTTONS: [
|
||||||
makeJsonParserHappy: 'even if last key had a trailing comma'
|
"camera", "chat", "desktop", "filmstrip", "fullscreen",
|
||||||
|
"hangup", "microphone", "participants-pane", "raisehand",
|
||||||
|
"settings", "tileview", "videoquality", "sharedmusic", "sharedvideo"
|
||||||
|
],
|
||||||
|
|
||||||
|
makeJsonParserHappy: "trailing comma"
|
||||||
};
|
};
|
||||||
|
|
||||||
/* eslint-enable no-unused-vars, no-var, max-len */
|
/* eslint-enable no-unused-vars, no-var, max-len */
|
||||||
|
|
|
||||||
|
|
@ -1,57 +1,54 @@
|
||||||
# Jeffsi Meet - Docker Compose for Traefik + Cloudflare Tunnel
|
# Jeffsi Meet - Docker Compose for Traefik + Cloudflare Tunnel
|
||||||
# Based on docker-jitsi-meet, customized for Netcup RS 8000 deployment
|
|
||||||
|
|
||||||
services:
|
services:
|
||||||
# Frontend - Web interface
|
|
||||||
web:
|
web:
|
||||||
image: jitsi/web:${JITSI_IMAGE_VERSION:-stable}
|
image: jeffsi-meet-web:latest
|
||||||
restart: ${RESTART_POLICY:-unless-stopped}
|
restart: ${RESTART_POLICY:-unless-stopped}
|
||||||
# No HTTP/HTTPS ports - Traefik handles incoming traffic
|
|
||||||
volumes:
|
volumes:
|
||||||
- ${CONFIG}/web:/config:Z
|
- ${CONFIG}/web:/config:Z
|
||||||
- ${CONFIG}/web/crontabs:/var/spool/cron/crontabs:Z
|
- ${CONFIG}/web/crontabs:/var/spool/cron/crontabs:Z
|
||||||
- ${CONFIG}/transcripts:/usr/share/jitsi-meet/transcripts:Z
|
- ${CONFIG}/transcripts:/usr/share/jitsi-meet/transcripts:Z
|
||||||
# Custom branding
|
|
||||||
- ./branding/images:/usr/share/jitsi-meet/images/custom:ro
|
- ./branding/images:/usr/share/jitsi-meet/images/custom:ro
|
||||||
- ./branding/interface_config.js:/defaults/interface_config.js: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:
|
labels:
|
||||||
# Traefik routing - web entrypoint (Cloudflare tunnel sends to :80)
|
|
||||||
- "traefik.enable=true"
|
- "traefik.enable=true"
|
||||||
- "traefik.http.routers.jeffsi-meet.rule=Host(`meet.jeffemmett.com`)"
|
- "traefik.http.routers.jeffsi-meet.rule=Host(`meet.jeffemmett.com`)"
|
||||||
- "traefik.http.routers.jeffsi-meet.entrypoints=web"
|
- "traefik.http.routers.jeffsi-meet.entrypoints=web"
|
||||||
- "traefik.http.services.jeffsi-meet.loadbalancer.server.port=80"
|
- "traefik.http.services.jeffsi-meet.loadbalancer.server.port=80"
|
||||||
# BOSH/WebSocket support - tell Jitsi the original request was HTTPS
|
- "traefik.http.middlewares.jeffsi-headers.headers.customrequestheaders.X-Forwarded-Proto=https"
|
||||||
- "traefik.http.middlewares.jeffsi-meet-headers.headers.customrequestheaders.X-Forwarded-Proto=https"
|
- "traefik.http.middlewares.jeffsi-nocache.headers.customresponseheaders.Cache-Control=no-store, must-revalidate"
|
||||||
- "traefik.http.routers.jeffsi-meet.middlewares=jeffsi-meet-headers"
|
- "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:
|
environment:
|
||||||
# Basic
|
|
||||||
- PUBLIC_URL=https://meet.jeffemmett.com
|
- PUBLIC_URL=https://meet.jeffemmett.com
|
||||||
- TZ=${TZ:-UTC}
|
- TZ=${TZ:-UTC}
|
||||||
# Features
|
|
||||||
- ENABLE_COLIBRI_WEBSOCKET=1
|
- ENABLE_COLIBRI_WEBSOCKET=1
|
||||||
- ENABLE_XMPP_WEBSOCKET=1
|
- ENABLE_XMPP_WEBSOCKET=1
|
||||||
- ENABLE_PREJOIN_PAGE=true
|
- ENABLE_PREJOIN_PAGE=true
|
||||||
- ENABLE_WELCOME_PAGE=false
|
- START_WITH_AUDIO_MUTED=false
|
||||||
|
- START_WITH_VIDEO_MUTED=false
|
||||||
|
- ENABLE_WELCOME_PAGE=true
|
||||||
- ENABLE_CLOSE_PAGE=true
|
- ENABLE_CLOSE_PAGE=true
|
||||||
- ENABLE_P2P=true
|
- ENABLE_P2P=true
|
||||||
- ENABLE_SIMULCAST=true
|
- ENABLE_SIMULCAST=true
|
||||||
- ENABLE_BREAKOUT_ROOMS=true
|
- ENABLE_BREAKOUT_ROOMS=true
|
||||||
# Disable HTTPS in container (Traefik handles TLS)
|
|
||||||
- DISABLE_HTTPS=1
|
- DISABLE_HTTPS=1
|
||||||
# Auth
|
|
||||||
- ENABLE_AUTH
|
- ENABLE_AUTH
|
||||||
- ENABLE_GUESTS
|
- ENABLE_GUESTS
|
||||||
# Domain config
|
|
||||||
- XMPP_DOMAIN=meet.jitsi
|
- XMPP_DOMAIN=meet.jitsi
|
||||||
- XMPP_AUTH_DOMAIN=auth.meet.jitsi
|
- XMPP_AUTH_DOMAIN=auth.meet.jitsi
|
||||||
- XMPP_BOSH_URL_BASE=http://prosody:5280
|
- XMPP_BOSH_URL_BASE=http://prosody:5280
|
||||||
- XMPP_GUEST_DOMAIN=guest.meet.jitsi
|
- XMPP_GUEST_DOMAIN=guest.meet.jitsi
|
||||||
- XMPP_MUC_DOMAIN=muc.meet.jitsi
|
- XMPP_MUC_DOMAIN=muc.meet.jitsi
|
||||||
- XMPP_RECORDER_DOMAIN=recorder.meet.jitsi
|
- XMPP_RECORDER_DOMAIN=recorder.meet.jitsi
|
||||||
# Recording
|
|
||||||
- ENABLE_RECORDING
|
- ENABLE_RECORDING
|
||||||
# Codec preferences
|
|
||||||
- CODEC_ORDER_JVB=VP9,VP8,H264
|
|
||||||
networks:
|
networks:
|
||||||
- meet.jitsi
|
- meet.jitsi
|
||||||
- traefik-public
|
- traefik-public
|
||||||
|
|
@ -59,31 +56,27 @@ services:
|
||||||
- prosody
|
- prosody
|
||||||
- jvb
|
- jvb
|
||||||
|
|
||||||
# XMPP server
|
|
||||||
prosody:
|
prosody:
|
||||||
image: jitsi/prosody:${JITSI_IMAGE_VERSION:-stable}
|
image: jitsi/prosody:${JITSI_IMAGE_VERSION:-stable}
|
||||||
restart: ${RESTART_POLICY:-unless-stopped}
|
restart: ${RESTART_POLICY:-unless-stopped}
|
||||||
expose:
|
expose:
|
||||||
- '5222'
|
- "5222"
|
||||||
- '5269'
|
- "5269"
|
||||||
- '5347'
|
- "5347"
|
||||||
- '5280'
|
- "5280"
|
||||||
volumes:
|
volumes:
|
||||||
- ${CONFIG}/prosody/config:/config:Z
|
- ${CONFIG}/prosody/config:/config:Z
|
||||||
- ${CONFIG}/prosody/prosody-plugins-custom:/prosody-plugins-custom:Z
|
- ${CONFIG}/prosody/prosody-plugins-custom:/prosody-plugins-custom:Z
|
||||||
environment:
|
environment:
|
||||||
- PUBLIC_URL=https://meet.jeffemmett.com
|
- PUBLIC_URL=https://meet.jeffemmett.com
|
||||||
- TZ=${TZ:-UTC}
|
- TZ=${TZ:-UTC}
|
||||||
# Auth
|
|
||||||
- AUTH_TYPE=${AUTH_TYPE:-internal}
|
- AUTH_TYPE=${AUTH_TYPE:-internal}
|
||||||
- ENABLE_AUTH=${ENABLE_AUTH:-0}
|
- ENABLE_AUTH=${ENABLE_AUTH:-0}
|
||||||
- ENABLE_GUESTS=${ENABLE_GUESTS:-1}
|
- ENABLE_GUESTS=${ENABLE_GUESTS:-1}
|
||||||
# Features
|
|
||||||
- ENABLE_BREAKOUT_ROOMS=1
|
- ENABLE_BREAKOUT_ROOMS=1
|
||||||
- ENABLE_LOBBY=1
|
- ENABLE_LOBBY=1
|
||||||
- ENABLE_AV_MODERATION=1
|
- ENABLE_AV_MODERATION=1
|
||||||
- ENABLE_XMPP_WEBSOCKET=1
|
- ENABLE_XMPP_WEBSOCKET=1
|
||||||
# Credentials
|
|
||||||
- JICOFO_AUTH_PASSWORD
|
- JICOFO_AUTH_PASSWORD
|
||||||
- JVB_AUTH_USER
|
- JVB_AUTH_USER
|
||||||
- JVB_AUTH_PASSWORD
|
- JVB_AUTH_PASSWORD
|
||||||
|
|
@ -91,12 +84,10 @@ services:
|
||||||
- JIBRI_XMPP_PASSWORD
|
- JIBRI_XMPP_PASSWORD
|
||||||
- JIBRI_RECORDER_USER
|
- JIBRI_RECORDER_USER
|
||||||
- JIBRI_RECORDER_PASSWORD
|
- JIBRI_RECORDER_PASSWORD
|
||||||
# JWT (optional)
|
|
||||||
- JWT_APP_ID
|
- JWT_APP_ID
|
||||||
- JWT_APP_SECRET
|
- JWT_APP_SECRET
|
||||||
- JWT_ACCEPTED_ISSUERS
|
- JWT_ACCEPTED_ISSUERS
|
||||||
- JWT_ACCEPTED_AUDIENCES
|
- JWT_ACCEPTED_AUDIENCES
|
||||||
# Domain
|
|
||||||
- XMPP_DOMAIN=meet.jitsi
|
- XMPP_DOMAIN=meet.jitsi
|
||||||
- XMPP_AUTH_DOMAIN=auth.meet.jitsi
|
- XMPP_AUTH_DOMAIN=auth.meet.jitsi
|
||||||
- XMPP_GUEST_DOMAIN=guest.meet.jitsi
|
- XMPP_GUEST_DOMAIN=guest.meet.jitsi
|
||||||
|
|
@ -108,7 +99,6 @@ services:
|
||||||
aliases:
|
aliases:
|
||||||
- xmpp.meet.jitsi
|
- xmpp.meet.jitsi
|
||||||
|
|
||||||
# Focus component
|
|
||||||
jicofo:
|
jicofo:
|
||||||
image: jitsi/jicofo:${JITSI_IMAGE_VERSION:-stable}
|
image: jitsi/jicofo:${JITSI_IMAGE_VERSION:-stable}
|
||||||
restart: ${RESTART_POLICY:-unless-stopped}
|
restart: ${RESTART_POLICY:-unless-stopped}
|
||||||
|
|
@ -120,11 +110,7 @@ services:
|
||||||
- ENABLE_AUTH=${ENABLE_AUTH:-0}
|
- ENABLE_AUTH=${ENABLE_AUTH:-0}
|
||||||
- ENABLE_RECORDING
|
- ENABLE_RECORDING
|
||||||
- ENABLE_SCTP=1
|
- ENABLE_SCTP=1
|
||||||
# Credentials
|
|
||||||
- JICOFO_AUTH_PASSWORD
|
- JICOFO_AUTH_PASSWORD
|
||||||
# JVB
|
|
||||||
- JVB_BREWERY_MUC=jvbbrewery@internal-muc.meet.jitsi
|
|
||||||
# Domain
|
|
||||||
- XMPP_DOMAIN=meet.jitsi
|
- XMPP_DOMAIN=meet.jitsi
|
||||||
- XMPP_AUTH_DOMAIN=auth.meet.jitsi
|
- XMPP_AUTH_DOMAIN=auth.meet.jitsi
|
||||||
- XMPP_INTERNAL_MUC_DOMAIN=internal-muc.meet.jitsi
|
- XMPP_INTERNAL_MUC_DOMAIN=internal-muc.meet.jitsi
|
||||||
|
|
@ -135,35 +121,28 @@ services:
|
||||||
depends_on:
|
depends_on:
|
||||||
- prosody
|
- prosody
|
||||||
|
|
||||||
# Video bridge - handles actual video/audio
|
|
||||||
jvb:
|
jvb:
|
||||||
image: jitsi/jvb:${JITSI_IMAGE_VERSION:-stable}
|
image: jitsi/jvb:${JITSI_IMAGE_VERSION:-stable}
|
||||||
restart: ${RESTART_POLICY:-unless-stopped}
|
restart: ${RESTART_POLICY:-unless-stopped}
|
||||||
ports:
|
ports:
|
||||||
# UDP for video bridge - MUST be directly exposed (using 10200 to avoid conflict with coturn)
|
- "10200:10200/udp"
|
||||||
- '10200:10200/udp'
|
|
||||||
volumes:
|
volumes:
|
||||||
- ${CONFIG}/jvb:/config:Z
|
- ${CONFIG}/jvb:/config:Z
|
||||||
environment:
|
environment:
|
||||||
- TZ=${TZ:-UTC}
|
- TZ=${TZ:-UTC}
|
||||||
- PUBLIC_URL=https://meet.jeffemmett.com
|
- PUBLIC_URL=https://meet.jeffemmett.com
|
||||||
# Credentials
|
|
||||||
- JVB_AUTH_USER
|
- JVB_AUTH_USER
|
||||||
- JVB_AUTH_PASSWORD
|
- JVB_AUTH_PASSWORD
|
||||||
- JVB_BREWERY_MUC=jvbbrewery@internal-muc.meet.jitsi
|
- JVB_BREWERY_MUC=jvbbrewery
|
||||||
# Network - IMPORTANT: Set to server's public IP
|
|
||||||
- JVB_ADVERTISE_IPS=${JVB_ADVERTISE_IPS}
|
- JVB_ADVERTISE_IPS=${JVB_ADVERTISE_IPS}
|
||||||
- JVB_PORT=10200
|
- JVB_PORT=10200
|
||||||
- JVB_STUN_SERVERS=meet-jit-si-turnrelay.jitsi.net:443
|
- JVB_STUN_SERVERS=meet-jit-si-turnrelay.jitsi.net:443
|
||||||
# WebSocket
|
|
||||||
- ENABLE_COLIBRI_WEBSOCKET=1
|
- ENABLE_COLIBRI_WEBSOCKET=1
|
||||||
- JVB_WS_DOMAIN=meet.jeffemmett.com
|
- JVB_WS_DOMAIN=meet.jeffemmett.com
|
||||||
- JVB_WS_SERVER_ID=default-id
|
- JVB_WS_SERVER_ID=default-id
|
||||||
# Domain
|
|
||||||
- XMPP_AUTH_DOMAIN=auth.meet.jitsi
|
- XMPP_AUTH_DOMAIN=auth.meet.jitsi
|
||||||
- XMPP_INTERNAL_MUC_DOMAIN=internal-muc.meet.jitsi
|
- XMPP_INTERNAL_MUC_DOMAIN=internal-muc.meet.jitsi
|
||||||
- XMPP_SERVER=prosody
|
- XMPP_SERVER=prosody
|
||||||
# Memory
|
|
||||||
- VIDEOBRIDGE_MAX_MEMORY=${VIDEOBRIDGE_MAX_MEMORY:-3072m}
|
- VIDEOBRIDGE_MAX_MEMORY=${VIDEOBRIDGE_MAX_MEMORY:-3072m}
|
||||||
networks:
|
networks:
|
||||||
- meet.jitsi
|
- meet.jitsi
|
||||||
|
|
|
||||||
|
|
@ -1,18 +1,22 @@
|
||||||
services:
|
services:
|
||||||
# Frontend
|
|
||||||
web:
|
web:
|
||||||
image: jitsi/web:${JITSI_IMAGE_VERSION:-unstable}
|
image: jeffsi-meet-web:latest
|
||||||
restart: ${RESTART_POLICY:-unless-stopped}
|
restart: ${RESTART_POLICY:-unless-stopped}
|
||||||
ports:
|
|
||||||
- '${HTTP_PORT}:80'
|
|
||||||
- '${HTTPS_PORT}:443'
|
|
||||||
volumes:
|
volumes:
|
||||||
- ${CONFIG}/web:/config:Z
|
- ${CONFIG}/web:/config:Z
|
||||||
- ${CONFIG}/web/crontabs:/var/spool/cron/crontabs:Z
|
- ${CONFIG}/web/crontabs:/var/spool/cron/crontabs:Z
|
||||||
- ${CONFIG}/transcripts:/usr/share/jitsi-meet/transcripts:Z
|
- ${CONFIG}/transcripts:/usr/share/jitsi-meet/transcripts:Z
|
||||||
- ${CONFIG}/web/load-test:/usr/share/jitsi-meet/load-test:Z
|
- ${CONFIG}/web/load-test:/usr/share/jitsi-meet/load-test:Z
|
||||||
|
- ${CONFIG}/../branding/body.html:/usr/share/jitsi-meet/body.html:ro
|
||||||
|
- ${CONFIG}/../branding/title.html:/usr/share/jitsi-meet/title.html:ro
|
||||||
|
- ${CONFIG}/../branding/images:/usr/share/jitsi-meet/images/custom:ro
|
||||||
|
- ${CONFIG}/../branding/welcome:/usr/share/jitsi-meet/custom:ro
|
||||||
labels:
|
labels:
|
||||||
service: "jitsi-web"
|
service: jitsi-web
|
||||||
|
traefik.enable: 'true'
|
||||||
|
traefik.http.routers.jitsi.rule: Host(`meet.jeffemmett.com`)
|
||||||
|
traefik.http.routers.jitsi.entrypoints: web
|
||||||
|
traefik.http.services.jitsi.loadbalancer.server.port: '80'
|
||||||
environment:
|
environment:
|
||||||
- AMPLITUDE_ID
|
- AMPLITUDE_ID
|
||||||
- ANALYTICS_SCRIPT_URLS
|
- ANALYTICS_SCRIPT_URLS
|
||||||
|
|
@ -185,21 +189,20 @@ services:
|
||||||
- WHITEBOARD_COLLAB_SERVER_PUBLIC_URL
|
- WHITEBOARD_COLLAB_SERVER_PUBLIC_URL
|
||||||
- WHITEBOARD_COLLAB_SERVER_URL_BASE
|
- WHITEBOARD_COLLAB_SERVER_URL_BASE
|
||||||
networks:
|
networks:
|
||||||
meet.jitsi:
|
meet.jitsi: null
|
||||||
|
traefik-public: null
|
||||||
depends_on:
|
depends_on:
|
||||||
- jvb
|
- jvb
|
||||||
|
|
||||||
# XMPP server
|
|
||||||
prosody:
|
prosody:
|
||||||
image: jitsi/prosody:${JITSI_IMAGE_VERSION:-unstable}
|
image: jitsi/prosody:${JITSI_IMAGE_VERSION:-unstable}
|
||||||
restart: ${RESTART_POLICY:-unless-stopped}
|
restart: ${RESTART_POLICY:-unless-stopped}
|
||||||
expose:
|
expose:
|
||||||
- '${XMPP_PORT:-5222}'
|
- ${XMPP_PORT:-5222}
|
||||||
- '${PROSODY_S2S_PORT:-5269}'
|
- ${PROSODY_S2S_PORT:-5269}
|
||||||
- '5347'
|
- '5347'
|
||||||
- '${PROSODY_HTTP_PORT:-5280}'
|
- ${PROSODY_HTTP_PORT:-5280}
|
||||||
labels:
|
labels:
|
||||||
service: "jitsi-prosody"
|
service: jitsi-prosody
|
||||||
volumes:
|
volumes:
|
||||||
- ${CONFIG}/prosody/config:/config:Z
|
- ${CONFIG}/prosody/config:/config:Z
|
||||||
- ${CONFIG}/prosody/prosody-plugins-custom:/prosody-plugins-custom:Z
|
- ${CONFIG}/prosody/prosody-plugins-custom:/prosody-plugins-custom:Z
|
||||||
|
|
@ -339,17 +342,15 @@ services:
|
||||||
meet.jitsi:
|
meet.jitsi:
|
||||||
aliases:
|
aliases:
|
||||||
- ${XMPP_SERVER:-xmpp.meet.jitsi}
|
- ${XMPP_SERVER:-xmpp.meet.jitsi}
|
||||||
|
|
||||||
# Focus component
|
|
||||||
jicofo:
|
jicofo:
|
||||||
image: jitsi/jicofo:${JITSI_IMAGE_VERSION:-unstable}
|
image: jitsi/jicofo:${JITSI_IMAGE_VERSION:-unstable}
|
||||||
restart: ${RESTART_POLICY:-unless-stopped}
|
restart: ${RESTART_POLICY:-unless-stopped}
|
||||||
ports:
|
ports:
|
||||||
- '127.0.0.1:${JICOFO_REST_PORT:-8888}:8888'
|
- 127.0.0.1:${JICOFO_REST_PORT:-8888}:8888
|
||||||
volumes:
|
volumes:
|
||||||
- ${CONFIG}/jicofo:/config:Z
|
- ${CONFIG}/jicofo:/config:Z
|
||||||
labels:
|
labels:
|
||||||
service: "jitsi-jicofo"
|
service: jitsi-jicofo
|
||||||
environment:
|
environment:
|
||||||
- AUTH_TYPE
|
- AUTH_TYPE
|
||||||
- BRIDGE_AVG_PARTICIPANT_STRESS
|
- BRIDGE_AVG_PARTICIPANT_STRESS
|
||||||
|
|
@ -434,19 +435,17 @@ services:
|
||||||
depends_on:
|
depends_on:
|
||||||
- prosody
|
- prosody
|
||||||
networks:
|
networks:
|
||||||
meet.jitsi:
|
meet.jitsi: null
|
||||||
|
|
||||||
# Video bridge
|
|
||||||
jvb:
|
jvb:
|
||||||
image: jitsi/jvb:${JITSI_IMAGE_VERSION:-unstable}
|
image: jitsi/jvb:${JITSI_IMAGE_VERSION:-unstable}
|
||||||
restart: ${RESTART_POLICY:-unless-stopped}
|
restart: ${RESTART_POLICY:-unless-stopped}
|
||||||
ports:
|
ports:
|
||||||
- '${JVB_PORT:-10000}:${JVB_PORT:-10000}/udp'
|
- ${JVB_PORT:-10000}:${JVB_PORT:-10000}/udp
|
||||||
- '127.0.0.1:${JVB_COLIBRI_PORT:-8080}:8080'
|
- 127.0.0.1:${JVB_COLIBRI_PORT:-8080}:8080
|
||||||
volumes:
|
volumes:
|
||||||
- ${CONFIG}/jvb:/config:Z
|
- ${CONFIG}/jvb:/config:Z
|
||||||
labels:
|
labels:
|
||||||
service: "jitsi-jvb"
|
service: jitsi-jvb
|
||||||
environment:
|
environment:
|
||||||
- AUTOSCALER_SIDECAR_KEY_FILE
|
- AUTOSCALER_SIDECAR_KEY_FILE
|
||||||
- AUTOSCALER_SIDECAR_KEY_ID
|
- AUTOSCALER_SIDECAR_KEY_ID
|
||||||
|
|
@ -503,8 +502,8 @@ services:
|
||||||
depends_on:
|
depends_on:
|
||||||
- prosody
|
- prosody
|
||||||
networks:
|
networks:
|
||||||
meet.jitsi:
|
meet.jitsi: null
|
||||||
|
|
||||||
# Custom network so all services can communicate using a FQDN
|
|
||||||
networks:
|
networks:
|
||||||
meet.jitsi:
|
meet.jitsi: null
|
||||||
|
traefik-public:
|
||||||
|
external: true
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue