separate bbb-html5

This commit is contained in:
chandi 2020-04-09 22:33:27 +02:00
parent 2d6e43193d
commit e2901ddd81
10 changed files with 205 additions and 60 deletions

View File

@ -2,7 +2,7 @@ version: '3.6'
services: services:
base: base:
image: bbb image: bbb-base
hostname: meet.livingutopia.org hostname: meet.livingutopia.org
cap_add: cap_add:
- SYS_NICE # for realtime scheduling - SYS_NICE # for realtime scheduling
@ -15,13 +15,13 @@ services:
- /tmp:exec,mode=777 - /tmp:exec,mode=777
volumes: volumes:
- /sys/fs/cgroup:/sys/fs/cgroup:ro # for systemd - /sys/fs/cgroup:/sys/fs/cgroup:ro # for systemd
- ./setup.sh:/opt/setup.sh - ./mod/base/setup.sh:/opt/setup.sh
- ./mod/freeswitch/vars.xml:/opt/freeswitch/conf/vars.xml - ./mod/freeswitch/vars.xml:/opt/freeswitch/conf/vars.xml
- ./mod/freeswitch/external.xml:/opt/freeswitch/conf/sip_profiles/external.xml - ./mod/freeswitch/external.xml:/opt/freeswitch/conf/sip_profiles/external.xml
- ./mod/html5/systemd_start.sh:/usr/share/meteor/bundle/systemd_start.sh
- ./mod/html5/config.yml:/usr/share/meteor/bundle/programs/server/assets/app/config/settings.yml
- ./mod/web/override.conf:/etc/systemd/system/bbb-web.service.d/override.conf - ./mod/web/override.conf:/etc/systemd/system/bbb-web.service.d/override.conf
- ./mod/web/bigbluebutton.properties:/usr/share/bbb-web/WEB-INF/classes/bigbluebutton.properties - ./mod/web/bigbluebutton.properties:/usr/share/bbb-web/WEB-INF/classes/bigbluebutton.properties
- ./mod/base/bigbluebutton.yml:/usr/local/bigbluebutton/core/scripts/bigbluebutton.yml
- ./mod/bbb-apps-akka/application.conf:/usr/share/bbb-apps-akka/conf/application.conf
network_mode: host network_mode: host
nginx: nginx:
@ -29,6 +29,7 @@ services:
depends_on: depends_on:
- etherpad - etherpad
- webrtc-sfu - webrtc-sfu
- html5
ports: ports:
- "80:80" - "80:80"
volumes: volumes:
@ -101,6 +102,17 @@ services:
networks: networks:
- bluenet - bluenet
html5:
image: bbb-html5
depends_on:
- redis
- etherpad
networks:
- bluenet
volumes:
- ./mod/html5/entrypoint.sh:/entrypoint.sh
- ./mod/html5/settings.yml:/app/programs/server/assets/app/config/settings.yml
networks: networks:
bluenet: bluenet:
ipam: ipam:

View File

