applied v2.3-alpha 7 changes incl. html5 load balancing

This commit is contained in:
chandi 2021-02-24 21:50:27 +01:00
parent f5d77c5bcb
commit 3858e42f23
18 changed files with 154 additions and 81 deletions

View File

@ -19,7 +19,6 @@ you can find a **stable bbb-docker release for 2.2** here: https://github.com/al
## What does not work
- probably a lot - it's in an alpha state!
- Load balancing of html5 meteor processes
- bbb-lti
## Install

View File

@ -5,6 +5,38 @@
version: '3.6'
# html5 templates
x-html5-backend: &html5backend
build: mod/html5
image: bbb-html5
restart: unless-stopped
depends_on:
- redis
- mongodb
- etherpad
environment: &html5backend-env
DOMAIN: ${DOMAIN}
CLIENT_TITLE: ${CLIENT_TITLE}
ETHERPAD_API_KEY: ${ETHERPAD_API_KEY}
LISTEN_ONLY_MODE: ${LISTEN_ONLY_MODE:-true}
DISABLE_ECHO_TEST: ${DISABLE_ECHO_TEST:-false}
AUTO_SHARE_WEBCAM: ${AUTO_SHARE_WEBCAM:-false}
DISABLE_VIDEO_PREVIEW: ${DISABLE_VIDEO_PREVIEW:-false}
CHAT_ENABLED: ${CHAT_ENABLED:-true}
CHAT_START_CLOSED: ${CHAT_START_CLOSED:-false}
BREAKOUTROOM_LIMIT: ${BREAKOUTROOM_LIMIT:-8}
DEV_MODE: ${DEV_MODE:-}
BBB_HTML5_ROLE: backend
x-html5-frontend: &html5frontend
<<: *html5backend
volumes:
- html5-static:/html5-static:rw
environment: &html5frontend-env
<<: *html5backend-env
BBB_HTML5_ROLE: frontend
# =========================
services:
bbb-web:
build: mod/bbb-web
@ -25,6 +57,7 @@ services:
STUN_SERVER: stun:${STUN_IP}:${STUN_PORT}
TURN_SERVER: ${TURN_SERVER:-}
TURN_SECRET: ${TURN_SECRET:-}
NUMBER_OF_BACKEND_NODEJS_PROCESSES: {{ .Env.NUMBER_OF_BACKEND_NODEJS_PROCESSES }}
volumes:
- bigbluebutton:/var/bigbluebutton
- vol-freeswitch:/var/freeswitch/meetings
@ -34,6 +67,32 @@ services:
bbb-net:
ipv4_address: 10.7.7.2
{{ range $i := loop 0 (atoi .Env.NUMBER_OF_BACKEND_NODEJS_PROCESSES) }}
html5-backend-{{ add $i 1 }}:
<<: *html5backend
environment:
<<: *html5backend-env
INSTANCE_ID: {{ add $i 1 }}
PORT: {{ add 4000 $i }}
networks:
bbb-net:
ipv4_address: 10.7.7.{{ add 100 $i }}
{{end}}
{{ range $i := loop 0 (atoi .Env.NUMBER_OF_FRONTEND_NODEJS_PROCESSES) }}
html5-frontend-{{ add $i 1 }}:
<<: *html5frontend
environment:
<<: *html5frontend-env
INSTANCE_ID: {{ add $i 1 }}
PORT: {{ add 4100 $i }}
networks:
bbb-net:
ipv4_address: 10.7.7.{{ add 200 $i }}
{{end}}
freeswitch:
build: mod/freeswitch
restart: unless-stopped
@ -64,7 +123,7 @@ services:
depends_on:
- etherpad
- webrtc-sfu
- html5
- html5-backend-1
volumes:
- bigbluebutton:/var/bigbluebutton
- html5-static:/html5-static:ro
@ -155,33 +214,6 @@ services:
bbb-net:
ipv4_address: 10.7.7.10
html5:
build: mod/html5
restart: unless-stopped
depends_on:
- redis
- mongodb
- etherpad
cap_add:
- SYS_NICE
volumes:
- html5-static:/html5-static:rw
environment:
DOMAIN: ${DOMAIN}
CLIENT_TITLE: ${CLIENT_TITLE}
ETHERPAD_API_KEY: ${ETHERPAD_API_KEY}
LISTEN_ONLY_MODE: ${LISTEN_ONLY_MODE:-true}
DISABLE_ECHO_TEST: ${DISABLE_ECHO_TEST:-false}
AUTO_SHARE_WEBCAM: ${AUTO_SHARE_WEBCAM:-false}
DISABLE_VIDEO_PREVIEW: ${DISABLE_VIDEO_PREVIEW:-false}
CHAT_ENABLED: ${CHAT_ENABLED:-true}
CHAT_START_CLOSED: ${CHAT_START_CLOSED:-false}
BREAKOUTROOM_LIMIT: ${BREAKOUTROOM_LIMIT:-8}
DEV_MODE: ${DEV_MODE:-}
networks:
bbb-net:
ipv4_address: 10.7.7.11
fsesl-akka:
build: mod/fsesl-akka
depends_on:
@ -340,7 +372,7 @@ services:
{{ if isTrue .Env.ENABLE_PROMETHEUS_EXPORTER }}
# prometheus
prometheus-exporter:
image: greenstatic/bigbluebutton-exporter:v0.6.0
image: greenstatic/bigbluebutton-exporter:v0.7.0-preview2
restart: unless-stopped
environment:
API_BASE_URL: http://10.7.7.1:8080/bigbluebutton/api/

