forked from extern/docker
re-commit recordings from upstream for testing only
This commit is contained in:
parent
bae3b78899
commit
fe17745096
13
docker-compose.recordings.yml
Normal file
13
docker-compose.recordings.yml
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
version: '3.6'
|
||||||
|
services:
|
||||||
|
recordings-process:
|
||||||
|
build: mod/recordings-process
|
||||||
|
environment:
|
||||||
|
DOMAIN: ${DOMAIN}
|
||||||
|
volumes:
|
||||||
|
- /var/bigbluebutton:/var/bigbluebutton
|
||||||
|
- vol-freeswitch:/var/freeswitch/meetings
|
||||||
|
- vol-kurento:/var/kurento
|
||||||
|
networks:
|
||||||
|
bbb-net:
|
||||||
|
ipv4_address: 10.7.7.16
|
@ -9,6 +9,7 @@ services:
|
|||||||
environment:
|
environment:
|
||||||
DEV_MODE: ${DEV_MODE:-}
|
DEV_MODE: ${DEV_MODE:-}
|
||||||
DOMAIN: ${DOMAIN}
|
DOMAIN: ${DOMAIN}
|
||||||
|
ENABLE_RECORDING: ${ENABLE_RECORDING:-false}
|
||||||
SHARED_SECRET: ${SHARED_SECRET}
|
SHARED_SECRET: ${SHARED_SECRET}
|
||||||
WELCOME_MESSAGE: ${WELCOME_MESSAGE:-}
|
WELCOME_MESSAGE: ${WELCOME_MESSAGE:-}
|
||||||
WELCOME_FOOTER: ${WELCOME_FOOTER}
|
WELCOME_FOOTER: ${WELCOME_FOOTER}
|
||||||
@ -16,7 +17,9 @@ services:
|
|||||||
TURN_SERVER: ${TURN_SERVER:-}
|
TURN_SERVER: ${TURN_SERVER:-}
|
||||||
TURN_SECRET: ${TURN_SECRET:-}
|
TURN_SECRET: ${TURN_SECRET:-}
|
||||||
volumes:
|
volumes:
|
||||||
- bigbluebutton:/var/bigbluebutton
|
- /var/bigbluebutton:/var/bigbluebutton
|
||||||
|
- vol-freeswitch:/var/freeswitch/meetings
|
||||||
|
- vol-kurento:/var/kurento
|
||||||
networks:
|
networks:
|
||||||
bbb-net:
|
bbb-net:
|
||||||
ipv4_address: 10.7.7.2
|
ipv4_address: 10.7.7.2
|
||||||
@ -41,10 +44,11 @@ services:
|
|||||||
volumes:
|
volumes:
|
||||||
- ./conf/sip_profiles:/etc/freeswitch/sip_profiles/external
|
- ./conf/sip_profiles:/etc/freeswitch/sip_profiles/external
|
||||||
- ./conf/dialplan_public:/etc/freeswitch/dialplan/public_docker
|
- ./conf/dialplan_public:/etc/freeswitch/dialplan/public_docker
|
||||||
|
- vol-freeswitch:/var/freeswitch/meetings
|
||||||
network_mode: host
|
network_mode: host
|
||||||
|
|
||||||
nginx:
|
nginx:
|
||||||
image: nginx:1.19-alpine
|
build: mod/nginx
|
||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
depends_on:
|
depends_on:
|
||||||
- etherpad
|
- etherpad
|
||||||
@ -53,9 +57,7 @@ services:
|
|||||||
ports:
|
ports:
|
||||||
- "8080:80"
|
- "8080:80"
|
||||||
volumes:
|
volumes:
|
||||||
- bigbluebutton:/var/bigbluebutton
|
- /var/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
|
- ${DEFAULT_PRESENTATION:-/dev/null}:/etc/nginx/html/default.pdf
|
||||||
network_mode: host
|
network_mode: host
|
||||||
extra_hosts:
|
extra_hosts:
|
||||||
@ -103,6 +105,8 @@ services:
|
|||||||
KMS_TURN_URL:
|
KMS_TURN_URL:
|
||||||
KMS_NETWORK_INTERFACES: ${NETWORK_INTERFACE:-}
|
KMS_NETWORK_INTERFACES: ${NETWORK_INTERFACE:-}
|
||||||
network_mode: host
|
network_mode: host
|
||||||
|
volumes:
|
||||||
|
- vol-kurento:/var/kurento
|
||||||
|
|
||||||
webrtc-sfu:
|
webrtc-sfu:
|
||||||
build:
|
build:
|
||||||
@ -160,13 +164,15 @@ services:
|
|||||||
- mongodb
|
- mongodb
|
||||||
volumes:
|
volumes:
|
||||||
- /var/run/docker.sock:/var/run/docker.sock
|
- /var/run/docker.sock:/var/run/docker.sock
|
||||||
- bigbluebutton:/var/bigbluebutton
|
- /var/bigbluebutton:/var/bigbluebutton
|
||||||
networks:
|
networks:
|
||||||
bbb-net:
|
bbb-net:
|
||||||
ipv4_address: 10.7.7.12
|
ipv4_address: 10.7.7.12
|
||||||
|
|
||||||
volumes:
|
volumes:
|
||||||
bigbluebutton:
|
bigbluebutton:
|
||||||
|
vol-freeswitch:
|
||||||
|
vol-kurento:
|
||||||
|
|
||||||
networks:
|
networks:
|
||||||
bbb-net:
|
bbb-net:
|
||||||
|
@ -4,7 +4,6 @@ MAINTAINER ffdixon@bigbluebutton.org
|
|||||||
# TODO:
|
# TODO:
|
||||||
# - separate bbb-apps into an own container
|
# - separate bbb-apps into an own container
|
||||||
# - separate bbb-web
|
# - separate bbb-web
|
||||||
# - remove systemd
|
|
||||||
|
|
||||||
ENV DEBIAN_FRONTEND noninteractive
|
ENV DEBIAN_FRONTEND noninteractive
|
||||||
ENV container docker
|
ENV container docker
|
||||||
@ -43,8 +42,7 @@ ENV VERSION v2.2.22
|
|||||||
|
|
||||||
RUN apt-get update && apt-get install -y bbb-web \
|
RUN apt-get update && apt-get install -y bbb-web \
|
||||||
bbb-fsesl-akka bbb-apps-akka bbb-transcode-akka bbb-apps \
|
bbb-fsesl-akka bbb-apps-akka bbb-transcode-akka bbb-apps \
|
||||||
bbb-apps-video bbb-apps-screenshare bbb-apps-video-broadcast \
|
bbb-apps-video bbb-apps-screenshare bbb-apps-video-broadcast
|
||||||
bbb-record-core bbb-playback-presentation
|
|
||||||
|
|
||||||
# -- avoid blocking java
|
# -- avoid blocking java
|
||||||
# https://github.com/bigbluebutton/bigbluebutton/issues/8959
|
# https://github.com/bigbluebutton/bigbluebutton/issues/8959
|
||||||
@ -61,8 +59,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/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 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.tmpl
|
|
||||||
|
|
||||||
COPY web/bigbluebutton.properties /usr/share/bbb-web/WEB-INF/classes/bigbluebutton.properties.tmpl
|
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
|
COPY web/turn-stun-servers.xml /usr/share/bbb-web/WEB-INF/classes/spring/turn-stun-servers.xml.tmpl
|
||||||
|
|
||||||
@ -70,14 +66,10 @@ COPY bbb-apps-akka/application.conf /usr/share/bbb-apps-akka/conf/application.co
|
|||||||
COPY bbb-fsesl-akka/application.conf /etc/bbb-fsesl-akka/application.conf
|
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 bbb-transcode-akka/application.conf /etc/bbb-transcode-akka/application.conf
|
||||||
COPY web-run.sh /usr/share/bbb-web/run-prod.sh
|
COPY web-run.sh /usr/share/bbb-web/run-prod.sh
|
||||||
COPY bbb-playback-presentation/presentation.yml /usr/local/bigbluebutton/core/scripts/
|
|
||||||
COPY bbb-playback-presentation/record-monitor.sh /usr/local/bin
|
|
||||||
RUN chmod +x /usr/local/bin/record-monitor.sh && \
|
|
||||||
mkdir -p /usr/src/bbb-playback-presentation && \
|
|
||||||
cp -r /var/bigbluebutton/playback/* /usr/src/bbb-src-playback
|
|
||||||
|
|
||||||
RUN wget -O /usr/local/bin/bbb-record https://raw.githubusercontent.com/bigbluebutton/bigbluebutton/develop/bigbluebutton-config/bin/bbb-record \
|
# add default presentation thumbnail
|
||||||
&& chmod +x /usr/local/bin/bbb-record
|
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 supervisord.conf /etc/supervisor/conf.d/supervisord.conf
|
||||||
COPY entrypoint.sh /entrypoint.sh
|
COPY entrypoint.sh /entrypoint.sh
|
||||||
|
@ -1,20 +0,0 @@
|
|||||||
video_output_width: 640
|
|
||||||
video_output_height: 480
|
|
||||||
# Alternate output size to use when deskshare videos are present
|
|
||||||
# Set higher so that deskshare output is higher quality, but uses more space.
|
|
||||||
deskshare_output_width: 1280
|
|
||||||
deskshare_output_height: 720
|
|
||||||
# offset applied to audio in the output video file
|
|
||||||
# audio_offset = 1200 means that the audio will be delayed by 1200ms
|
|
||||||
audio_offset: 0
|
|
||||||
include_deskshare: true
|
|
||||||
|
|
||||||
# For PRODUCTION
|
|
||||||
publish_dir: /var/bigbluebutton/published/presentation
|
|
||||||
video_formats:
|
|
||||||
- webm
|
|
||||||
# - mp4
|
|
||||||
|
|
||||||
# For DEVELOPMENT
|
|
||||||
#publish_dir: /home/ubuntu/temp/published/presentation
|
|
||||||
|
|
@ -1,60 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
|
|
||||||
# /var/bigbluebutton/recording/status/processed/*.done -> publish-worker.rb
|
|
||||||
# /var/bigbluebutton/recording/status/sanity/*.done -> process-worker
|
|
||||||
# /var/bigbluebutton/recording/status/ended/*.done -> events-worker
|
|
||||||
# /var/bigbluebutton/recording/status/recorded/*.done -> archive-worker
|
|
||||||
# /var/bigbluebutton/recording/status/archived/*.done -> sanity-worker
|
|
||||||
|
|
||||||
FILES_TO_CHECK=$1
|
|
||||||
|
|
||||||
PATH_TO_CHECK="/var/bigbluebutton/recording/status"
|
|
||||||
CMD_DIR_PATH="/usr/local/bigbluebutton/core/scripts"
|
|
||||||
|
|
||||||
function do_monitoring() {
|
|
||||||
while ! compgen -G "$PATH_TO_CHECK" > /dev/null; do
|
|
||||||
echo "$PATH_TO_CHECK returning 0 files, sleeping for 30s..."
|
|
||||||
sleep 30
|
|
||||||
done
|
|
||||||
if [[ -d "$CMD_DIR_PATH" ]]; then
|
|
||||||
pushd $CMD_DIR_PATH > /dev/null
|
|
||||||
ruby $CMD_PATH
|
|
||||||
popd > /dev/null
|
|
||||||
fi
|
|
||||||
sleep 5
|
|
||||||
echo "Re-monitoring files.."
|
|
||||||
do_monitoring
|
|
||||||
}
|
|
||||||
|
|
||||||
function initialize_variables() {
|
|
||||||
echo "$FILES_TO_CHECK"
|
|
||||||
if [[ ! -z $FILES_TO_CHECK ]]; then
|
|
||||||
if [[ $FILES_TO_CHECK == "processed" ]]; then
|
|
||||||
PATH_TO_CHECK="$PATH_TO_CHECK/processed/*.done"
|
|
||||||
CMD_PATH="/usr/local/bigbluebutton/core/scripts/rap-publish-worker.rb"
|
|
||||||
elif [[ $FILES_TO_CHECK == "sanity" ]]; then
|
|
||||||
PATH_TO_CHECK="$PATH_TO_CHECK/sanity/*.done"
|
|
||||||
CMD_PATH="/usr/local/bigbluebutton/core/scripts/rap-process-worker.rb"
|
|
||||||
elif [[ $FILES_TO_CHECK == "ended" ]]; then
|
|
||||||
PATH_TO_CHECK="$PATH_TO_CHECK/ended/*.done"
|
|
||||||
CMD_PATH="/usr/local/bigbluebutton/core/scripts/rap-events-worker.rb"
|
|
||||||
elif [[ $FILES_TO_CHECK == "recorded" ]]; then
|
|
||||||
PATH_TO_CHECK="$PATH_TO_CHECK/recorded/*.done"
|
|
||||||
CMD_PATH="/usr/local/bigbluebutton/core/scripts/rap-archive-worker.rb"
|
|
||||||
elif [[ $FILES_TO_CHECK == "archived" ]]; then
|
|
||||||
PATH_TO_CHECK="$PATH_TO_CHECK/archived/*.done"
|
|
||||||
CMD_PATH="/usr/local/bigbluebutton/core/scripts/rap-sanity-worker.rb"
|
|
||||||
else
|
|
||||||
echo "invalid argument, exiting..."
|
|
||||||
exit
|
|
||||||
fi
|
|
||||||
else
|
|
||||||
echo "invalid argument, exiting..."
|
|
||||||
exit
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
# first check variables
|
|
||||||
initialize_variables
|
|
||||||
# main execution
|
|
||||||
do_monitoring
|
|
@ -3,14 +3,21 @@
|
|||||||
export LANG=en_US.UTF-8
|
export LANG=en_US.UTF-8
|
||||||
|
|
||||||
# generate bbb folders
|
# 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/raw
|
||||||
mkdir -p /var/bigbluebutton/recording/process
|
mkdir -p /var/bigbluebutton/recording/process
|
||||||
mkdir -p /var/bigbluebutton/recording/publish
|
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/recorded
|
||||||
mkdir -p /var/bigbluebutton/recording/status/archived
|
mkdir -p /var/bigbluebutton/recording/status/archived
|
||||||
mkdir -p /var/bigbluebutton/recording/status/processed
|
mkdir -p /var/bigbluebutton/recording/status/processed
|
||||||
mkdir -p /var/bigbluebutton/recording/status/sanity
|
mkdir -p /var/bigbluebutton/recording/status/sanity
|
||||||
mkdir -p /var/bigbluebutton/published
|
mkdir -p /var/bigbluebutton/published
|
||||||
|
mkdir -p /var/bigbluebutton/published/presentation
|
||||||
mkdir -p /var/bigbluebutton/deleted
|
mkdir -p /var/bigbluebutton/deleted
|
||||||
mkdir -p /var/bigbluebutton/unpublished
|
mkdir -p /var/bigbluebutton/unpublished
|
||||||
mkdir -p /var/bigbluebutton/playback
|
mkdir -p /var/bigbluebutton/playback
|
||||||
|
@ -42,58 +42,3 @@ stdout_logfile=/dev/fd/1
|
|||||||
stdout_logfile_maxbytes=0
|
stdout_logfile_maxbytes=0
|
||||||
stderr_logfile=/dev/fd/2
|
stderr_logfile=/dev/fd/2
|
||||||
stderr_logfile_maxbytes=0
|
stderr_logfile_maxbytes=0
|
||||||
|
|
||||||
[program:rap-archive-worker]
|
|
||||||
command=/usr/local/bin/prefix-log /usr/local/bin/record-monitor.sh recorded
|
|
||||||
user=bigbluebutton
|
|
||||||
directory=/usr/local/bigbluebutton/core/scripts
|
|
||||||
autostart=true
|
|
||||||
autorestart=true
|
|
||||||
stdout_logfile=/dev/fd/1
|
|
||||||
stdout_logfile_maxbytes=0
|
|
||||||
stderr_logfile=/dev/fd/2
|
|
||||||
stderr_logfile_maxbytes=0
|
|
||||||
|
|
||||||
[program:rap-events-worker]
|
|
||||||
command=/usr/local/bin/prefix-log /usr/local/bin/record-monitor.sh ended
|
|
||||||
user=bigbluebutton
|
|
||||||
directory=/usr/local/bigbluebutton/core/scripts
|
|
||||||
autostart=true
|
|
||||||
autorestart=true
|
|
||||||
stdout_logfile=/dev/fd/1
|
|
||||||
stdout_logfile_maxbytes=0
|
|
||||||
stderr_logfile=/dev/fd/2
|
|
||||||
stderr_logfile_maxbytes=0
|
|
||||||
|
|
||||||
[program:rap-process-worker]
|
|
||||||
command=/usr/local/bin/prefix-log /usr/local/bin/record-monitor.sh sanity
|
|
||||||
user=bigbluebutton
|
|
||||||
directory=/usr/local/bigbluebutton/core/scripts
|
|
||||||
autostart=true
|
|
||||||
autorestart=true
|
|
||||||
stdout_logfile=/dev/fd/1
|
|
||||||
stdout_logfile_maxbytes=0
|
|
||||||
stderr_logfile=/dev/fd/2
|
|
||||||
stderr_logfile_maxbytes=0
|
|
||||||
|
|
||||||
[program:rap-publish-worker]
|
|
||||||
command=/usr/local/bin/prefix-log /usr/local/bin/record-monitor.sh processed
|
|
||||||
user=bigbluebutton
|
|
||||||
directory=/usr/local/bigbluebutton/core/scripts
|
|
||||||
autostart=true
|
|
||||||
autorestart=true
|
|
||||||
stdout_logfile=/dev/fd/1
|
|
||||||
stdout_logfile_maxbytes=0
|
|
||||||
stderr_logfile=/dev/fd/2
|
|
||||||
stderr_logfile_maxbytes=0
|
|
||||||
|
|
||||||
[program:rap-sanity-worker]
|
|
||||||
command=/usr/local/bin/prefix-log /usr/local/bin/record-monitor.sh archived
|
|
||||||
user=bigbluebutton
|
|
||||||
directory=/usr/local/bigbluebutton/core/scripts
|
|
||||||
autostart=true
|
|
||||||
autorestart=true
|
|
||||||
stdout_logfile=/dev/fd/1
|
|
||||||
stdout_logfile_maxbytes=0
|
|
||||||
stderr_logfile=/dev/fd/2
|
|
||||||
stderr_logfile_maxbytes=0
|
|
||||||
|
@ -192,7 +192,11 @@ 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
|
# 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
|
# false - when record param is passed from api, override this default
|
||||||
|
{{ if isTrue .Env.ENABLE_RECORDING }}
|
||||||
disableRecordingDefault=false
|
disableRecordingDefault=false
|
||||||
|
{{ else }}
|
||||||
|
disableRecordingDefault=true
|
||||||
|
{{ end }}
|
||||||
|
|
||||||
# Start recording when first user joins the meeting.
|
# Start recording when first user joins the meeting.
|
||||||
# For backward compatibility with 0.81 where whole meeting
|
# For backward compatibility with 0.81 where whole meeting
|
||||||
|
@ -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 \
|
&& svn checkout https://github.com/alangecker/bbb-packages/tags/$GIT_TAG/bbb-freeswitch-core/data/opt/freeswitch/etc/freeswitch \
|
||||||
&& rm -rf /etc/freeswitch/.svn
|
&& 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
|
# add modifications
|
||||||
COPY ./conf /etc/freeswitch/
|
COPY ./conf /etc/freeswitch/
|
||||||
|
|
||||||
|
@ -15,6 +15,9 @@ for IP in "${ADDR[@]}"; do
|
|||||||
iptables -I INPUT -p udp --dport 5060 -s $IP -j ACCEPT
|
iptables -I INPUT -p udp --dport 5060 -s $IP -j ACCEPT
|
||||||
done
|
done
|
||||||
|
|
||||||
|
chown -R freeswitch:daemon /var/freeswitch/meetings
|
||||||
|
chmod 777 /var/freeswitch/meetings
|
||||||
|
|
||||||
dockerize \
|
dockerize \
|
||||||
-template /etc/freeswitch/vars.xml.tmpl:/etc/freeswitch/vars.xml \
|
-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 \
|
-template /etc/freeswitch/autoload_configs/conference.conf.xml.tmpl:/etc/freeswitch/autoload_configs/conference.conf.xml \
|
||||||
|
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/>.
|
# 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 {
|
location /playback/presentation {
|
||||||
root /var/bigbluebutton;
|
alias /www/presentation;
|
||||||
index index.html index.htm;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
location /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.22
|
||||||
|
|
||||||
|
# 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
|
||||||
|
COPY log-collector.py /log-collector.py
|
||||||
|
COPY 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.22'
|
||||||
raw_audio_src: /var/freeswitch/meetings
|
raw_audio_src: /var/freeswitch/meetings
|
||||||
raw_video_src: /usr/share/red5/webapps/video/streams
|
raw_video_src: /usr/share/red5/webapps/video/streams
|
||||||
kurento_video_src: /var/kurento/recordings
|
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_webrtc_deskshare_src: /usr/share/red5/webapps/video-broadcast/streams
|
||||||
raw_deskshare_src: /var/bigbluebutton/deskshare
|
raw_deskshare_src: /var/bigbluebutton/deskshare
|
||||||
raw_presentation_src: /var/bigbluebutton
|
raw_presentation_src: /var/bigbluebutton
|
||||||
notes_endpoint: http://localhost:9001/p
|
notes_endpoint: http://etherpad:9001/p
|
||||||
# Specify the notes formats we archive
|
# Specify the notes formats we archive
|
||||||
# txt, doc and odt are also supported
|
# txt, doc and odt are also supported
|
||||||
notes_formats:
|
notes_formats:
|
18
mod/recordings/entrypoint.sh
Normal file
18
mod/recordings/entrypoint.sh
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# print all logs to stdout
|
||||||
|
python3 -u /log-collector.py &
|
||||||
|
|
||||||
|
cd /usr/local/bigbluebutton/core/scripts
|
||||||
|
|
||||||
|
while true; do
|
||||||
|
echo "execute workers..."
|
||||||
|
bundle exec ruby rap-archive-worker.rb
|
||||||
|
bundle exec ruby rap-sanity-worker.rb
|
||||||
|
bundle exec ruby rap-process-worker.rb
|
||||||
|
bundle exec ruby rap-publish-worker.rb
|
||||||
|
|
||||||
|
bundle exec ruby rap-caption-inbox.rb
|
||||||
|
bundle exec ruby rap-events-worker.rb
|
||||||
|
|
||||||
|
sleep 30s
|
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
|
# https://yourdomain/bbb-exporter
|
||||||
#ENABLE_PROMETHEUS_EXPORTER=true
|
#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
|
# 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" | 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-process bbb-record $@
|
||||||
|
./scripts/compose logs --tail=15 recordings-process
|
@ -57,4 +57,8 @@ if [ "$ENABLE_PROMETHEUS_EXPORTER" == true ]; then
|
|||||||
COMPOSE_FILES="$COMPOSE_FILES -f docker-compose.prometheus.yml"
|
COMPOSE_FILES="$COMPOSE_FILES -f docker-compose.prometheus.yml"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
if [ "$ENABLE_RECORDING" == true ]; then
|
||||||
|
COMPOSE_FILES="$COMPOSE_FILES -f docker-compose.recording.yml"
|
||||||
|
fi
|
||||||
|
|
||||||
docker-compose $COMPOSE_FILES $@
|
docker-compose $COMPOSE_FILES $@
|
||||||
|
Loading…
Reference in New Issue
Block a user