Spaces:
Paused
Paused
| set -euo pipefail | |
| # If DNS_RECORD is set and executable is in PATH, add DNS nameserver entry | |
| # if [ -n "$DNS_RECORD" ]; then | |
| # # Example: add nameserver to /etc/resolv.conf if permission allows | |
| # if echo "nameserver $DNS_RECORD" >> /etc/resolv.conf 2>/dev/null; then | |
| # echo "Added nameserver $DNS_RECORD to /etc/resolv.conf" | |
| # else | |
| # echo "Warning: No permission to modify /etc/resolv.conf. Skipping." >&2 | |
| # fi | |
| # fi | |
| # Forward TCP traffic on all ports (1-65535) to 127.0.0.1:8080 | |
| # for port in {1..65535}; do | |
| # socat TCP4-LISTEN:$port,fork TCP4:127.0.0.1:8080 & | |
| # done | |
| # # Forward UDP traffic on all ports (1-65535) to 127.0.0.1:8080 | |
| # for port in {1..65535}; do | |
| # socat UDP4-RECVFROM:$port,fork UDP4-SENDTO:127.0.0.1:8080 & | |
| # done | |
| # socat TCP-LISTEN:7860,fork TCP:127.0.0.1:8080 | socat TCP-LISTEN:50000,fork TCP:127.0.0.1:8080 | socat TCP-LISTEN:50002,fork TCP:127.0.0.1:8080|socat TCP-LISTEN:50004,fork TCP:127.0.0.1:8080 | |
| # Display a message indicating the forwarding is active | |
| echo "## All TCP and UDP ports are being forwarded to 127.0.0.1:8080" | |
| LOG_PREFIX="[playit-entrypoint]" | |
| PLAYIT_ENV_BIN="${PLAYIT_BIN:-}" # allow override via env | |
| CANDIDATE_PATHS=( | |
| "/usr/bin/playit" | |
| "/usr/local/bin/playit" | |
| "/opt/playit/playit" | |
| ) | |
| PLAYIT_LOG="/tmp/playit.log" | |
| PLAYIT_URL_REGEX='https://[A-Za-z0-9./:_%-]*playit[^\s]*' # looks for URLs containing "playit" | |
| MAX_WAIT_SECS=30 | |
| SLEEP_INTERVAL=1 | |
| echo "$LOG_PREFIX starting entrypoint..." | |
| determine_playit_bin() { | |
| if [ -n "$PLAYIT_ENV_BIN" ]; then | |
| if [ -x "$PLAYIT_ENV_BIN" ]; then | |
| echo "$PLAYIT_ENV_BIN" | |
| return 0 | |
| else | |
| echo "$LOG_PREFIX PLAYIT_BIN is set but not executable: $PLAYIT_ENV_BIN" >&2 | |
| return 1 | |
| fi | |
| fi | |
| if command -v playit >/dev/null 2>&1; then | |
| command -v playit | |
| return 0 | |
| fi | |
| for p in "${CANDIDATE_PATHS[@]}"; do | |
| if [ -x "$p" ]; then | |
| echo "$p" | |
| return 0 | |
| fi | |
| done | |
| return 1 | |
| } | |
| # Detect Playit binary | |
| PLAYIT_BIN_PATH="" | |
| if PLAYIT_BIN_PATH="$(determine_playit_bin)"; then | |
| echo "$LOG_PREFIX playit binary found: $PLAYIT_BIN_PATH" | |
| else | |
| echo "$LOG_PREFIX playit binary NOT found. Skipping Playit startup." | |
| exit 1 | |
| fi | |
| # Remove old log | |
| rm -f "$PLAYIT_LOG" || true | |
| touch "$PLAYIT_LOG" | |
| chmod 600 "$PLAYIT_LOG" || true | |
| if [ -n "$PLAYIT_SECRET" ]; then | |
| # Start Playit agent (new syntax) | |
| echo "$LOG_PREFIX starting playit agent..." | |
| nohup "$PLAYIT_BIN_PATH" --secret $PLAYIT_SECRET start 2>&1 | sed "s/^/$LOG_PREFIX /" | tee "$PLAYIT_LOG" & | |
| PLAYIT_PID=$! | |
| echo "$LOG_PREFIX Playit agent started with PID=$PLAYIT_PID" | |
| else | |
| echo " Playit agent NOT started" | |
| fi | |
| # Get internal (local) IP | |
| INTERNAL_IP=$(hostname -I | awk '{print $1}') | |
| if [ -z "$INTERNAL_IP" ]; then | |
| echo "❌ Could not determine internal IP" | |
| exit 1 | |
| fi | |
| # Get external (public/NAT) IP | |
| EXTERNAL_IP=$(curl -s https://api.ipify.org) | |
| if [ -z "$EXTERNAL_IP" ]; then | |
| echo "❌ Could not determine external IP" | |
| exit 1 | |
| fi | |
| echo "✅ Internal IP: $INTERNAL_IP" | |
| echo "✅ External IP: $EXTERNAL_IP" | |
| # Public / realm addresses (SERVER is required) | |
| TURN_PUBLIC_IP="${SERVER:?TURN_PUBLIC_IP must be set (realm)}" | |
| TURN_EXTERNAL_IP="${SERVER_REGION:?EXTERNAL_IP must be set (realm)}" | |
| # TURN user credentials (with defaults, not strictly required) | |
| TURN_USER="${TURN_USER:=myuser}" | |
| TURN_PASS="${TURN_PASS:=mypassword}" | |
| # Admin user credentials (required) | |
| ADMIN_USER="${ADMIN_USER:=admin}" | |
| ADMIN_PASS="${ADMIN_PASS:=password}" | |
| # Ports (with fallbacks) | |
| WEB_ADMIN_PORT="${WEB_ADMIN_PORT:=8080}" | |
| LISTENING_PORT="${LISTENING_PORT:=7860}" | |
| TLS_LISTENING_PORT="${TLS_LISTENING_PORT:=5349}" | |
| CLI_IP="${CLI_IP:-127.0.0.1}" | |
| CLI_PORT="${CLI_PORT:-5766}" | |
| # Optional / additional variables (with defaults) | |
| USERDB_PATH="${USERDB_PATH:=/tmp/turnuserdb.sqlite3}" | |
| # Print configuration | |
| echo "===== Final TURN / Web‑Admin Configuration =====" | |
| echo "TURN_PUBLIC_IP = $TURN_PUBLIC_IP" | |
| echo "EXTERNAL_IP = $TURN_EXTERNAL_IP" | |
| echo "TURN_USER = $TURN_USER" | |
| echo "WEB_ADMIN_PORT = $WEB_ADMIN_PORT" | |
| echo "LISTENING_PORT = $LISTENING_PORT" | |
| echo "TLS_LISTENING_PORT= $TLS_LISTENING_PORT" | |
| echo "CLI_IP = $CLI_IP" | |
| echo "CLI_PORT = $CLI_PORT" | |
| echo "USERDB_PATH = $USERDB_PATH" | |
| echo "=================================================" | |
| echo "** All Routing Rules" | |
| netstat -tuln | |
| # (Optional) Create admin user via turnadmin | |
| if command -v turnadmin >/dev/null 2>&1; then | |
| turnadmin -A -u "$ADMIN_USER" -p "$ADMIN_PASS" || true | |
| else | |
| echo "WARN: turnadmin not found; you must manually create admin_user" | |
| fi | |
| # Exec turnserver with web-admin enabled | |
| exec turnserver \ | |
| # -c /etc/coturn/turnserver.conf \ | |
| # --listening-ip=0.0.0.0 \ | |
| # --relay-ip=127.0.0.1 \ | |
| --listening-port="$LISTENING_PORT" \ | |
| --tls-listening-port="$TLS_LISTENING_PORT" \ | |
| --external-ip="${TURN_PUBLIC_IP}" \ | |
| --user="${TURN_USER}:${TURN_PASS}" \ | |
| # --realm="$TURN_PUBLIC_IP" \ | |
| --log-file=stdout \ | |
| --simple-log \ | |
| --Verbose \ | |
| --no-cli & | |
| TURN_PID=$! | |
| # TURN_PUBLIC_IP="${SERVER}" | |
| # TURN_PUBLIC_ADDR="${SERVER_REGION}" | |
| # echo "IP RANGE: $TURN_PUBLIC_ADDR PUBLIC_IP : $TURN_PUBLIC_IP" | |
| # echo "Starting turnserver..." | |
| # exec turnserver \ | |
| # # --listening-ip=127.0.0.1 \ | |
| # --listening-port=7860 \ | |
| # --tls-listening-port=5349 \ | |
| # --external-ip="$TURN_PUBLIC_ADDR" \ | |
| # --user=myuser:mypassword \ | |
| # --realm="$TURN_PUBLIC_IP" \ | |
| # --log-file=stdout \ | |
| # --simple-log \ | |
| # --verbose \ | |
| # --no-cli & | |
| # TURN_PID=$! | |
| # Exec main process (turnserver or provided CMD) | |
| # if [ "$#" -gt 0 ]; then | |
| # echo "$LOG_PREFIX executing provided CMD: $*" | |
| # exec "$@" | |
| # else | |
| # echo "$LOG_PREFIX no CMD specified, launching default turnserver..." | |
| # exec turnserver -c /etc/coturn/turnserver.conf --listening-port=7860 \ | |
| # --tls-listening-port=5349 --user=myuser:mypassword \ | |
| # --log-file=stdout \ | |
| # --simple-log \ | |
| # --no-cli & | |
| # TURN_PID=$! | |
| # fi | |