View File

@ -3,7 +3,7 @@ FROM mozilla/sbt:8u181_1.2.7 AS builder
RUN apt-get update && apt-get install -y subversion
# download bbb-common-message
ENV TAG_COMMON_MESSAGE v2.3-alpha-6
ENV TAG_COMMON_MESSAGE v2.3-alpha-7
RUN svn checkout https://github.com/bigbluebutton/bigbluebutton/tags/$TAG_COMMON_MESSAGE/bbb-common-message /bbb-common-message \
&& rm -rf /bbb-common-message/.svn
@ -14,7 +14,7 @@ RUN cd /bbb-common-message \
# ===================================================
ENV TAG v2.3-alpha-6
ENV TAG v2.3-alpha-7
RUN svn checkout https://github.com/bigbluebutton/bigbluebutton/tags/$TAG/akka-bbb-apps /source \
&& rm -rf /source/.svn

View File

@ -85,6 +85,8 @@ voiceConf {
checkRecordingInterval = 23
# Internval seconds to sync voice users status.
syncUserStatusInterval = 41
# Voice users with no matching user record
ejectRogueVoiceUsers = true
}
recording {

View File

@ -3,7 +3,7 @@ FROM mozilla/sbt:8u181_1.2.7 AS builder
RUN apt-get update && apt-get install -y subversion
# download bbb-common-message
ENV TAG_COMMON_MESSAGE v2.3-alpha-6
ENV TAG_COMMON_MESSAGE v2.3-alpha-7
RUN svn checkout https://github.com/bigbluebutton/bigbluebutton/tags/$TAG_COMMON_MESSAGE/bbb-common-message /bbb-common-message \
&& rm -rf /bbb-common-message/.svn
@ -26,7 +26,7 @@ RUN cd /opt \
ENV PATH="/opt/gradle-6.7/bin:${PATH}"
# download bbb-common-web
ENV TAG_COMMON_WEB v2.3-alpha-6
ENV TAG_COMMON_WEB v2.3-alpha-7
RUN svn checkout https://github.com/bigbluebutton/bigbluebutton/tags/$TAG_COMMON_WEB/bbb-common-web /bbb-common-web \
&& rm -rf /bbb-common-message/.svn
@ -35,7 +35,7 @@ RUN cd /bbb-common-web \
&& ./deploy.sh
# download bbb-web
ENV TAG_WEB v2.3-alpha-6
ENV TAG_WEB v2.3-alpha-7
RUN svn checkout https://github.com/bigbluebutton/bigbluebutton/tags/$TAG_WEB/bigbluebutton-web /bbb-web \
&& rm -rf /bbb-web/.svn

View File

@ -252,13 +252,13 @@ bigbluebutton.web.logoutURL=default
# The url of the BigBlueButton HTML5 client. Users will be redirected here when
# successfully joining the meeting.
defaultHTML5ClientUrl=${bigbluebutton.web.serverURL}/html5client/%%INSTANCEID%%/join
defaultHTML5ClientUrl=${bigbluebutton.web.serverURL}/html5client/join
# Allow requests without JSESSIONID to be handled (default = false)
allowRequestsWithoutSession=false
# The url for where the guest will poll if approved to join or not.
defaultGuestWaitURL=${bigbluebutton.web.serverURL}/html5client/%%INSTANCEID%%/guestWait
defaultGuestWaitURL=${bigbluebutton.web.serverURL}/html5client/guestWait
# The default avatar image to display.
useDefaultAvatar=false

View File

@ -24,6 +24,8 @@ mkdir -p /var/bigbluebutton/deleted
mkdir -p /var/bigbluebutton/unpublished
chown -R bigbluebutton:bigbluebutton /var/bigbluebutton
echo "$NUMBER_OF_BACKEND_NODEJS_PROCESSES" > /tmp/NUMBER_OF_BACKEND_NODEJS_PROCESSES
cd /usr/share/bbb-web/
dockerize \
-template /usr/share/bbb-web/WEB-INF/classes/bigbluebutton.properties.tmpl:/usr/share/bbb-web/WEB-INF/classes/bigbluebutton.properties \

View File

@ -1,3 +1,8 @@
#!/bin/bash
echo "(mocked-ps for HTML5LoadBalancingService.java)"
echo " 0.1 /usr/share/node-v12.16.1-linux-x64/bin/node main.js INFO_INSTANCE_ID=1"
# fake random process load to distribute meetings equally
for i in `seq $(cat /tmp/NUMBER_OF_BACKEND_NODEJS_PROCESSES)`; do
randomLoad=$(echo $(( $RANDOM % 100 )))
echo " $randomLoad.1 /usr/share/node-v12.16.1-linux-x64/bin/node main.js NODEJS_BACKEND_INSTANCE_ID=$i"
done

View File

@ -3,7 +3,7 @@ FROM mozilla/sbt:8u181_1.2.7 AS builder
RUN apt-get update && apt-get install -y subversion
# download bbb-common-message
ENV TAG_COMMON_MESSAGE v2.3-alpha-6
ENV TAG_COMMON_MESSAGE v2.3-alpha-7
RUN svn checkout https://github.com/bigbluebutton/bigbluebutton/tags/$TAG_COMMON_MESSAGE/bbb-common-message /bbb-common-message \
&& rm -rf /bbb-common-message/.svn
@ -13,7 +13,7 @@ RUN cd /bbb-common-message \
# ===================================================
ENV TAG_FSESL v2.3-alpha-6
ENV TAG_FSESL v2.3-alpha-7
RUN svn checkout https://github.com/bigbluebutton/bigbluebutton/tags/$TAG_FSESL/bbb-fsesl-client /bbb-fsesl-client \
&& rm -rf /bbb-fsesl-client/.svn
@ -21,7 +21,7 @@ RUN cd /bbb-fsesl-client \
&& ./deploy.sh
ENV TAG v2.3-alpha-6
ENV TAG v2.3-alpha-7
RUN svn checkout https://github.com/bigbluebutton/bigbluebutton/tags/$TAG/akka-bbb-fsesl /source \
&& rm -rf /source/.svn

View File

@ -14,13 +14,13 @@ USER meteor
ENV METEOR_VERSION 1.10.2
RUN curl -sL https://install.meteor.com?release=$METEOR_VERSION | sed s/--progress-bar/-sL/g | /bin/sh
ENV TAG v2.3-alpha-6
ENV TAG v2.3-alpha-7
RUN cd ~ \
&& svn checkout https://github.com/bigbluebutton/bigbluebutton/tags/$TAG/bigbluebutton-html5 \
&& mv ~/bigbluebutton-html5 ~/source \
&& cd ~/source \
&& ~/.meteor/meteor npm install --production \
&& ~/.meteor/meteor build --directory ~/app \
&& METEOR_DISABLE_OPTIMISTIC_CACHING=1 ~/.meteor/meteor build --directory ~/app \
&& rm -rf ~/source
RUN cd ~/app/bundle/programs/server \
@ -41,4 +41,4 @@ COPY settings.yml /app/programs/server/assets/app/config/settings.yml.tmpl
ENTRYPOINT ["/entrypoint.sh"]
# lets set the tag again, so that it is include in the image for later version retrieval
ENV TAG v2.3-alpha-6
ENV TAG v2.3-alpha-7

View File

@ -4,6 +4,7 @@ set -e
cd /app
export MONGO_OPLOG_URL=mongodb://10.7.7.6/local
export MONGO_URL=mongodb://10.7.7.6/meteor
export ROOT_URL=http://127.0.0.1/html5client
export NODE_ENV=production
export SERVER_WEBSOCKET_COMPRESSION=0
export BIND_IP=0.0.0.0
@ -17,24 +18,26 @@ 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
if [ "$BBB_HTML5_ROLE" == "backend" ]; then
PARAM=NODEJS_BACKEND_INSTANCE_ID=$INSTANCE_ID
fi
# TODO: start multiple instances (introduced with v2.3-alpha-3)
# https://github.com/bigbluebutton/bigbluebutton/releases/tag/v2.3-alpha-3
# if container is the first frontend, do some additional tasks
if [ "$BBB_HTML5_ROLE" == "frontend" ] && [ "$INSTANCE_ID" == "1" ]; then
# delete potential old settings.yml
export INSTANCE_ID=1
export ROOT_URL=http://127.0.0.1/html5client/$INSTANCE_ID
export PORT=4000
# 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
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 \
nice -n-2 \
su-exec meteor \
node --max-old-space-size=2048 --max_semi_space_size=128 main.js
su-exec meteor \
node --max-old-space-size=2048 --max_semi_space_size=128 main.js $PARAM

View File

@ -12,7 +12,7 @@ public:
appName: BigBlueButton HTML5 Client
bbbServerVersion: 2.3-dev-docker
copyright: '©2021 BigBlueButton Inc.'
html5ClientBuild: "1353-docker"
html5ClientBuild: "1394-docker"
helpLink: https://bigbluebutton.org/html5/
lockOnJoin: true
cdn: ''
@ -43,7 +43,9 @@ public:
# Warning: increasing the limit of breakout rooms per meeting
# can generate excessive overhead to the server. We recommend
# this value to be kept under 12.
breakoutRoomLimit: {{ .Env.BREAKOUTROOM_LIMIT }}
breakouts:
breakoutRoomLimit: {{ .Env.BREAKOUTROOM_LIMIT }}
sendInvitationToIncludedModerators: false
# https://github.com/bigbluebutton/bigbluebutton/pull/10826
customHeartbeat: true
defaultSettings:
@ -263,7 +265,7 @@ public:
profile: low-u30
pagination:
# whether to globally enable or disable pagination.
enabled: false
enabled: true
# how long (in ms) the negotiation will be debounced after a page change.
pageChangeDebounceTime: 2500
# video page sizes for DESKTOP endpoints. It stands for the number of SUBSCRIBER streams.
@ -271,11 +273,11 @@ public:
# A page size of 0 (zero) means that the page size is unlimited (disabled).
desktopPageSizes:
moderator: 0
viewer: 5
viewer: 0
# video page sizes for MOBILE endpoints
mobilePageSizes:
moderator: 2
viewer: 2
moderator: 6
viewer: 4
syncUsersWithConnectionManager:
enabled: false
syncInterval: 60000
@ -314,6 +316,7 @@ public:
storage_key: UNREAD_CHATS
system_messages_keys:
chat_clear: PUBLIC_CHAT_CLEAR
chat_poll_result: PUBLIC_CHAT_POLL_RESULT
typingIndicator:
enabled: true
note:
@ -328,6 +331,7 @@ public:
layout:
autoSwapLayout: false
hidePresentation: false
showParticipantsOnLogin: true
webcamsDefaultPlacement: 'top'
media:
stunTurnServersFetchAddress: '/bigbluebutton/api/stuns'
@ -553,7 +557,7 @@ private:
toThirdParty: to-third-party-redis-channel
subscribeTo:
- to-html5-redis-channel
- from-akka-apps-*
- from-akka-apps-[^f]*
- from-third-party-redis-channel
- from-etherpad-redis-channel
async:
@ -599,3 +603,4 @@ private:
version: 10
- browser: YandexBrowser
version: 19

View File

@ -1,26 +1,26 @@
location @html5client {
proxy_pass http://html5:4000;
proxy_pass http://poolhtml5servers; # use for production
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "Upgrade";
}
location /html5client/1/compatibility {
alias /html5-static/app/compatibility;
rewrite ^/html5client/(fonts|compatibility|resources|svgs)/(.*) /html5client/$1/$2;
location /html5client/compatibility {
alias /html5-static/app/compatibility;
}
location /html5client/1/fonts {
alias /html5-static/app/fonts;
}
location /html5client/1/resources {
location /html5client/resources {
alias /html5-static/app/resources;
}
location /html5client/1/svgs {
location /html5client/svgs {
alias /html5-static/app/svgs;
}
location /html5client/1 {
alias /html5-static;
try_files $uri @html5client;
location /html5client/fonts {
alias /html5-static/app/fonts;
}
location /html5client/ {
@ -28,6 +28,3 @@ location /html5client/ {
try_files $uri @html5client;
}
location /_timesync {
proxy_pass http://html5:4000;
}

View File

@ -3,6 +3,19 @@ map $remote_addr $freeswitch_addr {
default 10.7.7.1;
}
upstream poolhtml5servers {
zone poolhtml5servers 32k;
least_conn;
server 10.7.7.200:4100 fail_timeout=3s fail_timeout=10s max_fails=4 backup;
server 10.7.7.201:4101 fail_timeout=2s fail_timeout=60s max_fails=2;
server 10.7.7.202:4102 fail_timeout=2s fail_timeout=60s max_fails=2;
server 10.7.7.203:4103 fail_timeout=2s fail_timeout=60s max_fails=2;
server 10.7.7.204:4104 fail_timeout=2s fail_timeout=60s max_fails=2;
server 10.7.7.205:4105 fail_timeout=2s fail_timeout=60s max_fails=2;
server 10.7.7.206:4106 fail_timeout=2s fail_timeout=60s max_fails=2;
server 10.7.7.207:4107 fail_timeout=2s fail_timeout=60s max_fails=2;
}
server {
listen 8080 default_server;
listen [::]:8080 default_server;

View File

@ -1,5 +1,5 @@
FROM ruby:2.4-slim-buster
FROM ruby:2.5-slim-buster
# install apt dependencies
RUN apt-get update && apt-get install -y \
@ -39,7 +39,7 @@ RUN mkdir -p \
/usr/local/bigbluebutton/core \
/etc/bigbluebutton
ENV TAG v2.3-alpha-6
ENV TAG v2.3-alpha-7
# add bbb-record-core (lib, scripts and Gemfile)
RUN cd /usr/local/bigbluebutton/core \

View File

@ -13,7 +13,7 @@ RUN wget https://github.com/jwilder/dockerize/releases/download/$DOCKERIZE_VERSI
USER webhooks
ENV TAG v2.3-alpha-6
ENV TAG v2.3-alpha-7
RUN svn checkout https://github.com/bigbluebutton/bigbluebutton/tags/$TAG/bbb-webhooks /app \
&& rm -rf /app/.svn \
&& cd /app && npm install --production

View File

@ -137,6 +137,19 @@ DISABLE_SOUND_ALONE=false
# this value to be kept under 12.
BREAKOUTROOM_LIMIT=8
# ====================================
# Tuning
# ====================================
# Default = 1; Min = 1; Max = 4
# On powerful systems with high number of meetings you can set values up to 4 to accelerate handling of events
NUMBER_OF_BACKEND_NODEJS_PROCESSES=1
# Default = 1; Min = 1; Max = 8
# Set a number between 1 and 4 times the value of NUMBER_OF_BACKEND_NODEJS_PROCESSES where higher number helps with meetings
# stretching the recommended number of users in BigBlueButton
NUMBER_OF_FRONTEND_NODEJS_PROCESSES=1
# ====================================
# GREENLIGHT CONFIGURATION
# ====================================

View File

@ -45,5 +45,7 @@ docker run \
-e ENABLE_COTURN=${ENABLE_COTURN:-false} \
-e ENABLE_GREENLIGHT=${ENABLE_GREENLIGHT:-false} \
-e ENABLE_PROMETHEUS_EXPORTER=${ENABLE_PROMETHEUS_EXPORTER:-false} \
-e NUMBER_OF_BACKEND_NODEJS_PROCESSES=${NUMBER_OF_BACKEND_NODEJS_PROCESSES:-1} \
-e NUMBER_OF_FRONTEND_NODEJS_PROCESSES=${NUMBER_OF_FRONTEND_NODEJS_PROCESSES:-1} \
jwilder/dockerize -template /docker-compose.tmpl.yml \
> docker-compose.yml