--- version: "3.8" services: app: image: mumblevoip/mumble-server:v1.6.870-0 networks: - proxy volumes: - "mumble_data:/data" secrets: - source: superuser-pw target: MUMBLE_SUPERUSER_PASSWORD environment: MUMBLE_CONFIG_WELCOMETEXT: ${WELCOME_TEXT:-"
Welcome to this server running Mumble.
Enjoy your stay!
"} MUMBLE_CONFIG_BANDWIDTH: ${BANDWIDTH:-558000} MUMBLE_CONFIG_TIMEOUT: ${TIMEOUT:-30} MUMBLE_CONFIG_USERS: ${USERS:-100} MUMBLE_CONFIG_USERSPERCHANNEL: ${USERS_PER_CHANNEL:-0} MUMBLE_CONFIG_MESSAGEBURST: ${MESSAGE_BURST:-5} MUMBLE_CONFIG_MESSAGELIMIT: ${MESSAGE_LIMIT:-1} MUMBLE_CONFIG_PLUGINMESSAGELIMIT: ${PLUGIN_MESSAGE_LIMIT:-1} MUMBLE_CONFIG_PLUGINMESSAGEBURST: ${PLUGIN_MESSAGE_BURST:-5} MUMBLE_CONFIG_ALLOWPING: ${ALLOW_PING:-true} MUMBLE_CONFIG_OPUSTHRESHOLD: ${OPUS_THRESHOLD:-0} MUMBLE_CONFIG_CHANNELNESTINGLIMIT: ${CHANNEL_NESTING_LIMIT:-10} MUMBLE_CONFIG_CHANNELCOUNTLIMIT: ${CHANNEL_COUNT_LIMIT:-1000} # 2026-04-28 @amras - the missing } in the following lines is intentional # otherwise compose will pass that character to the env. MUMBLE_CONFIG_CHANNELNAME: ${CHANNEL_NAME:-[ \\-=\\w\\#\\[\\]\\{\\}\\(\\)\\@\\|]+ MUMBLE_CONFIG_USERNAME: ${USER_NAME:-[-=\\w\\[\\]\\{\\}\\(\\)\\@\\|\\.]+ MUMBLE_CONFIG_DEFAULTCHANNEL: ${DEFAULT_CHANNEL} MUMBLE_CONFIG_REMEMBERCHANNEL: ${REMEMBER_CHANNEL:-true} MUMBLE_CONFIG_REMEMBERCHANNELDURATION: ${REMEMBER_CHANNEL_DURATION:-0} MUMBLE_CONFIG_TEXTMESSAGELENGTH: ${TEXT_MESSAGE_LENGTH:-5000} MUMBLE_CONFIG_IMAGEMESSAGELENGTH: ${IMAGE_MESSAGE_LENGTH:-1048576} MUMBLE_CONFIG_ALLOWHTML: ${ALLOW_HTML:-true} MUMBLE_CONFIG_BONJOUR: ${BONJOUR:-true} MUMBLE_CONFIG_OBFUSCATE: ${OBFUSCATE:-false} MUMBLE_CONFIG_CERTREQUIRED: ${CERT_REQUIRED:-false} MUMBLE_CONFIG_SENDVERSION: ${SEND_VERSION:-true} MUMBLE_CONFIG_SUGGESTVERSION: ${SUGGEST_VERSION} MUMBLE_CONFIG_SUGGESTPOSITIONAL: ${SUGGEST_POSITIONAL} MUMBLE_CONFIG_SUGGESTPUSHTOTALK: ${SUGGEST_PUSH_TO_TALK} MUMBLE_CONFIG_KDFITERATIONS: ${KDF_ITERATIONS:--1} MUMBLE_CONFIG_AUTOBANATTEMPTS: ${AUTOBAN_ATTEMPTS:-10} MUMBLE_CONFIG_AUTOBANTIMEFRAME: ${AUTOBAN_TIMEFRAME:-120} MUMBLE_CONFIG_AUTOBANTIME: ${AUTOBAN_TIME:-300} MUMBLE_CONFIG_AUTOBANSUCCESSFULCONNECTIONS: ${AUTOBAN_SUCCESSFUL_CONNECTIONS:-true} MUMBLE_CONFIG_ALLOWRECORDING: ${ALLOW_RECORDING:-true} MUMBLE_CONFIG_ROLLINGSTATSWINDOW: ${ROLLING_STATS_WINDOW:-300} MUMBLE_CONFIG_LISTENERSPERCHANNEL: ${LISTENERS_PER_CHANNEL:--1} MUMBLE_CONFIG_LISTENERSPERUSER: ${LISTENERS_PER_USER:--1} deploy: restart_policy: condition: on-failure labels: - "traefik.enable=true" - "traefik.tcp.routers.${STACK_NAME}.entrypoints=mumble" - "traefik.tcp.routers.${STACK_NAME}.service=${STACK_NAME}-tcp-service" - "traefik.tcp.routers.${STACK_NAME}.rule=HostSNI(`*`)" - "traefik.tcp.routers.${STACK_NAME}.tls.passthrough=true" - "traefik.tcp.services.${STACK_NAME}-tcp-service.loadbalancer.server.port=64738" - "traefik.udp.routers.${STACK_NAME}.entrypoints=mumble-udp" - "traefik.udp.routers.${STACK_NAME}.service=${STACK_NAME}-udp-service" - "traefik.udp.services.${STACK_NAME}-udp-service.loadbalancer.server.port=64738" - "coop-cloud.${STACK_NAME}.version=0.1.0+v1.6.870-0" secrets: superuser-pw: external: true name: ${STACK_NAME}_superuser-pw_${SECRET_SUPERUSER_PASSWORD_VERSION} networks: proxy: external: true volumes: mumble_data: