first commit
This commit is contained in:
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
|
||||
|
||||
docker-compose exec recordings bbb-record $@
|
||||
docker-compose logs --tail=15 recordings
|
||||
27
scripts/checkout-submodules
Executable file
27
scripts/checkout-submodules
Executable file
@@ -0,0 +1,27 @@
|
||||
#!/bin/bash
|
||||
|
||||
# checkouts submodules based on the tag
|
||||
# provided in `tags.env`
|
||||
|
||||
|
||||
set -e
|
||||
cd "$(dirname "$0")/.."
|
||||
|
||||
export $(cat tags.env | sed 's/#.*//g' | xargs)
|
||||
|
||||
function checkout {
|
||||
path=$1
|
||||
ref=$2
|
||||
pushd $path
|
||||
git checkout $ref
|
||||
popd > /dev/null
|
||||
}
|
||||
|
||||
checkout mod/webrtc-sfu/bbb-webrtc-sfu $TAG_WEBRTC_SFU
|
||||
checkout mod/nginx/bbb-playback $TAG_PLAYBACK
|
||||
checkout mod/bbb-pads/bbb-pads $TAG_PADS
|
||||
checkout mod/webhooks/bbb-webhooks $TAG_WEBHOOKS
|
||||
|
||||
echo ""
|
||||
echo "# git submodule"
|
||||
git submodule
|
||||
12
scripts/fs_cli
Executable file
12
scripts/fs_cli
Executable file
@@ -0,0 +1,12 @@
|
||||
#!/bin/bash
|
||||
set -e
|
||||
|
||||
cd $(dirname $0)/..
|
||||
|
||||
# load .env
|
||||
if [ -f .env ]
|
||||
then
|
||||
export $(cat .env | sed 's/#.*//g' | grep "FSESL_PASSWORD" | xargs)
|
||||
fi
|
||||
|
||||
docker-compose exec freeswitch fs_cli -H 10.7.7.1 -p "$FSESL_PASSWORD"
|
||||
68
scripts/generate-compose
Executable file
68
scripts/generate-compose
Executable file
@@ -0,0 +1,68 @@
|
||||
#!/bin/bash
|
||||
set -e
|
||||
|
||||
cd $(dirname $0)/..
|
||||
|
||||
# load .env
|
||||
if [ -f .env ]
|
||||
then
|
||||
# exclude WELCOME_MESSAGE && WELCOME_FOOTER && CLIENT_TITLE because it may contain invalid characters
|
||||
export $(cat .env | sed 's/#.*//g' | grep -v "WELCOME_FOOTER" | grep -v "WELCOME_MESSAGE" | grep -v "CLIENT_TITLE" | xargs)
|
||||
fi
|
||||
|
||||
# check for non-optional environment variables,
|
||||
# which got introduced later and may miss in existing
|
||||
# .env files during upgrades
|
||||
if [ -z "$EXTERNAL_IPv4" ]; then
|
||||
echo "ERROR: EXTERNAL_IPv4 is not set in .env"
|
||||
echo "BBB won't work without it."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ "$ENABLE_COTURN" == true ]; then
|
||||
if [ -z "$ENABLE_HTTPS_PROXY" ] && [ -z "$COTURN_TLS_CERT_PATH" ]; then
|
||||
echo "ERROR: coturn requires TLS certificates."
|
||||
echo "Either enable the https proxy for certificate retrival"
|
||||
echo "or provide a path to your certificates in .env file."
|
||||
exit 1
|
||||
fi
|
||||
if [ -z "$ENABLE_HTTPS_PROXY" ] && [ "$DEV_MODE" == true ]; then
|
||||
echo "ERROR: the https proxy can't get a certificate if ran locally and therefor coturn will never start"
|
||||
echo "you should disable coturn in .env"
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
|
||||
export $(cat tags.env | sed 's/#.*//g' | xargs)
|
||||
|
||||
docker run \
|
||||
--rm \
|
||||
-v $(pwd)/docker-compose.tmpl.yml:/docker-compose.tmpl.yml \
|
||||
-e BBB_BUILD_TAG=${BBB_BUILD_TAG} \
|
||||
-e TAG_COMMON_MESSAGE=${TAG_COMMON_MESSAGE} \
|
||||
-e TAG_APPS_AKKA=${TAG_APPS_AKKA} \
|
||||
-e TAG_FSESL_AKKA=${TAG_FSESL_AKKA} \
|
||||
-e TAG_BBB_WEB=${TAG_BBB_WEB} \
|
||||
-e TAG_HTML5=${TAG_HTML5} \
|
||||
-e TAG_FS_CONFIG=${TAG_FS_CONFIG} \
|
||||
-e TAG_LEARNING_DASHBOARD=${TAG_LEARNING_DASHBOARD} \
|
||||
-e TAG_RECORDINGS=${TAG_RECORDINGS} \
|
||||
-e TAG_WEBRTC_SFU=${TAG_WEBRTC_SFU} \
|
||||
-e TAG_WEBHOOKS=${TAG_WEBHOOKS} \
|
||||
-e TAG_PLAYBACK=${TAG_PLAYBACK} \
|
||||
-e TAG_PADS=${TAG_PADS} \
|
||||
-e DEV_MODE=${DEV_MODE:-false} \
|
||||
-e EXTERNAL_IPv6=${EXTERNAL_IPv6:-} \
|
||||
-e ENABLE_RECORDING=${ENABLE_RECORDING:-false} \
|
||||
-e REMOVE_OLD_RECORDING=${REMOVE_OLD_RECORDING:-false} \
|
||||
-e RECORDING_MAX_AGE_DAYS=${RECORDING_MAX_AGE_DAYS:-14} \
|
||||
-e ENABLE_HTTPS_PROXY=${ENABLE_HTTPS_PROXY:-false} \
|
||||
-e ENABLE_WEBHOOKS=${ENABLE_WEBHOOKS:-false} \
|
||||
-e ENABLE_COTURN=${ENABLE_COTURN:-false} \
|
||||
-e ENABLE_GREENLIGHT=${ENABLE_GREENLIGHT:-false} \
|
||||
-e ENABLE_PROMETHEUS_EXPORTER=${ENABLE_PROMETHEUS_EXPORTER:-false} \
|
||||
-e ENABLE_PROMETHEUS_EXPORTER_OPTIMIZATION=${ENABLE_PROMETHEUS_EXPORTER_OPTIMIZATION:-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
|
||||
51
scripts/publish
Executable file
51
scripts/publish
Executable file
@@ -0,0 +1,51 @@
|
||||
#!/bin/bash
|
||||
|
||||
set -e
|
||||
cd "$(dirname "$0")/.."
|
||||
|
||||
# load .env
|
||||
if [ -f .env ]
|
||||
then
|
||||
# exclude WELCOME_MESSAGE && WELCOME_FOOTER && CLIENT_TITLE because it may contain invalid characters
|
||||
export $(cat .env | sed 's/#.*//g' | grep -v "WELCOME_FOOTER" | grep -v "WELCOME_MESSAGE" | grep -v "CLIENT_TITLE" | xargs)
|
||||
fi
|
||||
|
||||
if [ -z "$ENABLE_WEBHOOKS" ]; then
|
||||
echo "ERROR: ENABLE_WEBHOOKS must be set to true, otherwise the image would not be built"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ -z "$ENABLE_RECORDING" ]; then
|
||||
echo "ERROR: ENABLE_RECORDING must be set to true, otherwise the image would not be built"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
|
||||
# generate compose file
|
||||
./scripts/generate-compose
|
||||
|
||||
# ensure submodules are matching tags.env
|
||||
./scripts/checkout-submodules
|
||||
|
||||
# build and push java base image
|
||||
docker build -t alangecker/bbb-docker-base-java:latest mod/base-java
|
||||
|
||||
# buld and push other images
|
||||
docker-compose build
|
||||
|
||||
# push images
|
||||
docker push alangecker/bbb-docker-base-java:latest
|
||||
docker-compose push \
|
||||
html5-backend-1 \
|
||||
bbb-web \
|
||||
freeswitch \
|
||||
apps-akka \
|
||||
bbb-pads \
|
||||
etherpad \
|
||||
fsesl-akka \
|
||||
jodconverter \
|
||||
nginx \
|
||||
periodic \
|
||||
recordings \
|
||||
webhooks \
|
||||
webrtc-sfu
|
||||
211
scripts/setup
Executable file
211
scripts/setup
Executable file
@@ -0,0 +1,211 @@
|
||||
#!/bin/bash
|
||||
|
||||
set -e
|
||||
cd "$(dirname "$0")/.."
|
||||
|
||||
if ! [ -x "$(command -v curl)" ]; then
|
||||
echo "Error: curl is not installed, but the setup script relies on it."
|
||||
echo "on debian based operating systems try following command:"
|
||||
echo " $ sudo apt-get install curl"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# load .env
|
||||
if [ -f .env ]
|
||||
then
|
||||
echo "Error: the configuration file .env already exists."
|
||||
echo "either edit variables manually in there or remove the file and try this script again"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
|
||||
EXTERNAL_IPv4=$(curl -4 -s https://icanhazip.com)
|
||||
EXTERNAL_IPv6=$(curl -6 -s -m 10 https://icanhazip.com || true)
|
||||
|
||||
greenlight=""
|
||||
while [[ ! $greenlight =~ ^(y|n)$ ]]; do
|
||||
read -p "Should greenlight be included? (y/n): " greenlight
|
||||
done
|
||||
|
||||
https_proxy=""
|
||||
while [[ ! $https_proxy =~ ^(y|n)$ ]]; do
|
||||
read -p "Should an automatic HTTPS Proxy be included? (y/n): " https_proxy
|
||||
done
|
||||
|
||||
coturn=""
|
||||
while [[ ! $coturn =~ ^(y|n)$ ]]; do
|
||||
read -p "Should a coturn be included? (y/n): " coturn
|
||||
done
|
||||
if [ "$coturn" == "y" ] && [ ! "$https_proxy" == "y" ]
|
||||
then
|
||||
echo "Coturn needs TLS to function properly."
|
||||
echo " Since automatic HTTPS Proxy is disabled,"
|
||||
echo " you must provide a relative or absolute path"
|
||||
echo " to your certificates."
|
||||
while [[ -z "$CERTPATH" ]]; do
|
||||
read -p "Please enter path to cert.pem: " CERTPATH
|
||||
done
|
||||
while [[ -z "$KEYPATH" ]]; do
|
||||
read -p "Please enter path to key.pem: " KEYPATH
|
||||
done
|
||||
fi
|
||||
|
||||
DOMAIN=""
|
||||
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 " suggests, that it does not."
|
||||
echo " make sure that you always get people's 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
|
||||
|
||||
prometheus_exporter=""
|
||||
while [[ ! $prometheus_exporter =~ ^(y|n)$ ]]; do
|
||||
read -p "Should a Prometheus exporter be included? (y/n): " prometheus_exporter
|
||||
done
|
||||
if [ "$prometheus_exporter" == "y" ] && [ "$recording" == "y" ]
|
||||
then
|
||||
echo "Should Prometheus exporter optimization be enabled?"
|
||||
echo " This instructs exporter to collect expensive recordings metrics by querying the disk instead of the API."
|
||||
echo " Enabling this can substantially decrease the scrape time required for the exporter to respond to metrics requests"
|
||||
prometheus_exporter_optimization=""
|
||||
while [[ ! $prometheus_exporter_optimization =~ ^(y|n)$ ]]; do
|
||||
read -p "Choice (y/n): " prometheus_exporter_optimization
|
||||
done
|
||||
fi
|
||||
|
||||
if [ "$recording" == "y" ]
|
||||
then
|
||||
|
||||
remove_old_recording=""
|
||||
while [[ ! $remove_old_recording =~ ^(y|n)$ ]]; do
|
||||
read -p "Should old recordings be removed? (y/n): " remove_old_recording
|
||||
done
|
||||
|
||||
if [ "$remove_old_recording" == "y" ]
|
||||
then
|
||||
recording_max_age_days=""
|
||||
while [[ ! $recording_max_age_days =~ ^[0-9]{1,4}$ ]]; do
|
||||
read -p "Please enter max age(days) for keeping recordings: " recording_max_age_days
|
||||
done
|
||||
fi
|
||||
|
||||
fi
|
||||
|
||||
ip_correct=""
|
||||
while [[ ! $ip_correct =~ ^(y|n)$ ]]; do
|
||||
read -p "Is $EXTERNAL_IPv4 your external IPv4 address? (y/n): " ip_correct
|
||||
done
|
||||
|
||||
if [ ! "$ip_correct" == "y" ]
|
||||
then
|
||||
EXTERNAL_IPv4=""
|
||||
while [[ ! $EXTERNAL_IPv4 =~ ^[1-9][0-9]{0,2}\.[0-9]{0,3}\.[0-9]{0,3}\.[1-9][0-9]{0,2}$ ]]; do
|
||||
read -p "Please enter correct IPv4 address: " EXTERNAL_IPv4
|
||||
done
|
||||
fi
|
||||
|
||||
if [ -n "$EXTERNAL_IPv6" ]
|
||||
then
|
||||
ip_correct=""
|
||||
while [[ ! $ip_correct =~ ^(y|n)$ ]]; do
|
||||
read -p "Is $EXTERNAL_IPv6 your external IPv6 address? (y/n): " ip_correct
|
||||
done
|
||||
|
||||
if [ ! "$ip_correct" == "y" ]
|
||||
then
|
||||
EXTERNAL_IPv6=""
|
||||
while [[ ! $EXTERNAL_IPv6 =~ ^[0-9a-z:]{3,39}$ ]]; do
|
||||
read -p "Please enter correct IPv6 address: " EXTERNAL_IPv6
|
||||
done
|
||||
fi
|
||||
fi
|
||||
|
||||
|
||||
|
||||
# write settings
|
||||
cp sample.env .env
|
||||
sed -i "s/EXTERNAL_IPv4=.*/EXTERNAL_IPv4=$EXTERNAL_IPv4/" .env
|
||||
sed -i "s/EXTERNAL_IPv6=.*/EXTERNAL_IPv6=$EXTERNAL_IPv6/" .env
|
||||
sed -i "s/DOMAIN=.*/DOMAIN=$DOMAIN/" .env
|
||||
|
||||
if [ ! "$greenlight" == "y" ]
|
||||
then
|
||||
sed -i "s/ENABLE_GREENLIGHT.*/#ENABLE_GREENLIGHT=true/" .env
|
||||
fi
|
||||
|
||||
if [ ! "$https_proxy" == "y" ]
|
||||
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 [ "$remove_old_recording" == "y" ]
|
||||
then
|
||||
sed -i "s/#REMOVE_OLD_RECORDING=.*/REMOVE_OLD_RECORDING=true/" .env
|
||||
sed -i "s/#RECORDING_MAX_AGE_DAYS=.*/RECORDING_MAX_AGE_DAYS=$recording_max_age_days/" .env
|
||||
fi
|
||||
|
||||
if [ "$coturn" == "y" ]
|
||||
then
|
||||
sed -i "s/.*TURN_SERVER=.*/TURN_SERVER=turns:$DOMAIN:5349?transport=tcp/" .env
|
||||
TURN_SECRET=$(head /dev/urandom | tr -dc A-Za-f0-9 | head -c 32)
|
||||
sed -i "s/.*TURN_SECRET=.*/TURN_SECRET=$TURN_SECRET/" .env
|
||||
sed -i "s/.*STUN_IP=.*/STUN_IP=$EXTERNAL_IPv4/" .env
|
||||
else
|
||||
sed -i "s/ENABLE_COTURN.*/#ENABLE_COTURN=true/" .env
|
||||
fi
|
||||
|
||||
if [ -n "$CERTPATH" ] && [ -n "$KEYPATH" ]
|
||||
then
|
||||
sed -i "s,#COTURN_TLS_CERT_PATH=.*,COTURN_TLS_CERT_PATH=$CERTPATH," .env
|
||||
sed -i "s,#COTURN_TLS_KEY_PATH=.*,COTURN_TLS_KEY_PATH=$KEYPATH," .env
|
||||
fi
|
||||
|
||||
if [ "$prometheus_exporter" == "y" ]
|
||||
then
|
||||
sed -i "s/#ENABLE_PROMETHEUS_EXPORTER=.*/ENABLE_PROMETHEUS_EXPORTER=true/" .env
|
||||
fi
|
||||
|
||||
if [ "$prometheus_exporter_optimization" == "y" ]
|
||||
then
|
||||
sed -i "s/#ENABLE_PROMETHEUS_EXPORTER_OPTIMIZATION=.*/ENABLE_PROMETHEUS_EXPORTER_OPTIMIZATION=true/" .env
|
||||
fi
|
||||
|
||||
# change secrets
|
||||
RANDOM_1=$(head /dev/urandom | tr -dc A-Za-z0-9 | head -c 40)
|
||||
RANDOM_2=$(head /dev/urandom | tr -dc A-Za-z0-9 | head -c 40)
|
||||
RANDOM_3=$(head /dev/urandom | tr -dc a-f0-9 | head -c 128)
|
||||
RANDOM_4=$(head /dev/urandom | tr -dc A-Za-z0-9 | head -c 40)
|
||||
RANDOM_5=$(head /dev/urandom | tr -dc A-Za-z0-9 | head -c 40)
|
||||
|
||||
sed -i "s/SHARED_SECRET=.*/SHARED_SECRET=$RANDOM_1/" .env
|
||||
sed -i "s/ETHERPAD_API_KEY=.*/ETHERPAD_API_KEY=$RANDOM_2/" .env
|
||||
sed -i "s/RAILS_SECRET=.*/RAILS_SECRET=$RANDOM_3/" .env
|
||||
sed -i "s/FSESL_PASSWORD=.*/FSESL_PASSWORD=$RANDOM_4/" .env
|
||||
sed -i "s/POSTGRESQL_SECRET=.*/POSTGRESQL_SECRET=$RANDOM_5/" .env
|
||||
|
||||
./scripts/generate-compose
|
||||
|
||||
echo "--------------------------------------------------"
|
||||
echo "configuration file .env got successfully created!"
|
||||
echo ""
|
||||
echo "you can look through it for further adjusments"
|
||||
echo " $ nano .env"
|
||||
echo ""
|
||||
echo "make sure to recreate the docker-compose.yml after each change"
|
||||
echo " $ ./scripts/generate-compose"
|
||||
echo ""
|
||||
echo "to start bigbluebutton run"
|
||||
echo " $ docker-compose up -d"
|
||||
38
scripts/upgrade
Executable file
38
scripts/upgrade
Executable file
@@ -0,0 +1,38 @@
|
||||
#!/bin/bash
|
||||
|
||||
set -e
|
||||
cd $(dirname $0)/..
|
||||
|
||||
if [ -z $RESTARTED ]
|
||||
then
|
||||
|
||||
echo "# pull newest bigblugbutton-docker.git"
|
||||
git pull
|
||||
|
||||
# restart script, since it might have changed.
|
||||
RESTARTED=1 ./scripts/upgrade
|
||||
exit
|
||||
|
||||
else
|
||||
|
||||
echo ""
|
||||
echo "# recreate docker-compose.yml"
|
||||
./scripts/generate-compose
|
||||
|
||||
echo ""
|
||||
echo "# pull newest images"
|
||||
docker-compose pull --ignore-pull-failures
|
||||
|
||||
|
||||
COMMIT_HASH=$(git rev-parse --short HEAD)
|
||||
BRANCH_NAME=$(git rev-parse --abbrev-ref HEAD)
|
||||
|
||||
echo ""
|
||||
echo "-------------------------------------"
|
||||
echo "update is ready!"
|
||||
echo "we are on $COMMIT_HASH ($BRANCH_NAME)"
|
||||
echo ""
|
||||
echo "use following command for restarting bbb:"
|
||||
echo " $ docker-compose up -d"
|
||||
echo "-------------------------------------"
|
||||
fi
|
||||
49
scripts/upgrade-and-build
Executable file
49
scripts/upgrade-and-build
Executable file
@@ -0,0 +1,49 @@
|
||||
#!/bin/bash
|
||||
|
||||
set -e
|
||||
cd $(dirname $0)/..
|
||||
|
||||
if [ -z $RESTARTED ]
|
||||
then
|
||||
|
||||
echo "# pull newest bigblugbutton-docker.git"
|
||||
git pull
|
||||
|
||||
# restart script, since it might have changed.
|
||||
RESTARTED=1 ./scripts/upgrade-and-build
|
||||
exit
|
||||
|
||||
else
|
||||
|
||||
echo ""
|
||||
echo "# pull newest git submodules"
|
||||
git submodule init
|
||||
git submodule update
|
||||
|
||||
echo ""
|
||||
echo "# recreate docker-compose.yml"
|
||||
./scripts/generate-compose
|
||||
|
||||
echo ""
|
||||
echo "# pull newest images"
|
||||
docker-compose pull --ignore-pull-failures
|
||||
|
||||
echo ""
|
||||
echo "# rebuild images"
|
||||
docker build -t alangecker/bbb-docker-base-java:latest mod/base-java
|
||||
|
||||
# rebuild everything which got modified
|
||||
docker-compose build
|
||||
|
||||
COMMIT_HASH=$(git rev-parse --short HEAD)
|
||||
BRANCH_NAME=$(git rev-parse --abbrev-ref HEAD)
|
||||
|
||||
echo ""
|
||||
echo "-------------------------------------"
|
||||
echo "images successfully rebuilt!"
|
||||
echo "we are on $COMMIT_HASH ($BRANCH_NAME)"
|
||||
echo ""
|
||||
echo "use following command for restarting bbb:"
|
||||
echo " $ docker-compose up -d"
|
||||
echo "-------------------------------------"
|
||||
fi
|
||||
Reference in New Issue
Block a user