#!/usr/bin/env bash set -euo pipefail IMAGE_TAR="${1:-yzx-oa-sfu_0.1.0-live_linux-amd64.tar}" IMAGE_NAME="${SFU_IMAGE:-yzx-oa-sfu:0.1.0-live}" CONTAINER_NAME="${CONTAINER_NAME:-yzx-oa-sfu}" get_env() { local key="$1" local default_value="$2" local line value line="$(grep -E "^${key}=" .env | tail -n 1 || true)" value="${line#*=}" value="${value%$'\r'}" value="${value#\'}" value="${value%\'}" value="${value#\"}" value="${value%\"}" if [ -n "$value" ]; then printf "%s" "$value" else printf "%s" "$default_value" fi } if [ ! -f ".env" ]; then echo "Missing .env in current directory." >&2 exit 1 fi docker load -i "$IMAGE_TAR" if docker compose version >/dev/null 2>&1; then SFU_IMAGE="$IMAGE_NAME" docker compose -f docker-compose.image.yml up -d docker compose -f docker-compose.image.yml ps elif command -v docker-compose >/dev/null 2>&1; then SFU_IMAGE="$IMAGE_NAME" docker-compose -f docker-compose.image.yml up -d docker-compose -f docker-compose.image.yml ps else PORT="$(get_env PORT 4443)" RTC_MIN_PORT="$(get_env MEDIASOUP_RTC_MIN_PORT 40000)" RTC_MAX_PORT="$(get_env MEDIASOUP_RTC_MAX_PORT 40100)" docker rm -f "$CONTAINER_NAME" 2>/dev/null || true docker run -d \ --name "$CONTAINER_NAME" \ --restart unless-stopped \ --security-opt seccomp=unconfined \ --env-file .env \ -p "${PORT}:${PORT}/tcp" \ -p "${RTC_MIN_PORT}-${RTC_MAX_PORT}:${RTC_MIN_PORT}-${RTC_MAX_PORT}/udp" \ -p "${RTC_MIN_PORT}-${RTC_MAX_PORT}:${RTC_MIN_PORT}-${RTC_MAX_PORT}/tcp" \ "$IMAGE_NAME" docker ps --filter "name=${CONTAINER_NAME}" fi