|
| 1 | +#!/bin/bash |
| 2 | + |
| 3 | +# Discover public and private IP for this instance |
| 4 | +PUBLIC_IPV4="$(curl -qs http://169.254.169.254/2014-11-05/meta-data/public-ipv4)" |
| 5 | +[ -n "$PUBLIC_IPV4" ] || PUBLIC_IPV4="$(curl -qs ipinfo.io/ip)" |
| 6 | +PRIVATE_IPV4="$(curl -qs http://169.254.169.254/2014-11-05/meta-data/local-ipv4)" |
| 7 | +[ -n "$PRIVATE_IPV4" ] || PRIVATE_IPV4="$(ip addr show eth0 | grep 'inet ' | awk '{print $2}' | cut -d/ -f1)" |
| 8 | + |
| 9 | +# Yes, this does work. See: https://github.com/ianblenke/aws-6to4-docker-ipv6 |
| 10 | +#IPV6="$(ip -6 addr show eth0 scope global | grep inet6 | awk '{print $2}')" |
| 11 | + |
| 12 | +PORT=${PORT:-3478} |
| 13 | +ALT_PORT=${PORT:-3479} |
| 14 | + |
| 15 | +TLS_PORT=${TLS:-5349} |
| 16 | +TLS_ALT_PORT=${PORT:-5350} |
| 17 | + |
| 18 | +MIN_PORT=${MIN_PORT:-49152} |
| 19 | +MAX_PORT=${MAX_PORT:-65535} |
| 20 | + |
| 21 | +TURNSERVER_CONFIG=/app/etc/turnserver.conf |
| 22 | + |
| 23 | +cat <<EOF > ${TURNSERVER_CONFIG}-template |
| 24 | +# https://github.com/coturn/coturn/blob/master/examples/etc/turnserver.conf |
| 25 | +listening-port=${PORT} |
| 26 | +min-port=${MIN_PORT} |
| 27 | +max-port=${MAX_PORT} |
| 28 | +EOF |
| 29 | + |
| 30 | +if [ "${PUBLIC_IPV4}" != "${PRIVATE_IPV4}" ]; then |
| 31 | + echo "external-ip=${PUBLIC_IPV4}/${PRIVATE_IPV4}" >> ${TURNSERVER_CONFIG}-template |
| 32 | +else |
| 33 | + echo "external-ip=${PUBLIC_IPV4}" >> ${TURNSERVER_CONFIG}-template |
| 34 | +fi |
| 35 | + |
| 36 | +if [ -n "${JSON_CONFIG}" ]; then |
| 37 | + echo "${JSON_CONFIG}" | jq -r '.config[]' >> ${TURNSERVER_CONFIG}-template |
| 38 | +fi |
| 39 | + |
| 40 | +if [ -n "$SSL_CERTIFICATE" ]; then |
| 41 | + echo "$SSL_CA_CHAIN" > /app/etc/turn_server_cert.pem |
| 42 | + echo "$SSL_CERTIFICATE" >> /app/etc/turn_server_cert.pem |
| 43 | + echo "$SSL_PRIVATE_KEY" > /app/etc/turn_server_pkey.pem |
| 44 | + |
| 45 | + cat <<EOT >> ${TURNSERVER_CONFIG}-template |
| 46 | +tls-listening-port=${TLS_PORT} |
| 47 | +alt-tls-listening-port=${TLS_ALT_PORT} |
| 48 | +cert=/app/etc/turn_server_cert.pem |
| 49 | +pkey=/app/etc/turn_server_pkey.pem |
| 50 | +EOT |
| 51 | + |
| 52 | +fi |
| 53 | + |
| 54 | +# Allow for ${VARIABLE} substitution using envsubst from gettext |
| 55 | +envsubst < ${TURNSERVER_CONFIG}-template > ${TURNSERVER_CONFIG} |
| 56 | + |
| 57 | +exec /app/bin/turnserver |
0 commit comments