
All checks were successful
Test and Publish Templates / test-and-publish (push) Successful in 22s
76 lines
3.3 KiB
Bash
Executable File
76 lines
3.3 KiB
Bash
Executable File
#!/bin/bash
|
|
# shellcheck disable=SC1091
|
|
source "${AGENT_PATH}/common.sh"
|
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
source "${SCRIPT_DIR}/_paths.sh"
|
|
_check_required_env_vars "PROJECT_NAME" "LOCAL_DATA_FOLDER" "CAMERA_IP" "CLUB_CODE" "COURT_NUMBER" "RECORDINGS_FOLDER"
|
|
|
|
# Create directories
|
|
# shellcheck disable=SC2046
|
|
create_items $(get_squashkiwi_streaming_paths) || _die "Failed to create directories"
|
|
mkdir -p "${RECORDINGS_FOLDER}/court_main"
|
|
mkdir -p "${RECORDINGS_FOLDER}/court_sub"
|
|
mkdir -p "${LOCAL_DATA_FOLDER}/config"
|
|
mkdir -p "${LOCAL_DATA_FOLDER}/config/overlay"
|
|
mkdir -p "${LOCAL_DATA_FOLDER}/config/web"
|
|
|
|
# Copy configuration files
|
|
cp -r "${SCRIPT_DIR}/config/"* "${LOCAL_DATA_FOLDER}/config/" || _die "Failed to copy config files"
|
|
|
|
# URL-encode the camera password if it contains special characters
|
|
# Only encode if not already encoded (check for % sign)
|
|
if [[ "${CAMERA_PASSWORD}" == *[!\@\#\$\&]* ]] && [[ "${CAMERA_PASSWORD}" != *%* ]]; then
|
|
echo "Note: Camera password contains special characters. Encoding for RTSP URL..."
|
|
CAMERA_PASSWORD=$(echo -n "${CAMERA_PASSWORD}" | sed 's/!/%21/g; s/@/%40/g; s/#/%23/g; s/\$/%24/g; s/&/%26/g')
|
|
fi
|
|
|
|
# Create .env file for docker-compose with all required variables
|
|
echo "Creating environment file for docker-compose..."
|
|
cat > "${LOCAL_DATA_FOLDER}/config/.env" <<EOF
|
|
# Auto-generated environment file for docker-compose
|
|
PROJECT_NAME=${PROJECT_NAME}
|
|
RECORDINGS_FOLDER=${RECORDINGS_FOLDER}
|
|
MTX_PATHS_COURT_SOURCE=rtsp://${CAMERA_USER}:${CAMERA_PASSWORD}@${CAMERA_IP}:${CAMERA_RTSP_PORT}/cam/realmonitor?channel=1&subtype=0
|
|
MTX_PATHS_COURT_MAIN_SOURCE=rtsp://${CAMERA_USER}:${CAMERA_PASSWORD}@${CAMERA_IP}:${CAMERA_RTSP_PORT}/cam/realmonitor?channel=1&subtype=0
|
|
MTX_PATHS_COURT_SUB_SOURCE=rtsp://${CAMERA_USER}:${CAMERA_PASSWORD}@${CAMERA_IP}:${CAMERA_RTSP_PORT}/cam/realmonitor?channel=1&subtype=1
|
|
MEDIAMTX_USER=${MEDIAMTX_USER}
|
|
MEDIAMTX_PASS=${MEDIAMTX_PASS}
|
|
SQUASHKIWI_API=${SQUASHKIWI_API}
|
|
CLUB_CODE=${CLUB_CODE}
|
|
COURT_NUMBER=${COURT_NUMBER}
|
|
COURT_NAME=${COURT_NAME}
|
|
IDLE_TIMEOUT=${IDLE_TIMEOUT}
|
|
RECORDING_RETENTION_DAYS=${RECORDING_RETENTION_DAYS}
|
|
HOST_PORT=${HOST_PORT}
|
|
CLOUDFLARE_TUNNEL_TOKEN=${CLOUDFLARE_TUNNEL_TOKEN}
|
|
GRAFANA_PASSWORD=${GRAFANA_PASSWORD}
|
|
EOF
|
|
|
|
# Test Docker
|
|
_check_docker_installed || _die "Docker test failed, aborting installation..."
|
|
|
|
# Test camera connection (optional check)
|
|
echo "Testing camera connection to ${CAMERA_IP}..."
|
|
if ping -c 1 -W 2 "${CAMERA_IP}" > /dev/null 2>&1; then
|
|
echo "✓ Camera IP is reachable"
|
|
else
|
|
echo "⚠ Warning: Camera IP ${CAMERA_IP} is not reachable. Please check camera connection."
|
|
fi
|
|
|
|
# Build overlay service
|
|
cd "${LOCAL_DATA_FOLDER}/config" || _die "Failed to change to config directory"
|
|
docker compose build overlay-service || _die "Failed to build overlay service"
|
|
|
|
# Stop any existing containers
|
|
bash "${SCRIPT_DIR}/stop.sh" 2>/dev/null || true
|
|
|
|
# Start services
|
|
bash "${SCRIPT_DIR}/start.sh" || _die "Failed to start services"
|
|
|
|
echo ""
|
|
echo "Installation of ${PROJECT_NAME} complete!"
|
|
echo "Access the stream at: http://$(hostname -I | awk '{print $1}'):${HOST_PORT}"
|
|
echo ""
|
|
echo "To enable optional features:"
|
|
echo " - Cloudflare tunnel: Set CLOUDFLARE_TUNNEL_TOKEN in service.env and run: docker compose --profile tunnel up -d"
|
|
echo " - Monitoring: docker compose --profile monitoring up -d" |