diff --git a/.gitignore b/.gitignore index 82d8eec..4eced3c 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,14 @@ +# IDEA generated +.idea + +# OS generated +.DS_Store +.AppleDouble + +# Tmp files +*.swp +*.log + +# App generated .env postgres-data diff --git a/CHANGELOG.md b/CHANGELOG.md index ec7d99c..1cbdd93 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,11 @@ ## Unreleased +## Release v2.2.31-1 (2020-12-23) #84 +- Applied v2.2.31 changes @alangecker +- Fix when presentation after recording unable to delete and change access rights #82 #63 @cardinalit +- Enable cameraQualityThresholds by default + ## Release v2.2.30-1 (2020-12-01) #79 - Applied v2.2.30 changes @alangecker - Applied v2.2.29 changes @alangecker diff --git a/bbb-webrtc-sfu b/bbb-webrtc-sfu index 0ea5bd5..9aa9f02 160000 --- a/bbb-webrtc-sfu +++ b/bbb-webrtc-sfu @@ -1 +1 @@ -Subproject commit 0ea5bd5d14f3d96c6f5ce4b5c238fbdef82e6d87 +Subproject commit 9aa9f02f07b70f01eed149296b42db4859f2fa04 diff --git a/docker-compose.yml b/docker-compose.yml index 3078f5e..d95620e 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -56,6 +56,7 @@ services: - html5 volumes: - bigbluebutton:/var/bigbluebutton + - html5-static:/html5-static:ro - ${DEFAULT_PRESENTATION:-/dev/null}:/etc/nginx/html/default.pdf network_mode: host extra_hosts: @@ -139,6 +140,8 @@ services: - redis - mongodb - etherpad + volumes: + - html5-static:/html5-static:rw environment: DOMAIN: ${DOMAIN} CLIENT_TITLE: ${CLIENT_TITLE} @@ -171,6 +174,7 @@ volumes: bigbluebutton: vol-freeswitch: vol-kurento: + html5-static: networks: bbb-net: diff --git a/mod/core/Dockerfile b/mod/core/Dockerfile index aec4523..734a09b 100644 --- a/mod/core/Dockerfile +++ b/mod/core/Dockerfile @@ -38,7 +38,7 @@ RUN equivs-control redis-server.control \ # this variable is not used, but it triggers # rebuilding from here on if changed -ENV VERSION v2.2.29 +ENV VERSION v2.2.31 RUN apt-get update && apt-get install -y bbb-web \ bbb-fsesl-akka bbb-apps-akka bbb-transcode-akka bbb-apps \ diff --git a/mod/html5/Dockerfile b/mod/html5/Dockerfile index ff902da..c8f8dcb 100644 --- a/mod/html5/Dockerfile +++ b/mod/html5/Dockerfile @@ -1,4 +1,4 @@ -FROM node:8-buster-slim AS builder +FROM node:8.17.0-buster-slim AS builder RUN apt-get update && apt-get install -y wget curl subversion python2 python3 build-essential RUN groupadd -g 2000 meteor && useradd -m -u 2001 -g meteor meteor @@ -14,7 +14,7 @@ USER meteor ENV METEOR_VERSION 1.8.1 RUN curl -sL https://install.meteor.com?release=$METEOR_VERSION | sed s/--progress-bar/-sL/g | /bin/sh -ENV TAG v2.2.30 +ENV TAG v2.2.31 RUN cd ~ \ && svn checkout https://github.com/bigbluebutton/bigbluebutton/tags/$TAG/bigbluebutton-html5 \ && mv ~/bigbluebutton-html5 ~/source \ @@ -42,12 +42,14 @@ RUN cd ~/app/bundle/programs/server \ FROM node:8-alpine -RUN addgroup -g 2000 meteor && adduser -D -u 2001 -G meteor meteor +RUN addgroup -g 2000 meteor && \ + adduser -D -u 2001 -G meteor meteor && \ + apk add su-exec COPY --from=builder /usr/local/bin/dockerize /usr/local/bin/dockerize COPY --from=builder --chown=meteor:meteor /home/meteor/app/bundle /app COPY entrypoint.sh /entrypoint.sh COPY settings.yml /app/programs/server/assets/app/config/settings.yml.tmpl -USER meteor + ENTRYPOINT ["/entrypoint.sh"] # lets set the tag again, so that it is include in the image for later version retrieval diff --git a/mod/html5/entrypoint.sh b/mod/html5/entrypoint.sh index 4bbb8d7..250ca76 100755 --- a/mod/html5/entrypoint.sh +++ b/mod/html5/entrypoint.sh @@ -1,10 +1,12 @@ #!/bin/sh +set -e cd /app export ROOT_URL=http://127.0.0.1/html5client export MONGO_URL=mongodb://10.7.7.6/meteor export NODE_ENV=production export ENVIRONMENT_TYPE=production +export SERVER_WEBSOCKET_COMPRESSION=0 export PORT=3000 export LANG=en_US.UTF-8 @@ -13,7 +15,14 @@ if [ "$DEV_MODE" == true ]; then export NODE_TLS_REJECT_UNAUTHORIZED=0 fi +# copy static files into volume for direct access by nginx +# https://github.com/bigbluebutton/bigbluebutton/issues/10739 +if [ -d "/html5-static" ]; then + rm -rf /html5-static/* + cp -r /app/programs/web.browser/* /html5-static +fi + rm -f /app/programs/server/assets/app/config/settings.yml dockerize \ -template /app/programs/server/assets/app/config/settings.yml.tmpl:/app/programs/server/assets/app/config/settings.yml \ - node main.js + su-exec meteor node main.js diff --git a/mod/html5/settings.yml b/mod/html5/settings.yml index af9509c..1d64f53 100644 --- a/mod/html5/settings.yml +++ b/mod/html5/settings.yml @@ -11,7 +11,7 @@ public: appName: BigBlueButton HTML5 Client bbbServerVersion: 2.2 copyright: "©2020 BigBlueButton Inc." - html5ClientBuild: 1095 + html5ClientBuild: 1114 helpLink: https://bigbluebutton.org/html5/ lockOnJoin: true cdn: "" @@ -36,7 +36,8 @@ public: # can generate excessive overhead to the server. We recommend # this value to be kept under 12. breakoutRoomLimit: {{ .Env.BREAKOUTROOM_LIMIT }} - customHeartbeat: false + # https://github.com/bigbluebutton/bigbluebutton/pull/10826 + customHeartbeat: true defaultSettings: application: animations: true @@ -194,7 +195,7 @@ public: # profile: a camera profile id from the cameraProfiles configuration array # that will be applied to all cameras when threshold is hit cameraQualityThresholds: - enabled: false + enabled: true thresholds: - threshold: 8 profile: low-u8 @@ -244,6 +245,7 @@ public: time: 5000 chat: enabled: {{ .Env.CHAT_ENABLED }} + bufferChatInsertsMs: 0 startClosed: {{ .Env.CHAT_START_CLOSED }} min_message_length: 1 max_message_length: 5000 @@ -291,7 +293,17 @@ public: #so far. Increasing this value might help avoiding 1004 error when #user activates microphone. iceGatheringTimeout: 5000 - sipjsHackViaWs: false + sipjsHackViaWs: true + #Websocket keepAlive interval (seconds). You may set this to prevent + #websocket disconnection in some environments. When set, BBB will send + #'\r\n\r\n' string through SIP.js's websocket. If not set, default value + #is 0. + websocketKeepAliveInterval: 30 + #Debounce time (seconds) for sending SIP.js's websocket keep alive message. + #If not set, default value is 10. + websocketKeepAliveDebounce: 10 + #Trace sip/audio messages in browser. If not set, default value is false. + traceSip: false presentation: defaultPresentationFile: default.pdf panZoomThrottle: 32 @@ -441,6 +453,11 @@ private: timeout: 5000 password: null debug: false + metrics: + queueMetrics: false + metricsDumpIntervalMs: 60000 + metricsFolderPath: METRICS_FOLDER + removeMeetingOnEnd: true channels: toAkkaApps: to-akka-apps-redis-channel toThirdParty: to-third-party-redis-channel @@ -464,6 +481,8 @@ private: enabled: false heapdump: enabled: false + heapdumpFolderPath: HEAPDUMP_FOLDER + heapdumpIntervalMs: 3600000 minBrowserVersions: - browser: chrome version: 72 diff --git a/mod/nginx/bbb/bbb-html5.nginx b/mod/nginx/bbb/bbb-html5.nginx index fbe6cd2..69324a0 100644 --- a/mod/nginx/bbb/bbb-html5.nginx +++ b/mod/nginx/bbb/bbb-html5.nginx @@ -1,10 +1,28 @@ -location /html5client { +location @html5client { proxy_pass http://html5:3000; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "Upgrade"; } +location /html5client/compatibility { + alias /html5-static/app/compatibility; +} +location /html5client/fonts { + alias /html5-static/app/fonts; +} +location /html5client/resources { + alias /html5-static/app/resources; +} +location /html5client/svgs { + alias /html5-static/app/svgs; +} + +location /html5client { + alias /html5-static; + try_files $uri @html5client; +} + location /_timesync { proxy_pass http://html5:3000; } diff --git a/mod/nginx/bbb/sip.nginx b/mod/nginx/bbb/sip.nginx index ee4993e..3d85d6c 100644 --- a/mod/nginx/bbb/sip.nginx +++ b/mod/nginx/bbb/sip.nginx @@ -1,5 +1,5 @@ location /ws { - proxy_pass https://$freeswitch_addr:7443; + proxy_pass http://$freeswitch_addr:5066; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "Upgrade"; diff --git a/mod/recordings/Dockerfile b/mod/recordings/Dockerfile index 4f25704..5f7f5c2 100644 --- a/mod/recordings/Dockerfile +++ b/mod/recordings/Dockerfile @@ -40,7 +40,7 @@ RUN mkdir -p \ /var/log/bigbluebutton \ /var/log/bigbluebutton/presentation -ENV TAG v2.2.30 +ENV TAG v2.2.31 # add bbb-record-core (lib, scripts and Gemfile) RUN cd /usr/local/bigbluebutton/core \ @@ -73,12 +73,20 @@ RUN cd /usr/bin \ && touch /var/log/bigbluebutton/bbb-web.log # create user -# the ID should matcht the one creating the files in `core` +# the ID should match the one creating the files in `core` RUN groupadd -g 998 bigbluebutton && useradd -m -u 998 -g bigbluebutton bigbluebutton +# change owner +# https://github.com/alangecker/bigbluebutton-docker/issues/63 +RUN chown -R 998:998 /usr/local/bigbluebutton /var/log/bigbluebutton COPY bigbluebutton.yml /usr/local/bigbluebutton/core/scripts/bigbluebutton.yml.tmpl ADD log-collector.py /log-collector.py ADD entrypoint.sh /entrypoint.sh + +# change user before entrypoint +# to set user rights for all generated videos +USER bigbluebutton + ENTRYPOINT dockerize \ -template /usr/local/bigbluebutton/core/scripts/bigbluebutton.yml.tmpl:/usr/local/bigbluebutton/core/scripts/bigbluebutton.yml \ /entrypoint.sh \ No newline at end of file diff --git a/mod/recordings/bigbluebutton.yml b/mod/recordings/bigbluebutton.yml index c20328a..78c7c10 100644 --- a/mod/recordings/bigbluebutton.yml +++ b/mod/recordings/bigbluebutton.yml @@ -1,4 +1,4 @@ -bbb_version: '2.2.23' +bbb_version: '2.2.30' raw_audio_src: /var/freeswitch/meetings raw_video_src: /usr/share/red5/webapps/video/streams kurento_video_src: /var/kurento/recordings