diff --git a/akka-bbb-fsesl/Dockerfile b/akka-bbb-fsesl/Dockerfile index f1a74830107d43d6c4a37378152ac5fe5f1fa5c5..ff06041d93c9a190dfd4b85ae11368ae5f76ad3b 100644 --- a/akka-bbb-fsesl/Dockerfile +++ b/akka-bbb-fsesl/Dockerfile @@ -15,11 +15,12 @@ RUN apt-get update \ RUN cd /source \ && sbt debian:packageBin -# FROM ubuntu:16.04 FROM openjdk:8-jre-slim-stretch COPY --from=builder /source/target/*.deb /root/ RUN dpkg -i /root/*.deb +COPY wait-for-it.sh /usr/local/bin/ + CMD ["/usr/share/bbb-fsesl-akka/bin/bbb-fsesl-akka"] diff --git a/akka-bbb-fsesl/wait-for-it.sh b/akka-bbb-fsesl/wait-for-it.sh new file mode 100755 index 0000000000000000000000000000000000000000..bbe404324bce73f9ca9999dd2d6936cf90e5c184 --- /dev/null +++ b/akka-bbb-fsesl/wait-for-it.sh @@ -0,0 +1,177 @@ +#!/usr/bin/env bash +# Use this script to test if a given TCP host/port are available + +cmdname=$(basename $0) + +echoerr() { if [[ $QUIET -ne 1 ]]; then echo "$@" 1>&2; fi } + +usage() +{ + cat << USAGE >&2 +Usage: + $cmdname host:port [-s] [-t timeout] [-- command args] + -h HOST | --host=HOST Host or IP under test + -p PORT | --port=PORT TCP port under test + Alternatively, you specify the host and port as host:port + -s | --strict Only execute subcommand if the test succeeds + -q | --quiet Don't output any status messages + -t TIMEOUT | --timeout=TIMEOUT + Timeout in seconds, zero for no timeout + -- COMMAND ARGS Execute command with args after the test finishes +USAGE + exit 1 +} + +wait_for() +{ + if [[ $TIMEOUT -gt 0 ]]; then + echoerr "$cmdname: waiting $TIMEOUT seconds for $HOST:$PORT" + else + echoerr "$cmdname: waiting for $HOST:$PORT without a timeout" + fi + start_ts=$(date +%s) + while : + do + if [[ $ISBUSY -eq 1 ]]; then + nc -z $HOST $PORT + result=$? + else + (echo > /dev/tcp/$HOST/$PORT) >/dev/null 2>&1 + result=$? + fi + if [[ $result -eq 0 ]]; then + end_ts=$(date +%s) + echoerr "$cmdname: $HOST:$PORT is available after $((end_ts - start_ts)) seconds" + break + fi + sleep 1 + done + return $result +} + +wait_for_wrapper() +{ + # In order to support SIGINT during timeout: http://unix.stackexchange.com/a/57692 + if [[ $QUIET -eq 1 ]]; then + timeout $BUSYTIMEFLAG $TIMEOUT $0 --quiet --child --host=$HOST --port=$PORT --timeout=$TIMEOUT & + else + timeout $BUSYTIMEFLAG $TIMEOUT $0 --child --host=$HOST --port=$PORT --timeout=$TIMEOUT & + fi + PID=$! + trap "kill -INT -$PID" INT + wait $PID + RESULT=$? + if [[ $RESULT -ne 0 ]]; then + echoerr "$cmdname: timeout occurred after waiting $TIMEOUT seconds for $HOST:$PORT" + fi + return $RESULT +} + +# process arguments +while [[ $# -gt 0 ]] +do + case "$1" in + *:* ) + hostport=(${1//:/ }) + HOST=${hostport[0]} + PORT=${hostport[1]} + shift 1 + ;; + --child) + CHILD=1 + shift 1 + ;; + -q | --quiet) + QUIET=1 + shift 1 + ;; + -s | --strict) + STRICT=1 + shift 1 + ;; + -h) + HOST="$2" + if [[ $HOST == "" ]]; then break; fi + shift 2 + ;; + --host=*) + HOST="${1#*=}" + shift 1 + ;; + -p) + PORT="$2" + if [[ $PORT == "" ]]; then break; fi + shift 2 + ;; + --port=*) + PORT="${1#*=}" + shift 1 + ;; + -t) + TIMEOUT="$2" + if [[ $TIMEOUT == "" ]]; then break; fi + shift 2 + ;; + --timeout=*) + TIMEOUT="${1#*=}" + shift 1 + ;; + --) + shift + CLI=("$@") + break + ;; + --help) + usage + ;; + *) + echoerr "Unknown argument: $1" + usage + ;; + esac +done + +if [[ "$HOST" == "" || "$PORT" == "" ]]; then + echoerr "Error: you need to provide a host and port to test." + usage +fi + +TIMEOUT=${TIMEOUT:-15} +STRICT=${STRICT:-0} +CHILD=${CHILD:-0} +QUIET=${QUIET:-0} + +# check to see if timeout is from busybox? +# check to see if timeout is from busybox? +TIMEOUT_PATH=$(realpath $(which timeout)) +if [[ $TIMEOUT_PATH =~ "busybox" ]]; then + ISBUSY=1 + BUSYTIMEFLAG="-t" +else + ISBUSY=0 + BUSYTIMEFLAG="" +fi + +if [[ $CHILD -gt 0 ]]; then + wait_for + RESULT=$? + exit $RESULT +else + if [[ $TIMEOUT -gt 0 ]]; then + wait_for_wrapper + RESULT=$? + else + wait_for + RESULT=$? + fi +fi + +if [[ $CLI != "" ]]; then + if [[ $RESULT -ne 0 && $STRICT -eq 1 ]]; then + echoerr "$cmdname: strict mode, refusing to execute subprocess" + exit $RESULT + fi + exec "${CLI[@]}" +else + exit $RESULT +fi diff --git a/labs/bbb-webrtc-sfu/config/custom-environment-variables.yml b/labs/bbb-webrtc-sfu/config/custom-environment-variables.yml index 2f5678e2072bf08fa019c366185d480262770b4b..074de09626d59cbb357795d1c39eb81d35f51044 100644 --- a/labs/bbb-webrtc-sfu/config/custom-environment-variables.yml +++ b/labs/bbb-webrtc-sfu/config/custom-environment-variables.yml @@ -3,3 +3,5 @@ kurentoIp: KURENTO_IP redisHost: REDIS_HOST freeswitch: ip: FREESWITCH_IP +log: + level: LOG_LEVEL diff --git a/labs/bbb-webrtc-sfu/docker-entrypoint.sh b/labs/bbb-webrtc-sfu/docker-entrypoint.sh index 5f513af89e9da9ea36c8842325cd7a2beb04973a..d424e511a15e8814d6dbb9fad53b62c07729b2d6 100755 --- a/labs/bbb-webrtc-sfu/docker-entrypoint.sh +++ b/labs/bbb-webrtc-sfu/docker-entrypoint.sh @@ -4,4 +4,8 @@ CONTAINER_IP=$(hostname -I | awk '{print $1}') sed -i "s|^\(localIpAddress\):.*|\1: \"$CONTAINER_IP\"|g" config/production.yml +if [ ! -z "$KURENTO_NAME" ]; then + export KURENTO_IP=$(getent hosts $KURENTO_NAME | awk '{ print $1 }') +fi + npm start diff --git a/labs/docker/docker-compose.yml b/labs/docker/docker-compose.yml index 44b3d809f150d15ace4b210d219882c2aa418b6f..fc63501a792df50389b18fe7ce2c2e3e505f8053 100644 --- a/labs/docker/docker-compose.yml +++ b/labs/docker/docker-compose.yml @@ -12,7 +12,7 @@ services: bbb-html5: image: ${TAG_PREFIX}bbb-html5${TAG_SUFFIX} restart: unless-stopped - links: + depends_on: - mongo - redis environment: @@ -24,7 +24,7 @@ services: bbb-webhooks: image: ${TAG_PREFIX}bbb-webhooks${TAG_SUFFIX} restart: unless-stopped - links: + depends_on: - redis environment: REDIS_HOST: redis @@ -33,7 +33,7 @@ services: bbb-freeswitch: image: ${TAG_PREFIX}bbb-freeswitch${TAG_SUFFIX} restart: unless-stopped - links: + depends_on: - coturn volumes: - media-audio:/var/freeswitch/meetings @@ -41,15 +41,16 @@ services: bbb-webrtc-sfu: image: ${TAG_PREFIX}bbb-webrtc-sfu${TAG_SUFFIX} restart: unless-stopped - links: + depends_on: - redis - kurento - bbb-freeswitch environment: - KURENTO_IP: ${EXTERNAL_IP} + KURENTO_NAME: kurento KURENTO_URL: ws://kurento:8888/kurento REDIS_HOST: redis FREESWITCH_IP: bbb-freeswitch + LOG_LEVEL: debug coturn: image: ${TAG_PREFIX}coturn${TAG_SUFFIX} @@ -84,7 +85,7 @@ services: bbb-apps-akka: image: ${TAG_PREFIX}bbb-apps-akka${TAG_SUFFIX} restart: unless-stopped - links: + depends_on: - redis environment: JAVA_OPTS: -Dredis.host=redis @@ -92,16 +93,17 @@ services: bbb-fsesl-akka: image: ${TAG_PREFIX}bbb-fsesl-akka${TAG_SUFFIX} restart: unless-stopped - links: + depends_on: - bbb-freeswitch - redis + command: ["wait-for-it.sh", "bbb-freeswitch:8021", "--timeout=60", "--strict", "--", "/usr/share/bbb-fsesl-akka/bin/bbb-fsesl-akka"] environment: JAVA_OPTS: -Dredis.host=redis -Dfreeswitch.esl.host=bbb-freeswitch bbb-web: image: ${TAG_PREFIX}bbb-web${TAG_SUFFIX} restart: unless-stopped - links: + depends_on: - redis volumes: - bigbluebutton:/var/bigbluebutton @@ -125,7 +127,7 @@ services: nginx: image: ${TAG_PREFIX}nginx${TAG_SUFFIX} restart: unless-stopped - links: + depends_on: - bbb-webhooks - bbb-web - bbb-html5 diff --git a/labs/docker/freeswitch/Dockerfile b/labs/docker/freeswitch/Dockerfile index 8e0636bea9c45871221ba940e5fae3a6fd892183..4e1cb76c74887934d46d672630954766bb87f166 100644 --- a/labs/docker/freeswitch/Dockerfile +++ b/labs/docker/freeswitch/Dockerfile @@ -8,7 +8,8 @@ RUN apt-get update \ RUN echo "deb http://ubuntu.bigbluebutton.org/xenial-200-dev bigbluebutton-xenial main " | tee /etc/apt/sources.list.d/bigbluebutton.list \ && wget http://ubuntu.bigbluebutton.org/repo/bigbluebutton.asc -O- | apt-key add - \ && apt-get update \ - && apt-get -y install bbb-freeswitch-core + && apt-get -y install bbb-freeswitch-core \ + && find /opt/freeswitch/conf/sip_profiles/ -name "*ipv6*" -prune -exec rm -rf "{}" \; EXPOSE 8021 EXPOSE 5060 diff --git a/labs/docker/freeswitch/docker-entrypoint.sh b/labs/docker/freeswitch/docker-entrypoint.sh index 68472535f61502c0ac95b3f71593dc96aa2d4932..90e82ba379894259f46797fe6e166406a4ad0bfb 100755 --- a/labs/docker/freeswitch/docker-entrypoint.sh +++ b/labs/docker/freeswitch/docker-entrypoint.sh @@ -5,7 +5,10 @@ IP=$(hostname -I | cut -d' ' -f1) xmlstarlet edit --inplace --update '//X-PRE-PROCESS[@cmd="set" and starts-with(@data, "external_rtp_ip=")]/@data' --value "stun:coturn" /opt/freeswitch/conf/vars.xml xmlstarlet edit --inplace --update '//X-PRE-PROCESS[@cmd="set" and starts-with(@data, "external_sip_ip=")]/@data' --value "stun:coturn" /opt/freeswitch/conf/vars.xml xmlstarlet edit --inplace --update '//X-PRE-PROCESS[@cmd="set" and starts-with(@data, "local_ip_v4=")]/@data' --value "${IP}" /opt/freeswitch/conf/vars.xml -xmlstarlet edit --inplace --update '//param[@name="ws-binding"]/@value' --value ":7443" /opt/freeswitch/conf/sip_profiles/external.xml -xmlstarlet edit --inplace --update '//param[@name="ws-binding"]/@name' --value "wss-binding" /opt/freeswitch/conf/sip_profiles/external.xml +# add wss-binding element +xmlstarlet edit --inplace --subnode '//settings' --type elem --name 'newsubnode' --value '' /opt/freeswitch/conf/sip_profiles/external.xml +xmlstarlet edit --inplace --insert '//newsubnode' --type attr --name 'name' --value 'wss-binding' /opt/freeswitch/conf/sip_profiles/external.xml +xmlstarlet edit --inplace --insert '//newsubnode' --type attr --name 'value' --value ':7443' /opt/freeswitch/conf/sip_profiles/external.xml +xmlstarlet edit --inplace --rename '//newsubnode' --value 'param' /opt/freeswitch/conf/sip_profiles/external.xml /opt/freeswitch/bin/freeswitch