Files
PrivyDrop/backend/docker/TURN/configure.sh
T
2025-06-21 16:56:26 +08:00

119 lines
3.2 KiB
Bash

#!/bin/bash
# Define required environment variables
declare -A required_vars=(
["TURN_EXTERNAL_IP"]="TURN server external IP address"
["TURN_REALM"]="TURN server realm"
["TURN_USERNAME"]="TURN server username"
["TURN_PASSWORD"]="TURN server password"
)
# Additional required variables for production environment
production_vars=(
"TURN_CERT_PATH"
"TURN_KEY_PATH"
)
# Validate environment variables
validate_env_vars() {
local missing_vars=()
local env_file=$1
echo "Verifying TURN server environment variable configuration..."
# Load environment variables
source "$env_file"
# Check basic required variables
for var in "${!required_vars[@]}"; do
if [ -z "${!var}" ]; then
missing_vars+=("$var (${required_vars[$var]})")
fi
done
# If it is a production environment, check additional required variables
if [[ "$NODE_ENV" == "production" ]]; then
for var in "${production_vars[@]}"; do
if [ -z "${!var}" ]; then
missing_vars+=("$var (Required for production)")
fi
done
fi
# If there are missing variables, display an error message and exit
if [ ${#missing_vars[@]} -ne 0 ]; then
echo "Error: The following required TURN server variables are not set:"
printf '%s\n' "${missing_vars[@]}" | sed 's/^/ - /'
echo "Please set these variables in $env_file and try again."
exit 1
fi
echo "TURN server environment variables verified successfully!"
}
# Check parameters
if [ -z "$1" ]; then
echo "Usage: $0 <env_file_path>"
exit 1
fi
ENV_FILE=$1
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
# Check if the environment variable file exists
if [ ! -f "$ENV_FILE" ]; then
echo "Error: Environment file $ENV_FILE not found"
exit 1
fi
# Validate environment variables
validate_env_vars "$ENV_FILE"
# Read environment variables
source "$ENV_FILE"
echo "Configuring TURN server..."
# Determine which configuration template to use
if [[ "$NODE_ENV" == "development" ]]; then
TEMPLATE_FILE="$SCRIPT_DIR/turnserver_development.conf"
else
TEMPLATE_FILE="$SCRIPT_DIR/turnserver_production.conf"
fi
# Create a temporary configuration file
TEMP_CONF=$(mktemp)
# Read the template and replace variables
while IFS= read -r line || [ -n "$line" ]; do
# Replace external-ip
if [[ $line =~ ^external-ip= ]]; then
echo "external-ip=$TURN_EXTERNAL_IP"
# Replace realm
elif [[ $line =~ ^realm= ]]; then
echo "realm=$TURN_REALM"
# Replace user credentials
elif [[ $line =~ ^user= ]]; then
echo "user=$TURN_USERNAME:$TURN_PASSWORD"
# Replace certificate path
elif [[ $line =~ ^cert= ]]; then
echo "cert=$TURN_CERT_PATH"
# Replace key path
elif [[ $line =~ ^pkey= ]]; then
echo "pkey=$TURN_KEY_PATH"
else
echo "$line"
fi
done < "$TEMPLATE_FILE" > "$TEMP_CONF"
# cp "$TEMP_CONF" turnserver.conf
# Use sudo to copy the configuration file to the target location
cp "$TEMP_CONF" /etc/turnserver.conf
# Delete temporary file
rm "$TEMP_CONF"
# Restart the TURN server
service coturn restart
echo "TURN server configuration has been updated and service restarted."