@ -27,13 +27,6 @@ RUN LC_CTYPE=C.UTF-8 add-apt-repository ppa:bigbluebutton/support
RUN sh -c 'wget https://ubuntu.bigbluebutton.org/repo/bigbluebutton.asc -O- | apt-key add -' \ RUN sh -c 'wget https://ubuntu.bigbluebutton.org/repo/bigbluebutton.asc -O- | apt-key add -' \
&& sh -c 'echo "deb https://ubuntu.bigbluebutton.org/xenial-220 bigbluebutton-xenial main" > /etc/apt/sources.list.d/bigbluebutton.list' && sh -c 'echo "deb https://ubuntu.bigbluebutton.org/xenial-220 bigbluebutton-xenial main" > /etc/apt/sources.list.d/bigbluebutton.list'
RUN sh -c 'wget -qO - https://www.mongodb.org/static/pgp/server-3.4.asc | sudo apt-key add -' \
&& sh -c 'echo "deb http://repo.mongodb.org/apt/ubuntu xenial/mongodb-org/3.4 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-3.4.list'
# nodejs
RUN sh -c "curl -sL https://deb.nodesource.com/setup_8.x | sudo -E bash -"
# create dummy packages to satisfy dependencies # create dummy packages to satisfy dependencies
RUN equivs-control redis-server.control \ RUN equivs-control redis-server.control \
&& sed -i 's/<package name; defaults to equivs-dummy>/redis-server/g' redis-server.control \ && sed -i 's/<package name; defaults to equivs-dummy>/redis-server/g' redis-server.control \
@ -61,23 +54,14 @@ COPY dummy.service /etc/systemd/system/redis-server.service
COPY dummy.service /etc/systemd/system/kurento-media-server.service COPY dummy.service /etc/systemd/system/kurento-media-server.service
COPY dummy.service /etc/systemd/system/bbb-webrtc-sfu.service COPY dummy.service /etc/systemd/system/bbb-webrtc-sfu.service
RUN apt-get install -y nodejs
# bbb-html5 installer expects this file
RUN mkdir /usr/share/etherpad-lite && sh -c 'echo invalid > /usr/share/etherpad-lite/APIKEY.txt'
RUN touch /etc/init.d/nginx && chmod +x /etc/init.d/nginx RUN touch /etc/init.d/nginx && chmod +x /etc/init.d/nginx
RUN apt-get install -y bbb-web bbb-record-core bbb-playback-presentation bbb-freeswitch-core \ RUN apt-get update && apt-get install -y bbb-web bbb-record-core bbb-playback-presentation bbb-freeswitch-core \
bbb-fsesl-akka bbb-apps-akka bbb-transcode-akka bbb-apps bbb-apps-sip \ bbb-fsesl-akka bbb-apps-akka bbb-transcode-akka bbb-apps bbb-apps-sip \
bbb-apps-video bbb-apps-screenshare bbb-apps-video-broadcast bbb-apps-video bbb-apps-screenshare bbb-apps-video-broadcast
RUN mkdir -p /etc/nginx/sites-enabled /var/kurento RUN mkdir -p /etc/nginx/sites-enabled /var/kurento
RUN apt-get install -y bbb-html5 bbb-config RUN apt-get install -y bbb-config
RUN apt-get install -y mongodb-org
# RUN apt-get install -y bbb-demo
# -- Disable unneeded services # -- Disable unneeded services
RUN systemctl disable systemd-journal-flush RUN systemctl disable systemd-journal-flush
@ -93,7 +77,15 @@ RUN chown bbb /home/bbb
RUN sh -c 'echo "bbb ALL=(ALL:ALL) NOPASSWD: ALL" | tee /etc/sudoers.d/bbb' RUN sh -c 'echo "bbb ALL=(ALL:ALL) NOPASSWD: ALL" | tee /etc/sudoers.d/bbb'
RUN sh -c 'echo "bbb:bbb" | chpasswd' RUN sh -c 'echo "bbb:bbb" | chpasswd'
COPY mod/tomcat7 /etc/init.d/tomcat7 # disable IPv6 support
RUN rm -rf /opt/freeswitch/conf/sip_profiles/*-ipv6*
# disable all services
RUN find /etc/systemd/ | grep wants | xargs -r -n 1 basename | grep service | grep -v networking | grep -v tty | xargs -r -n 1 -I __ systemctl disable __
RUN systemctl disable tomcat7
RUN systemctl enable red5 freeswitch bbb-apps-akka bbb-transcode-akka bbb-fsesl-akka bbb-rap-caption-inbox bbb-web
COPY tomcat7 /etc/init.d/tomcat7
RUN chmod +x /etc/init.d/tomcat7 RUN chmod +x /etc/init.d/tomcat7
COPY setup.sh /opt/setup.sh COPY setup.sh /opt/setup.sh

View File

@ -0,0 +1,37 @@
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://localhost:9001/p
# Specify the notes formats we archive
# txt, doc and odt are also supported
notes_formats:
- etherpad
- html
- pdf
redis_host: 127.0.0.1
redis_port: 6379
# Uncomment and set password if redis require it.
# redis_password: changeme
# 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: meet.livingutopia.org
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: meet.livingutopia.org

View File

@ -0,0 +1,102 @@
akka {
actor {
debug {
# enable DEBUG logging of all AutoReceiveMessages (Kill, PoisonPill et.c.)
autoreceive = on
# enable DEBUG logging of actor lifecycle changes
lifecycle = on
}
}
loggers = ["akka.event.slf4j.Slf4jLogger"]
loglevel = "DEBUG"
redis-publish-worker-dispatcher {
mailbox-type = "akka.dispatch.SingleConsumerOnlyUnboundedMailbox"
# Throughput defines the maximum number of messages to be
# processed per actor before the thread jumps to the next actor.
# Set to 1 for as fair as possible.
throughput = 512
}
redis-subscriber-worker-dispatcher {
mailbox-type = "akka.dispatch.SingleConsumerOnlyUnboundedMailbox"
# Throughput defines the maximum number of messages to be
# processed per actor before the thread jumps to the next actor.
# Set to 1 for as fair as possible.
throughput = 512
}
}
redis {
host="127.0.0.1"
port=6379
password=""
# recording keys should expire in 14 days
keyExpiry=1209600
}
expire {
# time in seconds
lastUserLeft = 60
neverJoined = 300
maxRegUserToJoin = 300
}
services {
bbbWebAPI="https://meet.livingutopia.org/bigbluebutton/api"
sharedSecret="I8x5c5yzaXZktgXK00tEqSi3B17nQySH5ssDWzxwL4"
}
red5 {
deskshareip="meet.livingutopia.org"
deskshareapp="video-broadcast"
}
eventBus {
meetingManagerChannel = "MeetingManagerChannel"
outMessageChannel = "OutgoingMessageChannel"
incomingJsonMsgChannel = "IncomingJsonMsgChannel"
outBbbMsgMsgChannel = "OutBbbMsgChannel"
}
sharedNotes {
maxNumberOfNotes = 3
maxNumberOfUndos = 30
}
http {
interface = "0.0.0.0"
port = 9999
}
services {
telizeHost = "www.telize.com"
telizePort = 80
}
apps {
checkPermissions = true
endMeetingWhenNoMoreAuthedUsers = false
endMeetingWhenNoMoreAuthedUsersAfterMinutes = 2
}
voiceConf {
recordPath = "/var/freeswitch/meetings"
# Use ogg instead of wav to get smaller audio files.
# Valid values "wav", "ogg", "flac", "opus"
recordCodec = "opus"
# Interval seconds to check if FreeSWITCH is recording.
checkRecordingInterval = 23
# Internval seconds to sync voice users status.
syncUserStatusInterval = 41
}
recording {
# set zero to disable chapter break
chapterBreakLengthInMinutes = 0
}
whiteboard {
multiUserDefault = false
}

24
mod/html5/Dockerfile Normal file
View File

@ -0,0 +1,24 @@
# TODO: build from github repo with node:12
FROM node:8-stretch
ENV NODE_ENV production
RUN apt-get update && apt-get install -y sudo wget binutils
RUN useradd -m meteor
RUN wget https://ubuntu.bigbluebutton.org/xenial-220/pool/main/b/bbb-html5/bbb-html5_2.2.0-870_amd64.deb \
&& ar x bbb-html5_*.deb \
&& tar -zxf data.tar.gz ./usr/share/meteor/bundle \
&& mv /usr/share/meteor/bundle /app \
&& rm -rf /app/programs/server/node_modules \
&& chown meteor:meteor /app/programs/server \
&& rm /*.deb /*.tar.gz
USER meteor
RUN cd /app/programs/server && npm install && npm cache clear --force
COPY entrypoint.sh /entrypoint.sh
ENTRYPOINT ["/entrypoint.sh"]

10
mod/html5/entrypoint.sh Executable file
View File

@ -0,0 +1,10 @@
#!/bin/bash
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 PORT=3000
node main.js

View File

@ -307,7 +307,7 @@ public:
throttleInterval: 400, flushOnClose: true, logTag: ""} throttleInterval: 400, flushOnClose: true, logTag: ""}
private: private:
app: app:
host: 127.0.0.1 host: 0.0.0.0
port: 3000 port: 3000
localesUrl: /locales localesUrl: /locales
pencilChunkLength: 100 pencilChunkLength: 100
@ -315,10 +315,10 @@ private:
etherpad: etherpad:
apikey: 9xLdxQJ8XoTUy3q7W4ZgpvKYqX16yqirdESk9i54FVm6PiJ1paRd8JOI1MT4pywm apikey: 9xLdxQJ8XoTUy3q7W4ZgpvKYqX16yqirdESk9i54FVm6PiJ1paRd8JOI1MT4pywm
version: 1.2.13 version: 1.2.13
host: 10.7.7.4 host: etherpad
port: 9001 port: 9001
redis: redis:
host: 10.7.7.5 host: redis
port: '6379' port: '6379'
timeout: 5000 timeout: 5000
password: null password: null

View File

@ -1,32 +0,0 @@
#!/bin/bash -e
#Allow to run outside of directory
cd `dirname $0`
if [ -w /sys/kernel/mm/transparent_hugepage/enabled ]; then
unameEnabled="$(stat --format '%U' /sys/kernel/mm/transparent_hugepage/enabled)"
if [ "x${unameEnabled}" != "xnobody" ]; then
echo "never" > /sys/kernel/mm/transparent_hugepage/enabled
echo "transparent_hugepage/enabled set to 'never'"
else
echo "transparent_hugepage/enabled could not be set to 'never'"
fi
fi
if [ -w /sys/kernel/mm/transparent_hugepage/defrag ]; then
unameDefrag="$(stat --format '%U' /sys/kernel/mm/transparent_hugepage/defrag)"
if [ "x${unameDefrag}" != "xnobody" ]; then
echo "never" > /sys/kernel/mm/transparent_hugepage/defrag
echo "transparent_hugepage/defrag set to 'never'"
else
echo "transparent_hugepage/defrag could not be set to 'never'"
fi
fi
# change to start meteor in production (https) or development (http) mode
ENVIRONMENT_TYPE=production
cd /usr/share/meteor/bundle
export ROOT_URL=http://127.0.0.1/html5client
export MONGO_URL=mongodb://10.7.7.6/meteor
export NODE_ENV=production
PORT=3000 /usr/bin/node main.js

View File

@ -1,10 +1,10 @@
location /html5client { location /html5client {
proxy_pass http://host.docker.internal:3000; proxy_pass http://html5:3000;
proxy_http_version 1.1; proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade; proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "Upgrade"; proxy_set_header Connection "Upgrade";
} }
location /_timesync { location /_timesync {
proxy_pass http://host.docker.internal:3000; proxy_pass http://html5:3000;
} }