forked from extern/docker
commit
9ef0c0750c
@ -1 +1 @@
|
||||
Subproject commit 400fe636e63563437fb112c2df0261d6be9f103e
|
||||
Subproject commit 8dfb34d808b4648873340877904500629ba55dc6
|
@ -6,6 +6,7 @@
|
||||
<param name="proxy" value="sipgate.de"/>
|
||||
<param name="username" value="USERNAME"/>
|
||||
<param name="password" value="PASSWORD"/>
|
||||
<param name="extension" value="EXTERNALDID"/>
|
||||
</gateway>
|
||||
</include>
|
||||
-->
|
||||
|
@ -2,7 +2,6 @@ version: '3.6'
|
||||
|
||||
services:
|
||||
greenlight:
|
||||
container_name: greenlight
|
||||
image: bigbluebutton/greenlight:v2
|
||||
restart: unless-stopped
|
||||
env_file: .env
|
||||
@ -25,4 +24,4 @@ services:
|
||||
POSTGRES_USER: postgres
|
||||
POSTGRES_PASSWORD: password
|
||||
volumes:
|
||||
- ./postgres-data:/var/lib/postgresql/data
|
||||
- ./postgres-data:/var/lib/postgresql/data
|
||||
|
15
docker-compose.recordings.yml
Normal file
15
docker-compose.recordings.yml
Normal file
@ -0,0 +1,15 @@
|
||||
version: '3.6'
|
||||
services:
|
||||
recordings:
|
||||
build: mod/recordings
|
||||
depends_on:
|
||||
- redis
|
||||
environment:
|
||||
DOMAIN: ${DOMAIN}
|
||||
volumes:
|
||||
- bigbluebutton:/var/bigbluebutton
|
||||
- vol-freeswitch:/var/freeswitch/meetings
|
||||
- vol-kurento:/var/kurento
|
||||
networks:
|
||||
bbb-net:
|
||||
ipv4_address: 10.7.7.16
|
@ -6,8 +6,8 @@ services:
|
||||
environment:
|
||||
DOMAIN: ${DOMAIN}
|
||||
SHARED_SECRET: ${SHARED_SECRET}
|
||||
extra_hosts:
|
||||
- "redis:10.7.7.5"
|
||||
depends_on:
|
||||
- redis
|
||||
networks:
|
||||
bbb-net:
|
||||
ipv4_address: 10.7.7.15
|
@ -9,6 +9,7 @@ services:
|
||||
environment:
|
||||
DEV_MODE: ${DEV_MODE:-}
|
||||
DOMAIN: ${DOMAIN}
|
||||
ENABLE_RECORDING: ${ENABLE_RECORDING:-false}
|
||||
SHARED_SECRET: ${SHARED_SECRET}
|
||||
WELCOME_MESSAGE: ${WELCOME_MESSAGE:-}
|
||||
WELCOME_FOOTER: ${WELCOME_FOOTER}
|
||||
@ -17,6 +18,8 @@ services:
|
||||
TURN_SECRET: ${TURN_SECRET:-}
|
||||
volumes:
|
||||
- bigbluebutton:/var/bigbluebutton
|
||||
- vol-freeswitch:/var/freeswitch/meetings
|
||||
- vol-kurento:/var/kurento
|
||||
networks:
|
||||
bbb-net:
|
||||
ipv4_address: 10.7.7.2
|
||||
@ -41,10 +44,11 @@ services:
|
||||
volumes:
|
||||
- ./conf/sip_profiles:/etc/freeswitch/sip_profiles/external
|
||||
- ./conf/dialplan_public:/etc/freeswitch/dialplan/public_docker
|
||||
- vol-freeswitch:/var/freeswitch/meetings
|
||||
network_mode: host
|
||||
|
||||
nginx:
|
||||
image: nginx:1.19-alpine
|
||||
build: mod/nginx
|
||||
restart: unless-stopped
|
||||
depends_on:
|
||||
- etherpad
|
||||
@ -54,8 +58,6 @@ services:
|
||||
- "8080:80"
|
||||
volumes:
|
||||
- bigbluebutton:/var/bigbluebutton
|
||||
- ./mod/nginx/bbb:/etc/nginx/bbb
|
||||
- ./mod/nginx/bigbluebutton:/etc/nginx/conf.d/default.conf
|
||||
- ${DEFAULT_PRESENTATION:-/dev/null}:/etc/nginx/html/default.pdf
|
||||
network_mode: host
|
||||
extra_hosts:
|
||||
@ -79,8 +81,6 @@ services:
|
||||
redis:
|
||||
image: redis:6.0-alpine
|
||||
restart: unless-stopped
|
||||
ports:
|
||||
- "127.0.0.1:6379:6379" # TODO: remove as soon as we updated all redis host references
|
||||
networks:
|
||||
bbb-net:
|
||||
ipv4_address: 10.7.7.5
|
||||
@ -103,6 +103,8 @@ services:
|
||||
KMS_TURN_URL:
|
||||
KMS_NETWORK_INTERFACES: ${NETWORK_INTERFACE:-}
|
||||
network_mode: host
|
||||
volumes:
|
||||
- vol-kurento:/var/kurento
|
||||
|
||||
webrtc-sfu:
|
||||
build:
|
||||
@ -167,6 +169,8 @@ services:
|
||||
|
||||
volumes:
|
||||
bigbluebutton:
|
||||
vol-freeswitch:
|
||||
vol-kurento:
|
||||
|
||||
networks:
|
||||
bbb-net:
|
||||
|
@ -4,7 +4,6 @@ MAINTAINER ffdixon@bigbluebutton.org
|
||||
# TODO:
|
||||
# - separate bbb-apps into an own container
|
||||
# - separate bbb-web
|
||||
# - remove systemd
|
||||
|
||||
ENV DEBIAN_FRONTEND noninteractive
|
||||
ENV container docker
|
||||
@ -45,7 +44,7 @@ RUN apt-get update && apt-get install -y bbb-web \
|
||||
bbb-fsesl-akka bbb-apps-akka bbb-transcode-akka bbb-apps \
|
||||
bbb-apps-video bbb-apps-screenshare bbb-apps-video-broadcast
|
||||
|
||||
# -- avoid blocking java
|
||||
# -- avoid blocking java
|
||||
# https://github.com/bigbluebutton/bigbluebutton/issues/8959
|
||||
RUN sed -i 's|securerandom.source=file:/dev/random|securerandom.source=file:/dev/urandom|g' /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/security/java.security
|
||||
|
||||
@ -69,8 +68,6 @@ COPY red5-webapps/screenshare/application.conf /usr/share/red5/webapps/screensha
|
||||
COPY red5-webapps/video/bigbluebutton-video.properties /usr/share/red5/webapps/video/WEB-INF/bigbluebutton-video.properties
|
||||
COPY red5-webapps/video-broadcast/video-broadcast.properties /usr/share/red5/webapps/video-broadcast/WEB-INF/video-broadcast.properties
|
||||
|
||||
COPY bigbluebutton.yml /usr/local/bigbluebutton/core/scripts/bigbluebutton.yml
|
||||
|
||||
COPY web/bigbluebutton.properties /usr/share/bbb-web/WEB-INF/classes/bigbluebutton.properties.tmpl
|
||||
COPY web/turn-stun-servers.xml /usr/share/bbb-web/WEB-INF/classes/spring/turn-stun-servers.xml.tmpl
|
||||
|
||||
@ -79,6 +76,10 @@ COPY bbb-fsesl-akka/application.conf /etc/bbb-fsesl-akka/application.conf
|
||||
COPY bbb-transcode-akka/application.conf /etc/bbb-transcode-akka/application.conf
|
||||
COPY web-run.sh /usr/share/bbb-web/run-prod.sh
|
||||
|
||||
# add default presentation thumbnail
|
||||
RUN mkdir -p /usr/share/bigbluebutton/blank \
|
||||
&& wget -O /usr/share/bigbluebutton/blank/blank-thumb.png https://raw.githubusercontent.com/bigbluebutton/bigbluebutton/v2.2.20/bigbluebutton-config/slides/blank-thumb.png
|
||||
|
||||
COPY supervisord.conf /etc/supervisor/conf.d/supervisord.conf
|
||||
COPY entrypoint.sh /entrypoint.sh
|
||||
|
||||
@ -87,4 +88,3 @@ RUN mkdir -p /var/log/supervisor
|
||||
|
||||
ENTRYPOINT ["/entrypoint.sh"]
|
||||
CMD []
|
||||
|
||||
|
@ -3,16 +3,27 @@
|
||||
export LANG=en_US.UTF-8
|
||||
|
||||
# generate bbb folders
|
||||
mkdir -p /var/bigbluebutton/events
|
||||
mkdir -p /var/bigbluebutton/captions
|
||||
mkdir -p /var/bigbluebutton/captions/inbox
|
||||
mkdir -p /var/bigbluebutton/basic_stats
|
||||
mkdir -p /var/bigbluebutton/recording/raw
|
||||
mkdir -p /var/bigbluebutton/recording/process
|
||||
mkdir -p /var/bigbluebutton/recording/publish
|
||||
mkdir -p /var/bigbluebutton/recording/publish/presentation
|
||||
mkdir -p /var/bigbluebutton/recording/status
|
||||
mkdir -p /var/bigbluebutton/recording/status/recorded
|
||||
mkdir -p /var/bigbluebutton/recording/status/archived
|
||||
mkdir -p /var/bigbluebutton/recording/status/processed
|
||||
mkdir -p /var/bigbluebutton/recording/status/sanity
|
||||
mkdir -p /var/bigbluebutton/published
|
||||
mkdir -p /var/bigbluebutton/published/presentation
|
||||
mkdir -p /var/bigbluebutton/deleted
|
||||
mkdir -p /var/bigbluebutton/unpublished
|
||||
mkdir -p /var/bigbluebutton/playback
|
||||
|
||||
# add playback-presentation to /var/bigbluebutton volume
|
||||
cp -r /usr/src/bbb-src-playback/* /var/bigbluebutton/playback
|
||||
|
||||
# -- fix directory permissions
|
||||
chown -R bigbluebutton:bigbluebutton /var/bigbluebutton
|
||||
|
@ -41,6 +41,4 @@ directory=/usr/share/bbb-transcode-akka
|
||||
stdout_logfile=/dev/fd/1
|
||||
stdout_logfile_maxbytes=0
|
||||
stderr_logfile=/dev/fd/2
|
||||
stderr_logfile_maxbytes=0
|
||||
|
||||
|
||||
stderr_logfile_maxbytes=0
|
@ -19,7 +19,7 @@
|
||||
#
|
||||
# These are the default properites for BigBlueButton Web application
|
||||
|
||||
# Default loglevel.
|
||||
# Default loglevel.
|
||||
appLogLevel=DEBUG
|
||||
|
||||
#----------------------------------------------------
|
||||
@ -189,18 +189,22 @@ userInactivityThresholdInMinutes=30
|
||||
# warning before being logged out.
|
||||
userActivitySignResponseDelayInMinutes=5
|
||||
|
||||
# Disable recording by default.
|
||||
# Disable recording by default.
|
||||
# true - don't record even if record param in the api call is set to record
|
||||
# false - when record param is passed from api, override this default
|
||||
{{ if isTrue .Env.ENABLE_RECORDING }}
|
||||
disableRecordingDefault=false
|
||||
{{ else }}
|
||||
disableRecordingDefault=true
|
||||
{{ end }}
|
||||
|
||||
# Start recording when first user joins the meeting.
|
||||
# For backward compatibility with 0.81 where whole meeting
|
||||
# is recorded.
|
||||
# is recorded.
|
||||
autoStartRecording=false
|
||||
|
||||
# Allow the user to start/stop recording.
|
||||
allowStartStopRecording=false
|
||||
allowStartStopRecording=true
|
||||
|
||||
# Allow webcams streaming reception only to and from moderators
|
||||
webcamsOnlyForModerator=false
|
||||
|
@ -310,7 +310,12 @@
|
||||
* instead of the reverse proxy's IP.
|
||||
*/
|
||||
"trustProxy": true,
|
||||
|
||||
|
||||
/*
|
||||
* When embedding the pads in an iframe set this to true.
|
||||
*/
|
||||
"forceSameSiteNone": false,
|
||||
|
||||
/*
|
||||
* Privacy: disable IP logging
|
||||
*/
|
||||
|
@ -75,6 +75,16 @@ RUN cd /etc \
|
||||
&& svn checkout https://github.com/alangecker/bbb-packages/tags/$GIT_TAG/bbb-freeswitch-core/data/opt/freeswitch/etc/freeswitch \
|
||||
&& rm -rf /etc/freeswitch/.svn
|
||||
|
||||
# the current available freeswitch-mod-opusfile is broken,
|
||||
# it can't write any .opus files.
|
||||
# there is already a fix, but it is not included yet.
|
||||
# https://github.com/signalwire/freeswitch/pull/719/files
|
||||
# we rather switch to the binary built by bigbluebutton and add its dependencies
|
||||
RUN wget -O /usr/lib/freeswitch/mod/mod_opusfile.so https://github.com/bbb-pkg/bbb-freeswitch-core/raw/43f3a47af1fcf5ea559e16bb28b900c925a7f2c3/opt/freeswitch/lib/freeswitch/mod/mod_opusfile.so \
|
||||
&& wget -O /tmp/libopusenc0_0.2.1-1bbb1_amd64.deb https://launchpad.net/~bigbluebutton/+archive/ubuntu/support/+files/libopusenc0_0.2.1-1bbb1_amd64.deb \
|
||||
&& dpkg -i /tmp/libopusenc0_0.2.1-1bbb1_amd64.deb \
|
||||
&& rm /tmp/libopusenc0_0.2.1-1bbb1_amd64.deb
|
||||
|
||||
# add modifications
|
||||
COPY ./conf /etc/freeswitch/
|
||||
|
||||
|
@ -15,6 +15,9 @@ for IP in "${ADDR[@]}"; do
|
||||
iptables -I INPUT -p udp --dport 5060 -s $IP -j ACCEPT
|
||||
done
|
||||
|
||||
chown -R freeswitch:daemon /var/freeswitch/meetings
|
||||
chmod 777 /var/freeswitch/meetings
|
||||
|
||||
dockerize \
|
||||
-template /etc/freeswitch/vars.xml.tmpl:/etc/freeswitch/vars.xml \
|
||||
-template /etc/freeswitch/autoload_configs/conference.conf.xml.tmpl:/etc/freeswitch/autoload_configs/conference.conf.xml \
|
||||
|
@ -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.22
|
||||
ENV TAG v2.2.23
|
||||
RUN cd ~ \
|
||||
&& svn checkout https://github.com/bigbluebutton/bigbluebutton/tags/$TAG/bigbluebutton-html5 \
|
||||
&& mv ~/bigbluebutton-html5 ~/source \
|
||||
@ -51,4 +51,4 @@ USER meteor
|
||||
ENTRYPOINT ["/entrypoint.sh"]
|
||||
|
||||
# lets set the tag again, so that it is include in the image for later version retrieval
|
||||
ENV TAG v2.2.22
|
||||
ENV TAG v2.2.23
|
||||
|
@ -11,7 +11,7 @@ public:
|
||||
appName: BigBlueButton HTML5 Client
|
||||
bbbServerVersion: 2.2
|
||||
copyright: "©2020 BigBlueButton Inc."
|
||||
html5ClientBuild: 992
|
||||
html5ClientBuild: 1006
|
||||
helpLink: https://bigbluebutton.org/html5/
|
||||
lockOnJoin: true
|
||||
cdn: ""
|
||||
@ -160,15 +160,15 @@ public:
|
||||
constraints:
|
||||
frameRate: 10
|
||||
- id: low
|
||||
name: Low quality
|
||||
name: Low
|
||||
default: false
|
||||
bitrate: 100
|
||||
- id: medium
|
||||
name: Medium quality
|
||||
name: Medium
|
||||
default: true
|
||||
bitrate: 200
|
||||
- id: high
|
||||
name: High quality
|
||||
name: High
|
||||
default: false
|
||||
bitrate: 500
|
||||
- id: hd
|
||||
@ -200,11 +200,26 @@ public:
|
||||
profile: low-u25
|
||||
- threshold: 30
|
||||
profile: low-u30
|
||||
pagination:
|
||||
# whether to globally enable or disable pagination.
|
||||
enabled: false
|
||||
# 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.
|
||||
# PUBLISHERS aren't accounted for .
|
||||
# A page size of 0 (zero) means that the page size is unlimited (disabled).
|
||||
desktopPageSizes:
|
||||
moderator: 0
|
||||
viewer: 5
|
||||
# video page sizes for MOBILE endpoints
|
||||
mobilePageSizes:
|
||||
moderator: 2
|
||||
viewer: 2
|
||||
pingPong:
|
||||
clearUsersInSeconds: 180
|
||||
pongTimeInSeconds: 15
|
||||
allowOutsideCommands:
|
||||
toggleRecording: false
|
||||
toggleRecording: true
|
||||
toggleSelfVoice: false
|
||||
poll:
|
||||
enabled: true
|
||||
|
14
mod/nginx/Dockerfile
Normal file
14
mod/nginx/Dockerfile
Normal file
@ -0,0 +1,14 @@
|
||||
FROM nginx:1.19-alpine
|
||||
|
||||
RUN apk add subversion
|
||||
|
||||
ENV TAG v2.2.20
|
||||
|
||||
# get bbb-playback-presentation web files
|
||||
RUN mkdir /www \
|
||||
&& cd /www \
|
||||
&& svn checkout https://github.com/bigbluebutton/bigbluebutton/tags/$TAG/record-and-playback/presentation/playback/presentation/ \
|
||||
&& rm -rf /www/presentation/.svn /www/presentation/0.*
|
||||
|
||||
COPY ./bbb /etc/nginx/bbb
|
||||
COPY ./bigbluebutton /etc/nginx/conf.d/default.conf
|
@ -16,18 +16,8 @@
|
||||
# with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
|
||||
#
|
||||
|
||||
location /playback/presentation/playback.html {
|
||||
return 301 /playback/presentation/0.81/playback.html?$query_string;
|
||||
# If you have recordings from 0.9.0 beta versions and are sure
|
||||
# that you will never want to play recordings made with
|
||||
# BigBlueButton 0.81, comment the line above and uncomment the
|
||||
# following line:
|
||||
#return 301 /playback/presentation/0.9.0/playback.html?$query_string;
|
||||
}
|
||||
|
||||
location /playback/presentation {
|
||||
root /var/bigbluebutton;
|
||||
index index.html index.htm;
|
||||
alias /www/presentation;
|
||||
}
|
||||
|
||||
location /presentation {
|
||||
|
84
mod/recordings/Dockerfile
Normal file
84
mod/recordings/Dockerfile
Normal file
@ -0,0 +1,84 @@
|
||||
|
||||
FROM ruby:2.4-slim-buster
|
||||
|
||||
# install apt dependencies
|
||||
RUN apt-get update && apt-get install -y \
|
||||
wget \
|
||||
subversion \
|
||||
rsync \
|
||||
build-essential \
|
||||
libsystemd-dev \
|
||||
python3 \
|
||||
python3-pyinotify \
|
||||
python3-lxml \
|
||||
python3-icu \
|
||||
ffmpeg \
|
||||
poppler-utils \
|
||||
imagemagick
|
||||
|
||||
# compile and install mkclean
|
||||
RUN cd /tmp \
|
||||
&& wget https://netcologne.dl.sourceforge.net/project/matroska/mkclean/mkclean-0.8.10.tar.bz2 \
|
||||
&& tar -xf /tmp/mkclean-0.8.10.tar.bz2 \
|
||||
&& cd /tmp/mkclean-0.8.10 \
|
||||
&& sed -i 's/\r//g' ./mkclean/configure.compiled \
|
||||
&& ./mkclean/configure.compiled \
|
||||
&& make -C mkclean \
|
||||
&& cp ./release/gcc_linux_x64/mkclean /usr/bin/mkclean \
|
||||
&& rm -r /tmp/mkclean-0.8.10
|
||||
|
||||
# add dockerize
|
||||
ENV DOCKERIZE_VERSION v0.6.1
|
||||
RUN wget https://github.com/jwilder/dockerize/releases/download/$DOCKERIZE_VERSION/dockerize-linux-amd64-$DOCKERIZE_VERSION.tar.gz \
|
||||
&& tar -C /usr/local/bin -xzvf dockerize-linux-amd64-$DOCKERIZE_VERSION.tar.gz \
|
||||
&& rm dockerize-linux-amd64-$DOCKERIZE_VERSION.tar.gz
|
||||
|
||||
RUN mkdir -p \
|
||||
/usr/local/bigbluebutton \
|
||||
/usr/local/bigbluebutton/core \
|
||||
/etc/bigbluebutton \
|
||||
/var/log/bigbluebutton \
|
||||
/var/log/bigbluebutton/presentation
|
||||
|
||||
ENV TAG v2.2.23
|
||||
|
||||
# add bbb-record-core (lib, scripts and Gemfile)
|
||||
RUN cd /usr/local/bigbluebutton/core \
|
||||
&& svn checkout https://github.com/bigbluebutton/bigbluebutton/tags/$TAG/record-and-playback/core/lib \
|
||||
&& svn checkout https://github.com/bigbluebutton/bigbluebutton/tags/$TAG/record-and-playback/core/scripts \
|
||||
&& rm -rf /usr/local/bigbluebutton/core/*/.svn \
|
||||
&& wget https://raw.githubusercontent.com/bigbluebutton/bigbluebutton/$TAG/record-and-playback/core/Gemfile.lock \
|
||||
&& wget https://raw.githubusercontent.com/bigbluebutton/bigbluebutton/$TAG/record-and-playback/core/Gemfile
|
||||
|
||||
|
||||
# add bbb-playback-presentation scripts
|
||||
RUN cd /tmp \
|
||||
&& svn checkout https://github.com/bigbluebutton/bigbluebutton/tags/$TAG/record-and-playback/presentation/scripts \
|
||||
&& rsync -av /tmp/scripts/ /usr/local/bigbluebutton/core/scripts/ \
|
||||
&& rm -rf /tmp/scripts
|
||||
|
||||
# install ruby dependencies
|
||||
RUN cd /usr/local/bigbluebutton/core \
|
||||
&& gem install builder \
|
||||
&& gem install bundler \
|
||||
&& /usr/local/bin/bundle
|
||||
|
||||
# add bbb-record with some adjustments so bbb-record works in this environment
|
||||
RUN cd /usr/bin \
|
||||
&& wget https://raw.githubusercontent.com/bigbluebutton/bigbluebutton/$TAG/bigbluebutton-config/bin/bbb-record \
|
||||
&& chmod +x /usr/bin/bbb-record \
|
||||
&& sed -i 's/^BBB_WEB.*/BBB_WEB=""/' /usr/bin/bbb-record \
|
||||
&& sed -i 's/systemctl.*//' /usr/bin/bbb-record \
|
||||
&& echo "BIGBLUEBUTTON_RELEASE=$TAG" > /etc/bigbluebutton/bigbluebutton-release \
|
||||
&& touch /var/log/bigbluebutton/bbb-web.log
|
||||
|
||||
# create user
|
||||
# the ID should matcht the one creating the files in `core`
|
||||
RUN groupadd -g 998 bigbluebutton && useradd -m -u 998 -g bigbluebutton bigbluebutton
|
||||
|
||||
COPY bigbluebutton.yml /usr/local/bigbluebutton/core/scripts/bigbluebutton.yml.tmpl
|
||||
ADD log-collector.py /log-collector.py
|
||||
ADD entrypoint.sh /entrypoint.sh
|
||||
ENTRYPOINT dockerize \
|
||||
-template /usr/local/bigbluebutton/core/scripts/bigbluebutton.yml.tmpl:/usr/local/bigbluebutton/core/scripts/bigbluebutton.yml \
|
||||
/entrypoint.sh
|
@ -1,4 +1,4 @@
|
||||
bbb_version: '2.1.0'
|
||||
bbb_version: '2.2.23'
|
||||
raw_audio_src: /var/freeswitch/meetings
|
||||
raw_video_src: /usr/share/red5/webapps/video/streams
|
||||
kurento_video_src: /var/kurento/recordings
|
||||
@ -7,7 +7,7 @@ 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://localhost:9001/p
|
||||
notes_endpoint: http://etherpad:9001/p
|
||||
# Specify the notes formats we archive
|
||||
# txt, doc and odt are also supported
|
||||
notes_formats:
|
||||
@ -25,7 +25,7 @@ events_dir: /var/bigbluebutton/events
|
||||
recording_dir: /var/bigbluebutton/recording
|
||||
published_dir: /var/bigbluebutton/published
|
||||
captions_dir: /var/bigbluebutton/captions
|
||||
playback_host: meet.livingutopia.org
|
||||
playback_host: {{ .Env.DOMAIN }}
|
||||
playback_protocol: https
|
||||
|
||||
# For DEVELOPMENT
|
27
mod/recordings/entrypoint.sh
Normal file
27
mod/recordings/entrypoint.sh
Normal file
@ -0,0 +1,27 @@
|
||||
#!/bin/bash
|
||||
|
||||
# print all logs to stdout
|
||||
python3 -u /log-collector.py &
|
||||
|
||||
cd /usr/local/bigbluebutton/core/scripts
|
||||
PATH_CHECK="/var/bigbluebutton/recording/status"
|
||||
while true; do
|
||||
echo "execute workers..."
|
||||
if [[ $(compgen -G "$PATH_CHECK/recorded/*.done") ]];then
|
||||
bundle exec ruby rap-archive-worker.rb
|
||||
fi
|
||||
if [[ $(compgen -G "$PATH_CHECK/archived/*.done") ]];then
|
||||
bundle exec ruby rap-sanity-worker.rb
|
||||
fi
|
||||
if [[ $(compgen -G "$PATH_CHECK/sanity/*.done") ]];then
|
||||
bundle exec ruby rap-process-worker.rb
|
||||
fi
|
||||
if [[ $(compgen -G "$PATH_CHECK/processed/*.done") ]];then
|
||||
bundle exec ruby rap-publish-worker.rb
|
||||
fi
|
||||
#bundle exec ruby rap-caption-inbox.rb
|
||||
if [[ $(compgen -G "$PATH_CHECK/ended/*.done") ]];then
|
||||
bundle exec ruby rap-events-worker.rb
|
||||
fi
|
||||
sleep 30s
|
||||
done
|
45
mod/recordings/log-collector.py
Normal file
45
mod/recordings/log-collector.py
Normal file
@ -0,0 +1,45 @@
|
||||
# this script sends all entries from different logfiles
|
||||
# to stdout, so that they appear in the docker logs
|
||||
|
||||
import threading
|
||||
import subprocess
|
||||
import time
|
||||
import pyinotify
|
||||
import os
|
||||
import re
|
||||
import sys
|
||||
|
||||
log_dir = '/var/log/bigbluebutton'
|
||||
|
||||
def thread_function(name, filename):
|
||||
f = subprocess.Popen(['tail','-F', '-n', '0', filename],\
|
||||
stdout=subprocess.PIPE,stderr=subprocess.PIPE)
|
||||
while True:
|
||||
line = f.stdout.readline().decode('utf-8').strip()
|
||||
if len(line):
|
||||
print(name.ljust(10)+' |', line)
|
||||
sys.stdout.flush()
|
||||
|
||||
def tail_file(name, filename):
|
||||
x = threading.Thread(target=thread_function, args=(name, filename,))
|
||||
x.start()
|
||||
|
||||
|
||||
tail_file('rap-worker', log_dir+'/bbb-rap-worker.log')
|
||||
tail_file('sanity', log_dir+'/sanity.log')
|
||||
tail_file('publish', log_dir+'/post_publish.log')
|
||||
|
||||
class EventHandler(pyinotify.ProcessEvent):
|
||||
def process_IN_CREATE(self, event):
|
||||
filename = os.path.basename(event.pathname)
|
||||
if re.match('^archive-.*\.log$', filename):
|
||||
tail_file('archive', event.pathname)
|
||||
elif re.match('^process-.*\.log$', filename):
|
||||
tail_file('process', event.pathname)
|
||||
|
||||
|
||||
wm = pyinotify.WatchManager()
|
||||
handler = EventHandler()
|
||||
notifier = pyinotify.Notifier(wm, handler)
|
||||
wdd = wm.add_watch(log_dir, pyinotify.IN_CREATE, rec=True)
|
||||
notifier.loop()
|
@ -24,6 +24,14 @@ ENABLE_GREENLIGHT=true
|
||||
# https://yourdomain/bbb-exporter
|
||||
#ENABLE_PROMETHEUS_EXPORTER=true
|
||||
|
||||
# Recording
|
||||
# IMPORTANT: this is currently a big privacy issues, because it will
|
||||
# record everything which happens in the conference, even when the button
|
||||
# suggets, that it does not.
|
||||
# https://github.com/bigbluebutton/bigbluebutton/issues/9202
|
||||
# make sure that you get peoples consent, before they join a room
|
||||
#ENABLE_RECORDING=true
|
||||
|
||||
# ====================================
|
||||
# SECRETS
|
||||
# ====================================
|
||||
|
20
scripts/bbb-record
Executable file
20
scripts/bbb-record
Executable file
@ -0,0 +1,20 @@
|
||||
#!/bin/bash
|
||||
set -e
|
||||
|
||||
cd $(dirname $0)/..
|
||||
|
||||
# load .env
|
||||
if [ -f .env ]
|
||||
then
|
||||
# exclude WELCOME_FOOTER because it may contain invalid characters
|
||||
export $(cat .env | sed 's/#.*//g' | grep -v "WELCOME_FOOTER" | grep -v "WELCOME_MESSAGE" | xargs)
|
||||
fi
|
||||
|
||||
if [ ! "$ENABLE_RECORDING" == true ]; then
|
||||
echo "Error: recording is disabled why can't use bbb-record"
|
||||
echo "set ENABLE_RECORDING in .env if you want to use it"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
./scripts/compose exec recordings bbb-record $@
|
||||
./scripts/compose logs --tail=15 recordings
|
@ -57,4 +57,8 @@ if [ "$ENABLE_PROMETHEUS_EXPORTER" == true ]; then
|
||||
COMPOSE_FILES="$COMPOSE_FILES -f docker-compose.prometheus.yml"
|
||||
fi
|
||||
|
||||
if [ "$ENABLE_RECORDING" == true ]; then
|
||||
COMPOSE_FILES="$COMPOSE_FILES -f docker-compose.recordings.yml"
|
||||
fi
|
||||
|
||||
docker-compose $COMPOSE_FILES $@
|
||||
|
@ -45,6 +45,18 @@ while [[ -z "$DOMAIN" ]]; do
|
||||
read -p "Please enter the domain name: " DOMAIN
|
||||
done
|
||||
|
||||
recording=""
|
||||
echo "Should the recording feature be included?"
|
||||
echo " IMPORTANT: this is currently a big privacy issues, because it will "
|
||||
echo " record everything which happens in the conference, even when the button"
|
||||
echo " suggets, that it does not."
|
||||
echo " make sure that you awalys get peoples consent, before they join a room!"
|
||||
echo " https://github.com/bigbluebutton/bigbluebutton/issues/9202"
|
||||
while [[ ! $recording =~ ^(y|n)$ ]]; do
|
||||
|
||||
read -p "Choice (y/n): " recording
|
||||
done
|
||||
|
||||
ip_correct=""
|
||||
while [[ ! $ip_correct =~ ^(y|n)$ ]]; do
|
||||
read -p "Is $EXTERNAL_IPv4 your external IPv4 address? (y/n): " ip_correct
|
||||
@ -92,6 +104,11 @@ then
|
||||
sed -i "s/ENABLE_HTTPS_PROXY.*/#ENABLE_HTTPS_PROXY=true/" .env
|
||||
fi
|
||||
|
||||
if [ "$recording" == "y" ]
|
||||
then
|
||||
sed -i "s/#ENABLE_RECORDING.*/ENABLE_RECORDING=true/" .env
|
||||
fi
|
||||
|
||||
if [ "$coturn" == "y" ]
|
||||
then
|
||||
sed -i "s/.*TURN_SERVER=.*/TURN_SERVER=turns:$DOMAIN:465?transport=tcp/" .env
|
||||
|
Loading…
Reference in New Issue
Block a user