diff --git a/README.md b/README.md index d8ef860..b0e3d9a 100644 --- a/README.md +++ b/README.md @@ -1,9 +1,9 @@ bbb-docker-banner -# 📦 BigBlueButton 2.5 Docker +# 📦 BigBlueButton 2.6 Docker -Version: 2.5.8 | [Changelog](CHANGELOG.md) | [Issues](https://github.com/bigbluebutton/docker/issues) +Version: 2.6.0 | [Changelog](CHANGELOG.md) | [Issues](https://github.com/bigbluebutton/docker/issues) ## Features - Easy installation diff --git a/docker-compose.tmpl.yml b/docker-compose.tmpl.yml index c4fa09e..e4d1409 100644 --- a/docker-compose.tmpl.yml +++ b/docker-compose.tmpl.yml @@ -53,6 +53,7 @@ services: depends_on: - redis - etherpad + - bbb-pads healthcheck: test: wget --no-proxy --no-verbose --tries=1 --spider http://10.7.7.2:8090/bigbluebutton/api || exit 1 start_period: 2m @@ -138,6 +139,7 @@ services: build: context: mod/nginx args: + BBB_BUILD_TAG: {{ .Env.BBB_BUILD_TAG }} TAG_LEARNING_DASHBOARD: {{ .Env.TAG_LEARNING_DASHBOARD }} image: alangecker/bbb-docker-nginx:1.23-{{ .Env.TAG_PLAYBACK }}-{{ .Env.TAG_LEARNING_DASHBOARD }} restart: unless-stopped @@ -333,6 +335,7 @@ services: args: BBB_BUILD_TAG: {{ .Env.BBB_BUILD_TAG }} TAG_RECORDINGS: {{ .Env.TAG_RECORDINGS }} + TAG_BBB_PRESENTATION_VIDEO: {{ .Env.TAG_BBB_PRESENTATION_VIDEO }} image: alangecker/bbb-docker-recordings:{{ .Env.TAG_RECORDINGS }} restart: unless-stopped depends_on: diff --git a/mod/bbb-pads/Dockerfile b/mod/bbb-pads/Dockerfile index 3dae047..fe63b9b 100644 --- a/mod/bbb-pads/Dockerfile +++ b/mod/bbb-pads/Dockerfile @@ -10,7 +10,7 @@ RUN chmod 777 /bbb-pads/config FROM node:16-bullseye-slim RUN apt update && apt install -y jq moreutils \ - && useradd --uid 2003 --user-group bbb-pads + && useradd --uid 2003 --create-home --user-group bbb-pads COPY --from=builder /bbb-pads /bbb-pads USER bbb-pads diff --git a/mod/bbb-pads/bbb-pads b/mod/bbb-pads/bbb-pads index 61f89b6..570921c 160000 --- a/mod/bbb-pads/bbb-pads +++ b/mod/bbb-pads/bbb-pads @@ -1 +1 @@ -Subproject commit 61f89b6202723e2bab4997a8b27fb08d01948faa +Subproject commit 570921cff678e4e627a37e781c2a33a50be521f2 diff --git a/mod/html5/Dockerfile b/mod/html5/Dockerfile index 79d0857..92ebb7c 100644 --- a/mod/html5/Dockerfile +++ b/mod/html5/Dockerfile @@ -14,6 +14,9 @@ RUN svn checkout https://github.com/bigbluebutton/bigbluebutton/tags/$TAG_HTML5/ RUN cd /app/bundle/programs/server \ && npm install --production +RUN mkdir -p /app/bundle/programs/web.browser/app/files && \ + cp /app/bundle/programs/server/npm/node_modules/@fontsource/*/files/*.woff* /app/bundle/programs/web.browser/app/files/ + RUN sed -i "s/VERSION/$TAG_HTML5/" /app/bundle/programs/web.browser/head.html \ && find /app/bundle/programs/web.browser -name '*.js' -exec gzip -k -f -9 '{}' \; \ && find /app/bundle/programs/web.browser -name '*.css' -exec gzip -k -f -9 '{}' \; \ diff --git a/mod/nginx/bbb-playback b/mod/nginx/bbb-playback index 4031c8e..2fd02ed 160000 --- a/mod/nginx/bbb-playback +++ b/mod/nginx/bbb-playback @@ -1 +1 @@ -Subproject commit 4031c8e5ff80c05cc6dec9b977c9df4a2cc51b35 +Subproject commit 2fd02ed28f9b4f423783b1ba5f43135b9548b5e1 diff --git a/mod/nginx/bbb/bbb-html5.nginx b/mod/nginx/bbb/bbb-html5.nginx index fefc7cf..9b0ab89 100644 --- a/mod/nginx/bbb/bbb-html5.nginx +++ b/mod/nginx/bbb/bbb-html5.nginx @@ -6,11 +6,12 @@ location @html5client { } location /html5client/locales { - alias /html5-static/app/locales; + alias /html5-static/app/locales; } location /html5client/compatibility { - alias /html5-static/app/compatibility; + gzip_static on; + alias /html5-static/app/compatibility; } location /html5client/resources { @@ -25,6 +26,10 @@ location /html5client/fonts { alias /html5-static/app/fonts; } +location /html5client/files { + alias /html5-static/app/files; +} + location /html5client/wasm { types { application/wasm wasm; @@ -33,8 +38,12 @@ location /html5client/wasm { alias /html5-static/app/wasm; } -location /html5client/ { +location /html5client { + gzip_static on; alias /html5-static; try_files $uri @html5client; } +location /html5client/sockjs { + try_files $uri @html5client; +} \ No newline at end of file diff --git a/mod/nginx/bbb/playback-video.nginx b/mod/nginx/bbb/playback-video.nginx new file mode 100644 index 0000000..39d0c68 --- /dev/null +++ b/mod/nginx/bbb/playback-video.nginx @@ -0,0 +1,21 @@ +# This file is part of BigBlueButton. +# +# Copyright © BigBlueButton Inc. and by respective authors. +# +# BigBlueButton is free software: you can redistribute it and/or modify it +# under the terms of the GNU Lesser General Public License as published by the +# Free Software Foundation, either version 3.0 of the License, or (at your +# option) any later version. +# +# BigBlueButton is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS +# FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more +# details. +# +# You should have received a copy of the GNU Lesser General Public License +# along with BigBlueButton. If not, see . + +location /playback/video/ { + alias /var/bigbluebutton/published/video/; + index index.html index.htm; +} diff --git a/mod/nginx/bbb/recording-screenshare.nginx b/mod/nginx/bbb/recording-screenshare.nginx new file mode 100644 index 0000000..d639110 --- /dev/null +++ b/mod/nginx/bbb/recording-screenshare.nginx @@ -0,0 +1,22 @@ +# +# BigBlueButton open source conferencing system - http://www.bigbluebutton.org/ +# +# Copyright (c) 2012 BigBlueButton Inc. and by respective authors (see below). +# +# This program is free software; you can redistribute it and/or modify it under the +# terms of the GNU Lesser General Public License as published by the Free Software +# Foundation; either version 3.0 of the License, or (at your option) any later +# version. +# +# BigBlueButton is distributed in the hope that it will be useful, but WITHOUT ANY +# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public License along +# with BigBlueButton; if not, see . +# + + location /recording/screenshare { + alias /var/bigbluebutton/published/screenshare; + index index.html index.htm; + } \ No newline at end of file diff --git a/mod/nginx/bbb/slides.nginx b/mod/nginx/bbb/slides.nginx new file mode 100644 index 0000000..1c3d170 --- /dev/null +++ b/mod/nginx/bbb/slides.nginx @@ -0,0 +1,28 @@ + +# +# BigBlueButton open source conferencing system - http://www.bigbluebutton.org/ +# +# Copyright (c) 2012 BigBlueButton Inc. and by respective authors (see below). +# +# This program is free software; you can redistribute it and/or modify it under the +# terms of the GNU Lesser General Public License as published by the Free Software +# Foundation; either version 3.0 of the License, or (at your option) any later +# version. +# +# BigBlueButton is distributed in the hope that it will be useful, but WITHOUT ANY +# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public License along +# with BigBlueButton; if not, see . +# + location /playback/slides { + root /var/bigbluebutton; + index index.html index.htm; + } + + location /slides { + root /var/bigbluebutton/published; + index index.html index.htm; + } + diff --git a/mod/nginx/bbb/web.nginx b/mod/nginx/bbb/web.nginx index c14e5bb..7e6f209 100755 --- a/mod/nginx/bbb/web.nginx +++ b/mod/nginx/bbb/web.nginx @@ -9,32 +9,16 @@ # Workaround IE refusal to set cookies in iframe add_header P3P 'CP="No P3P policy available"'; - if ($bbb_loadbalancer_node) { - add_header 'Access-Control-Allow-Origin' $bbb_loadbalancer_node always; - add_header 'Access-Control-Allow-Credentials' 'true' always; - } } location ~ "^\/bigbluebutton\/presentation\/(?[a-zA-Z0-9_-]+)/upload$" { - # Grails can't handle CORS OPTION preflight requests correctly -> lets do this in nginx - if ($request_method = 'OPTIONS') { - add_header 'Access-Control-Allow-Origin' $bbb_loadbalancer_node always; - add_header 'Access-Control-Allow-Credentials' 'true' always; - add_header 'Content-Type' 'text/plain; charset=utf-8'; - add_header 'Content-Length' 0; - return 204; - } proxy_pass http://bbb-web:8090; proxy_redirect default; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # Workaround IE refusal to set cookies in iframe add_header P3P 'CP="No P3P policy available"'; - if ($bbb_loadbalancer_node) { - add_header 'Access-Control-Allow-Origin' $bbb_loadbalancer_node always; - add_header 'Access-Control-Allow-Credentials' 'true' always; - } # high limit for presentation as bbb-web will reject upload if larger than configured client_max_body_size 1000m; @@ -73,9 +57,6 @@ proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # Workaround IE refusal to set cookies in iframe add_header P3P 'CP="No P3P policy available"'; - if ($bbb_loadbalancer_node) { - add_header 'Access-Control-Allow-Origin' $bbb_loadbalancer_node always; - } } location = /bigbluebutton/presentation/checkPresentation { @@ -87,6 +68,7 @@ proxy_set_header X-Original-URI $request_uri; proxy_set_header Content-Length ""; proxy_set_header X-Original-Content-Length $http_content_length; + proxy_set_header X-Original-Method $request_method; # high limit for presentation as bbb-web will reject upload if larger than configured client_max_body_size 1000m; @@ -109,6 +91,7 @@ proxy_set_header Content-Length ""; proxy_set_header X-Original-URI $request_uri; } + location = /bigbluebutton/connection/legacyCheckAuthorization { internal; proxy_pass http://bbb-web:8090; @@ -128,9 +111,6 @@ location ~ "^/bigbluebutton\/textTrack\/(?[a-zA-Z0-9]+)\/(?[a-zA-Z0-9_-]+)\/(?.+)$" { # Workaround IE refusal to set cookies in iframe add_header P3P 'CP="No P3P policy available"'; - if ($bbb_loadbalancer_node) { - add_header 'Access-Control-Allow-Origin' $bbb_loadbalancer_node always; - } # Allow 30M uploaded presentation document. client_max_body_size 30m; @@ -177,4 +157,4 @@ } return 403; - } \ No newline at end of file + } diff --git a/mod/nginx/bbb/webrtc-sfu.nginx b/mod/nginx/bbb/webrtc-sfu.nginx index c226485..0422486 100644 --- a/mod/nginx/bbb/webrtc-sfu.nginx +++ b/mod/nginx/bbb/webrtc-sfu.nginx @@ -5,6 +5,7 @@ location /bbb-webrtc-sfu { auth_request_set $user_id $sent_http_user_id; auth_request_set $meeting_id $sent_http_meeting_id; auth_request_set $voice_bridge $sent_http_voice_bridge; + auth_request_set $user_name $sent_http_user_name; proxy_pass http://10.7.7.1:3008; proxy_http_version 1.1; @@ -14,9 +15,11 @@ location /bbb-webrtc-sfu { proxy_set_header User-Id $user_id; proxy_set_header Meeting-Id $meeting_id; proxy_set_header Voice-Bridge $voice_bridge; - proxy_read_timeout 6h; - proxy_send_timeout 6h; - client_body_timeout 6h; - send_timeout 6h; + proxy_set_header User-Name $user_name; + + proxy_read_timeout 60s; + proxy_send_timeout 60s; + client_body_timeout 60s; + send_timeout 60s; } diff --git a/mod/recordings/Dockerfile b/mod/recordings/Dockerfile index 5403694..a69c9bd 100644 --- a/mod/recordings/Dockerfile +++ b/mod/recordings/Dockerfile @@ -16,7 +16,13 @@ RUN apt-get update && apt-get install -y \ python3-lxml \ python3-icu \ python3-pyinotify \ + python3-sortedcollections \ + python3-packaging \ gir1.2-pangocairo-1.0 \ + gir1.2-poppler-0.18 \ + gir1.2-gtk-3.0 \ + gir1.2-gdkpixbuf-2.0 \ + fonts-croscore \ ffmpeg \ poppler-utils \ imagemagick \ @@ -53,7 +59,13 @@ RUN wget -q https://github.com/mikefarah/yq/releases/download/3.4.1/yq_linux_am RUN mkdir -p \ /usr/local/bigbluebutton \ /usr/local/bigbluebutton/core \ - /etc/bigbluebutton + /etc/bigbluebutton \ + /etc/bigbluebutton/recording + +# dependency for bbb-presentation-video +RUN wget -q -O /tmp/python3-perfect-freehand.deb https://github.com/bigbluebutton/perfect-freehand-python/releases/download/1.2.0/python3-perfect-freehand_1.2.0_all.deb && \ + dpkg -i /tmp/python3-perfect-freehand.deb && \ + rm /tmp/python3-perfect-freehand.deb ARG TAG_RECORDINGS @@ -76,7 +88,11 @@ RUN cd /tmp \ RUN cd /usr/local/bigbluebutton/core \ && gem install builder \ && gem install bundler --no-document \ - && /usr/local/bin/bundle + && bundle config set --local deployment true \ + && bundle install \ + && bundle clean \ + && rm -r vendor/bundle/ruby/*/cache \ + && find vendor/bundle -name '*.o' -delete # log to file instead of journald RUN sed -i 's|Journald::Logger\.new.*|Logger.new("/var/log/bigbluebutton/recording.log")|g' /usr/local/bigbluebutton/core/lib/recordandplayback.rb && \ @@ -103,8 +119,15 @@ RUN groupadd -g 998 bigbluebutton && useradd -m -u 998 -g bigbluebutton bigblueb # https://github.com/alangecker/bigbluebutton-docker/issues/63 RUN chown -R 998:998 /usr/local/bigbluebutton +ARG TAG_BBB_PRESENTATION_VIDEO +RUN cd /tmp/ && \ + wget -q -O bbb-presentation-video.zip "https://github.com/bigbluebutton/bbb-presentation-video/releases/download/${TAG_BBB_PRESENTATION_VIDEO}/ubuntu-20.04.zip" && \ + unzip -o bbb-presentation-video.zip -d bbb-presentation-video && \ + dpkg -i bbb-presentation-video/bbb-presentation-video*.deb && \ + rm -rf /tmp/* + COPY bbb-web.properties /etc/bigbluebutton/bbb-web.properties.tmpl -COPY bigbluebutton.yml /usr/local/bigbluebutton/core/scripts/bigbluebutton.yml.tmpl +COPY recording.yml /etc/bigbluebutton/recording/recording.yml.tmpl COPY supervisord.conf /etc/supervisor/conf.d/supervisord.conf COPY entrypoint.sh /entrypoint.sh diff --git a/mod/recordings/bigbluebutton.yml b/mod/recordings/bigbluebutton.yml deleted file mode 100644 index e93228d..0000000 --- a/mod/recordings/bigbluebutton.yml +++ /dev/null @@ -1,59 +0,0 @@ -bbb_version: '2.1.0' -raw_audio_src: /var/freeswitch/meetings -raw_video_src: /usr/share/red5/webapps/video/streams -kurento_video_src: /var/kurento/recordings -kurento_screenshare_src: /var/kurento/screenshare -raw_screenshare_src: /usr/share/red5/webapps/screenshare/streams -raw_webrtc_deskshare_src: /usr/share/red5/webapps/video-broadcast/streams -raw_deskshare_src: /var/bigbluebutton/deskshare -raw_presentation_src: /var/bigbluebutton -notes_endpoint: http://bbb-pads:9002/p -# Specify the notes formats we archive -# txt, doc and odt are also supported -notes_formats: - - etherpad - - html - - pdf -redis_host: redis -redis_port: 6379 -# Uncomment and set password if redis require it. -# redis_password: changeme - -# redis_workers_host: 127.0.0.1 -# redis_workers_port: 6379 - -# Set to true to insert recording process status into -# redis list with key "store_recording_status: true". -# This is useful if you want to track progress status -# and have another script process it. -store_recording_status: false - -# Sequence of recording steps. Keys are the current step, values -# are the next step(s). Examples: -# current_step: next_step -# "current_step-format": "next_step-format" -# current_step: -# - next_step -# - another_step-format -steps: - archive: "sanity" - sanity: "captions" - captions: "process:presentation" - "process:presentation": "publish:presentation" - -# For PRODUCTION -log_dir: /var/log/bigbluebutton -events_dir: /var/bigbluebutton/events -recording_dir: /var/bigbluebutton/recording -published_dir: /var/bigbluebutton/published -captions_dir: /var/bigbluebutton/captions -playback_host: {{ .Env.DOMAIN }} -playback_protocol: https - -# For DEVELOPMENT -# This allows us to run the scripts manually -#scripts_dir: /home/ubuntu/dev/bigbluebutton/record-and-playback/core/scripts -#log_dir: /home/ubuntu/temp/log -#recording_dir: /home/ubuntu/temp/recording -#published_dir: /home/ubuntu/temp/published -#playback_host: 127.0.0.1 \ No newline at end of file diff --git a/mod/recordings/entrypoint.sh b/mod/recordings/entrypoint.sh index 7b73930..8036c7c 100755 --- a/mod/recordings/entrypoint.sh +++ b/mod/recordings/entrypoint.sh @@ -6,7 +6,9 @@ mkdir -p /var/log/bigbluebutton/presentation chown -R bigbluebutton:bigbluebutton /var/log/bigbluebutton dockerize \ - -template /usr/local/bigbluebutton/core/scripts/bigbluebutton.yml.tmpl:/usr/local/bigbluebutton/core/scripts/bigbluebutton.yml \ + -template /etc/bigbluebutton/recording/recording.yml.tmpl:/etc/bigbluebutton/recording/recording.yml \ -template /etc/bigbluebutton/bbb-web.properties.tmpl:/etc/bigbluebutton/bbb-web.properties \ -stdout /var/log/bigbluebutton/recording.log \ + -stdout /var/log/bigbluebutton/post_publish.log \ + -stdout /var/log/bigbluebutton/sanity.log \ /usr/bin/supervisord --nodaemon \ No newline at end of file diff --git a/mod/recordings/recording.yml b/mod/recordings/recording.yml new file mode 100644 index 0000000..2e79bdf --- /dev/null +++ b/mod/recordings/recording.yml @@ -0,0 +1,4 @@ +redis_host: redis +notes_endpoint: http://bbb-pads:9002/p +playback_host: {{ .Env.DOMAIN }} +playback_protocol: https diff --git a/mod/recordings/supervisord.conf b/mod/recordings/supervisord.conf index 4780d47..443be88 100644 --- a/mod/recordings/supervisord.conf +++ b/mod/recordings/supervisord.conf @@ -2,7 +2,7 @@ user=root [program:rasque_workers] -command=rake resque:workers +command=bundle exec rake -f Rakefile resque:workers directory=/usr/local/bigbluebutton/core/scripts environment=QUEUE="rap:archive,rap:publish,rap:process,rap:sanity,rap:captions,rap:events",COUNT="1",VVERBOSE="1",HOME="/home/bigbluebutton" user=bigbluebutton diff --git a/mod/webrtc-sfu/bbb-webrtc-sfu b/mod/webrtc-sfu/bbb-webrtc-sfu index e7c08cf..f74deeb 160000 --- a/mod/webrtc-sfu/bbb-webrtc-sfu +++ b/mod/webrtc-sfu/bbb-webrtc-sfu @@ -1 +1 @@ -Subproject commit e7c08cf8a7ff9ec61e16e9ff3834fe39b4df165f +Subproject commit f74deebf2fa9ef1fa96b650b9b25c5f32d1b24b5 diff --git a/scripts/generate-compose b/scripts/generate-compose index e5d29e7..077f62a 100755 --- a/scripts/generate-compose +++ b/scripts/generate-compose @@ -53,6 +53,7 @@ docker run \ -e TAG_PLAYBACK=${TAG_PLAYBACK} \ -e TAG_PADS=${TAG_PADS} \ -e TAG_FREESWITCH=${TAG_FREESWITCH} \ + -e TAG_BBB_PRESENTATION_VIDEO=${TAG_BBB_PRESENTATION_VIDEO} \ -e TAG_GREENLIGHT=${TAG_GREENLIGHT} \ -e DEV_MODE=${DEV_MODE:-false} \ -e EXTERNAL_IPv6=${EXTERNAL_IPv6:-} \ diff --git a/scripts/upgrade b/scripts/upgrade index b950c48..8ac1c35 100755 --- a/scripts/upgrade +++ b/scripts/upgrade @@ -33,6 +33,6 @@ else echo "we are on $COMMIT_HASH ($BRANCH_NAME)" echo "" echo "use following command for restarting bbb:" - echo " $ docker-compose up -d" + echo " $ docker-compose up -d --no-build" echo "-------------------------------------" fi \ No newline at end of file diff --git a/tags.env b/tags.env index 754cf66..1e777ae 100644 --- a/tags.env +++ b/tags.env @@ -7,13 +7,14 @@ BBB_BUILD_TAG=v2022-12-29-grails-524 # https://github.com/bigbluebutton/bigbluebutton -TAG_COMMON_MESSAGE=v2.5.10 -TAG_APPS_AKKA=v2.5.10 -TAG_FSESL_AKKA=v2.5.10 -TAG_BBB_WEB=v2.5.11 -TAG_HTML5=v2.5.10 -TAG_RECORDINGS=v2.5.10 +TAG_COMMON_MESSAGE=v2.6.0 +TAG_APPS_AKKA=v2.6.0 +TAG_FSESL_AKKA=v2.6.0 +TAG_BBB_WEB=v2.6.0 +TAG_HTML5=v2.6.0 +TAG_RECORDINGS=v2.6.0 +TAG_LEARNING_DASHBOARD=v2.6.0 TAG_FS_CONFIG=v2.6.0 TAG_FS_BUILD_FILES=v2.6.0 @@ -23,7 +24,8 @@ TAG_GREENLIGHT=v3.0.1 # individual git submodules # use `./scripts/checkout-submodules` to ensure, that the submodules # match the provided tags here -TAG_WEBRTC_SFU=v2.8.7 +TAG_WEBRTC_SFU=v2.9.8 TAG_WEBHOOKS=v2.6.0 -TAG_PLAYBACK=v4.0.0 -TAG_PADS=v1.4.0 \ No newline at end of file +TAG_PLAYBACK=v5.0.0-rc.2 +TAG_PADS=v1.4.1 +TAG_BBB_PRESENTATION_VIDEO=4.0.0-rc.2